From 61827e6fd07d358d43fe67e9a7e2559f7cf3e991 Mon Sep 17 00:00:00 2001 From: blckmn Date: Sat, 7 Jan 2017 09:08:33 +1100 Subject: [PATCH] Adding DSHOT1200 and 900 --- src/main/drivers/pwm_output.c | 2 ++ src/main/drivers/pwm_output.h | 16 ++++++++++++++++ src/main/drivers/pwm_output_stm32f3xx.c | 16 ++++++---------- src/main/drivers/pwm_output_stm32f4xx.c | 16 ++++++---------- src/main/drivers/pwm_output_stm32f7xx.c | 10 ---------- src/main/fc/serial_cli.c | 2 +- src/main/flight/mixer.c | 14 +++++++++++--- 7 files changed, 42 insertions(+), 34 deletions(-) diff --git a/src/main/drivers/pwm_output.c b/src/main/drivers/pwm_output.c index 2a123b8c9..a98d510c0 100644 --- a/src/main/drivers/pwm_output.c +++ b/src/main/drivers/pwm_output.c @@ -223,6 +223,8 @@ void motorInit(const motorConfig_t *motorConfig, uint16_t idlePulse, uint8_t mot idlePulse = 0; break; #ifdef USE_DSHOT + case PWM_TYPE_DSHOT1200: + case PWM_TYPE_DSHOT900: case PWM_TYPE_DSHOT600: case PWM_TYPE_DSHOT300: case PWM_TYPE_DSHOT150: diff --git a/src/main/drivers/pwm_output.h b/src/main/drivers/pwm_output.h index 4966f38ab..64c31292c 100644 --- a/src/main/drivers/pwm_output.h +++ b/src/main/drivers/pwm_output.h @@ -30,11 +30,27 @@ typedef enum { PWM_TYPE_DSHOT600, PWM_TYPE_DSHOT300, PWM_TYPE_DSHOT150, + PWM_TYPE_DSHOT900, + PWM_TYPE_DSHOT1200, PWM_TYPE_MAX } motorPwmProtocolTypes_e; #define PWM_TIMER_MHZ 1 +#ifdef USE_DSHOT +#define MAX_DMA_TIMERS 8 + +#define MOTOR_DSHOT1200_MHZ 24 +#define MOTOR_DSHOT900_MHZ 18 +#define MOTOR_DSHOT600_MHZ 12 +#define MOTOR_DSHOT300_MHZ 6 +#define MOTOR_DSHOT150_MHZ 3 + +#define MOTOR_BIT_0 7 +#define MOTOR_BIT_1 14 +#define MOTOR_BITLENGTH 19 +#endif + #if defined(STM32F40_41xxx) // must be multiples of timer clock #define ONESHOT125_TIMER_MHZ 12 #define ONESHOT42_TIMER_MHZ 21 diff --git a/src/main/drivers/pwm_output_stm32f3xx.c b/src/main/drivers/pwm_output_stm32f3xx.c index cad425954..efb99c8ed 100644 --- a/src/main/drivers/pwm_output_stm32f3xx.c +++ b/src/main/drivers/pwm_output_stm32f3xx.c @@ -32,16 +32,6 @@ #ifdef USE_DSHOT -#define MAX_DMA_TIMERS 8 - -#define MOTOR_DSHOT600_MHZ 24 -#define MOTOR_DSHOT300_MHZ 12 -#define MOTOR_DSHOT150_MHZ 6 - -#define MOTOR_BIT_0 14 -#define MOTOR_BIT_1 29 -#define MOTOR_BITLENGTH 39 - static uint8_t dmaMotorTimerCount = 0; static motorDmaTimer_t dmaMotorTimers[MAX_DMA_TIMERS]; static motorDmaOutput_t dmaMotors[MAX_SUPPORTED_MOTORS]; @@ -148,6 +138,12 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t uint32_t hz; switch (pwmProtocolType) { + case(PWM_TYPE_DSHOT1200): + hz = MOTOR_DSHOT1200_MHZ * 1000000; + break; + case(PWM_TYPE_DSHOT900): + hz = MOTOR_DSHOT900_MHZ * 1000000; + break; case(PWM_TYPE_DSHOT600): hz = MOTOR_DSHOT600_MHZ * 1000000; break; diff --git a/src/main/drivers/pwm_output_stm32f4xx.c b/src/main/drivers/pwm_output_stm32f4xx.c index d10d133ce..b883c4c89 100644 --- a/src/main/drivers/pwm_output_stm32f4xx.c +++ b/src/main/drivers/pwm_output_stm32f4xx.c @@ -31,16 +31,6 @@ #ifdef USE_DSHOT -#define MAX_DMA_TIMERS 8 - -#define MOTOR_DSHOT600_MHZ 12 -#define MOTOR_DSHOT300_MHZ 6 -#define MOTOR_DSHOT150_MHZ 3 - -#define MOTOR_BIT_0 7 -#define MOTOR_BIT_1 14 -#define MOTOR_BITLENGTH 19 - static uint8_t dmaMotorTimerCount = 0; static motorDmaTimer_t dmaMotorTimers[MAX_DMA_TIMERS]; static motorDmaOutput_t dmaMotors[MAX_SUPPORTED_MOTORS]; @@ -146,6 +136,12 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t uint32_t hz; switch (pwmProtocolType) { + case(PWM_TYPE_DSHOT1200): + hz = MOTOR_DSHOT1200_MHZ * 1000000; + break; + case(PWM_TYPE_DSHOT900): + hz = MOTOR_DSHOT900_MHZ * 1000000; + break; case(PWM_TYPE_DSHOT600): hz = MOTOR_DSHOT600_MHZ * 1000000; break; diff --git a/src/main/drivers/pwm_output_stm32f7xx.c b/src/main/drivers/pwm_output_stm32f7xx.c index 2a52652d1..adabb4877 100644 --- a/src/main/drivers/pwm_output_stm32f7xx.c +++ b/src/main/drivers/pwm_output_stm32f7xx.c @@ -30,16 +30,6 @@ #ifdef USE_DSHOT -#define MAX_DMA_TIMERS 8 - -#define MOTOR_DSHOT600_MHZ 12 -#define MOTOR_DSHOT300_MHZ 6 -#define MOTOR_DSHOT150_MHZ 3 - -#define MOTOR_BIT_0 7 -#define MOTOR_BIT_1 14 -#define MOTOR_BITLENGTH 19 - static uint8_t dmaMotorTimerCount = 0; static motorDmaTimer_t dmaMotorTimers[MAX_DMA_TIMERS]; static motorDmaOutput_t dmaMotors[MAX_SUPPORTED_MOTORS]; diff --git a/src/main/fc/serial_cli.c b/src/main/fc/serial_cli.c index 2cf8aae67..0df34424d 100755 --- a/src/main/fc/serial_cli.c +++ b/src/main/fc/serial_cli.c @@ -334,7 +334,7 @@ static const char * const lookupTableSuperExpoYaw[] = { static const char * const lookupTablePwmProtocol[] = { "OFF", "ONESHOT125", "ONESHOT42", "MULTISHOT", "BRUSHED", #ifdef USE_DSHOT - "DSHOT600", "DSHOT300", "DSHOT150" + "DSHOT600", "DSHOT300", "DSHOT150", "DSHOT900", "DSHOT1200", #endif }; diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c index 59e505fb5..5be4a6abd 100755 --- a/src/main/flight/mixer.c +++ b/src/main/flight/mixer.c @@ -247,11 +247,19 @@ uint8_t getMotorCount() bool isMotorProtocolDshot(void) { #ifdef USE_DSHOT - if (motorConfig->motorPwmProtocol == PWM_TYPE_DSHOT150 || motorConfig->motorPwmProtocol == PWM_TYPE_DSHOT300 || motorConfig->motorPwmProtocol == PWM_TYPE_DSHOT600) + switch(motorConfig->motorPwmProtocol) { + case PWM_TYPE_DSHOT1200: + case PWM_TYPE_DSHOT900: + case PWM_TYPE_DSHOT600: + case PWM_TYPE_DSHOT300: + case PWM_TYPE_DSHOT150: return true; - else + default: + return false; + } +#else + return false; #endif - return false; } // Add here scaled ESC outputs for digital protol