diff --git a/src/main/config/config.c b/src/main/config/config.c index 9936b78a1..6ffab2de5 100755 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -486,7 +486,7 @@ static void resetConf(void) masterConfig.motor_pwm_rate = BRUSHLESS_MOTORS_PWM_RATE; #endif masterConfig.servo_pwm_rate = 50; - masterConfig.fast_pwm_protocol = 0; + masterConfig.fast_pwm_protocol = 1; masterConfig.use_unsyncedPwm = 0; #ifdef CC3D masterConfig.use_buzzer_p6 = 0; diff --git a/src/main/config/config_master.h b/src/main/config/config_master.h index c61df40e6..c0695be6a 100644 --- a/src/main/config/config_master.h +++ b/src/main/config/config_master.h @@ -34,7 +34,7 @@ typedef struct master_t { uint16_t motor_pwm_rate; // The update rate of motor outputs (50-498Hz) uint16_t servo_pwm_rate; // The update rate of servo outputs (50-498Hz) - uint8_t fast_pwm_protocol; // Fast Pwm Protocol + uint8_t fast_pwm_protocol; // Pwm Protocol uint8_t use_unsyncedPwm; // unsync fast pwm protocol from PID loop #ifdef USE_SERVOS diff --git a/src/main/drivers/pwm_mapping.c b/src/main/drivers/pwm_mapping.c index 0ce82b518..b95efed1d 100755 --- a/src/main/drivers/pwm_mapping.c +++ b/src/main/drivers/pwm_mapping.c @@ -929,7 +929,7 @@ if (init->useBuzzerP6) { } #endif if (init->useFastPwm) { - pwmFastPwmMotorConfig(timerHardwarePtr, pwmOutputConfiguration.motorCount, init->fastPwmProtocolType, init->motorPwmRate, init->useUnsyncedPwm, init->idlePulse); + pwmFastPwmMotorConfig(timerHardwarePtr, pwmOutputConfiguration.motorCount, init->pwmProtocolType, init->motorPwmRate, init->useUnsyncedPwm, init->idlePulse); pwmOutputConfiguration.portConfigurations[pwmOutputConfiguration.outputCount].flags = PWM_PF_MOTOR | PWM_PF_OUTPUT_PROTOCOL_ONESHOT|PWM_PF_OUTPUT_PROTOCOL_PWM ; } else if (isMotorBrushed(init->motorPwmRate)) { pwmBrushedMotorConfig(timerHardwarePtr, pwmOutputConfiguration.motorCount, init->motorPwmRate, init->idlePulse); diff --git a/src/main/drivers/pwm_mapping.h b/src/main/drivers/pwm_mapping.h index 1edf1458d..aaaf4ac6b 100644 --- a/src/main/drivers/pwm_mapping.h +++ b/src/main/drivers/pwm_mapping.h @@ -71,7 +71,7 @@ typedef struct drv_pwm_config_s { #ifdef USE_SERVOS bool useServos; bool useChannelForwarding; // configure additional channels as servos - uint8_t fastPwmProtocolType; + uint8_t pwmProtocolType; uint16_t servoPwmRate; uint16_t servoCenterPulse; #endif diff --git a/src/main/drivers/pwm_output.h b/src/main/drivers/pwm_output.h index 615ffa7ac..060d7f388 100644 --- a/src/main/drivers/pwm_output.h +++ b/src/main/drivers/pwm_output.h @@ -18,9 +18,10 @@ #pragma once typedef enum { - PWM_TYPE_ONESHOT125 = 0, - PWM_TYPE_ONESHOT42 = 1, - PWM_TYPE_MULTISHOT = 2 + PWM_TYPE_CONVENTIONAL = 0, + PWM_TYPE_ONESHOT125, + PWM_TYPE_ONESHOT42, + PWM_TYPE_MULTISHOT } FastPwmProtocolTypes_e; void pwmWriteMotor(uint8_t index, uint16_t value); diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c index 12fa08adf..911cc9ecc 100644 --- a/src/main/io/serial_cli.c +++ b/src/main/io/serial_cli.c @@ -443,7 +443,7 @@ static const char * const lookupTableSuperExpoYaw[] = { }; static const char * const lookupTableFastPwm[] = { - "ONESHOT125", "ONESHOT42", "MULTISHOT" + "OFF", "ONESHOT125", "ONESHOT42", "MULTISHOT" }; typedef struct lookupTableEntry_s { diff --git a/src/main/io/serial_msp.c b/src/main/io/serial_msp.c index aa0d23b8c..f243b3001 100644 --- a/src/main/io/serial_msp.c +++ b/src/main/io/serial_msp.c @@ -171,9 +171,6 @@ void setGyroSamplingSpeed(uint16_t looptime) { masterConfig.pid_process_denom = 1; } #endif - - // Oneshot125 protection - if ((masterConfig.fast_pwm_protocol == 0) && ((masterConfig.gyro_sync_denom * gyroSampleRate) == 125) && masterConfig.pid_process_denom < 3) masterConfig.pid_process_denom = 3; } } diff --git a/src/main/main.c b/src/main/main.c index 06a7e99c3..6f301131e 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -44,6 +44,7 @@ #include "drivers/compass.h" #include "drivers/pwm_mapping.h" #include "drivers/pwm_rx.h" +#include "drivers/pwm_output.h" #include "drivers/adc.h" #include "drivers/bus_i2c.h" #include "drivers/bus_bst.h" @@ -311,8 +312,14 @@ void init(void) pwm_params.servoPwmRate = masterConfig.servo_pwm_rate; #endif - pwm_params.useFastPwm = feature(FEATURE_ONESHOT125); // Configurator feature abused for enabling Fast PWM - pwm_params.fastPwmProtocolType = masterConfig.fast_pwm_protocol; + if (masterConfig.fast_pwm_protocol == PWM_TYPE_ONESHOT125) { + featureSet(FEATURE_ONESHOT125); + } else { + featureClear(FEATURE_ONESHOT125); + } + + pwm_params.useFastPwm = (masterConfig.fast_pwm_protocol != PWM_TYPE_CONVENTIONAL) ? true : false; // Configurator feature abused for enabling Fast PWM + pwm_params.pwmProtocolType = masterConfig.fast_pwm_protocol; pwm_params.motorPwmRate = masterConfig.motor_pwm_rate; pwm_params.idlePulse = masterConfig.escAndServoConfig.mincommand; pwm_params.useUnsyncedPwm = masterConfig.use_unsyncedPwm;