diff --git a/src/drivers/rpi_pca9685_pwm_out/CMakeLists.txt b/src/drivers/rpi_pca9685_pwm_out/CMakeLists.txt index c800fc73cf..ecf2807cc2 100644 --- a/src/drivers/rpi_pca9685_pwm_out/CMakeLists.txt +++ b/src/drivers/rpi_pca9685_pwm_out/CMakeLists.txt @@ -35,9 +35,9 @@ px4_add_module( MAIN rpi_pca9685_pwm_out COMPILE_FLAGS SRCS - PCA9685.cpp - rpi_pca9685_pwm_out.cpp + PCA9685.cpp + rpi_pca9685_pwm_out.cpp DEPENDS - platforms__common -) + platforms__common + ) # vim: set noet ft=cmake fenc=utf-8 ff=unix : diff --git a/src/drivers/rpi_pca9685_pwm_out/PCA9685.cpp b/src/drivers/rpi_pca9685_pwm_out/PCA9685.cpp index 851c27853b..60c91687ae 100644 --- a/src/drivers/rpi_pca9685_pwm_out/PCA9685.cpp +++ b/src/drivers/rpi_pca9685_pwm_out/PCA9685.cpp @@ -86,7 +86,7 @@ void PCA9685::setPWMFreq(int freq) int fd = openfd(); if (fd != -1) { - uint8_t prescale = (CLOCK_FREQ / 4096 / freq) - 1; + uint8_t prescale = (CLOCK_FREQ / MAX_PWM_RES / freq) - 1; //printf ("Setting prescale value to: %d\n", prescale); //printf ("Using Frequency: %d\n", freq); diff --git a/src/drivers/rpi_pca9685_pwm_out/PCA9685.h b/src/drivers/rpi_pca9685_pwm_out/PCA9685.h index ed1b78153c..c6070a79e5 100644 --- a/src/drivers/rpi_pca9685_pwm_out/PCA9685.h +++ b/src/drivers/rpi_pca9685_pwm_out/PCA9685.h @@ -45,6 +45,7 @@ #define ALLLED_OFF_L 0xFC //load all the LEDn_OFF registers, byte 0 (turn 0-7 channels off) #define ALLLED_OFF_H 0xFD //load all the LEDn_OFF registers, byte 1 (turn 8-15 channels off) #define PRE_SCALE 0xFE //prescaler for output frequency +#define MAX_PWM_RES 4096 //10bit精度 #define CLOCK_FREQ 25000000.0 //25MHz default osc clock #define BUFFER_SIZE 0x08 //1 byte buffer //! Main class that exports features for PCA9685 chip diff --git a/src/drivers/rpi_pca9685_pwm_out/rpi_pca9685_pwm_out.cpp b/src/drivers/rpi_pca9685_pwm_out/rpi_pca9685_pwm_out.cpp index 98172bf67a..79d9a11048 100644 --- a/src/drivers/rpi_pca9685_pwm_out/rpi_pca9685_pwm_out.cpp +++ b/src/drivers/rpi_pca9685_pwm_out/rpi_pca9685_pwm_out.cpp @@ -82,7 +82,7 @@ int rpi_pca9685_pwm_out::pwm_initialize() /**************初始化PCA9685开始*************/ pwm.init(1, 0x40); usleep(1000 * 100); - pwm.setPWMFreq(61); + pwm.setPWMFreq(200); //12BIT 精度输出下,好赢电调可以到200HZ刷新 usleep(1000 * 1000); /**************初始化PCA9685结束************/ return 0; @@ -99,6 +99,7 @@ void rpi_pca9685_pwm_out::send_outputs_pwm(const uint16_t *pwm) int i; for (i = 0; i < NUM_PWM; ++i) { + PX4_WARN("PWM%d:%d\n", i, *(pwm + i)); rpi_pca9685_pwm_out::pwm.setPWM(i, *(pwm + i)); } }