From 9f762aa88a04542907ac3cb0412895954c7909d3 Mon Sep 17 00:00:00 2001 From: borisbstyle Date: Wed, 30 Nov 2016 00:43:58 +0100 Subject: [PATCH] Convert digital offset to percentage Bump EEPROM Fix rounding --- src/main/config/config_eeprom.h | 2 +- src/main/fc/config.c | 2 +- src/main/flight/mixer.c | 6 +++--- src/main/flight/mixer.h | 4 ++-- src/main/io/motors.h | 2 +- src/main/io/serial_cli.c | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/config/config_eeprom.h b/src/main/config/config_eeprom.h index f1f9facba..8124dab09 100644 --- a/src/main/config/config_eeprom.h +++ b/src/main/config/config_eeprom.h @@ -17,7 +17,7 @@ #pragma once -#define EEPROM_CONF_VERSION 146 +#define EEPROM_CONF_VERSION 147 void initEEPROM(void); void writeEEPROM(); diff --git a/src/main/fc/config.c b/src/main/fc/config.c index 445c34b63..d1d7c601a 100755 --- a/src/main/fc/config.c +++ b/src/main/fc/config.c @@ -287,7 +287,7 @@ void resetMotorConfig(motorConfig_t *motorConfig) #endif motorConfig->maxthrottle = 2000; motorConfig->mincommand = 1000; - motorConfig->digitalIdleOffset = 40; + motorConfig->digitalIdleOffsetPercent = 3.0f; int motorIndex = 0; for (int i = 0; i < USABLE_TIMER_CHANNEL_COUNT && motorIndex < MAX_SUPPORTED_MOTORS; i++) { diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c index a5e2ff358..3c852bf18 100755 --- a/src/main/flight/mixer.c +++ b/src/main/flight/mixer.c @@ -257,10 +257,10 @@ void initEscEndpoints(void) { #ifdef USE_DSHOT if (isMotorProtocolDshot()) { disarmMotorOutput = DSHOT_DISARM_COMMAND; - minMotorOutputNormal = DSHOT_MIN_THROTTLE + motorConfig->digitalIdleOffset; + minMotorOutputNormal = DSHOT_MIN_THROTTLE + lrintf(((DSHOT_MAX_THROTTLE - DSHOT_MIN_THROTTLE) / 100.0f) * motorConfig->digitalIdleOffsetPercent); maxMotorOutputNormal = DSHOT_MAX_THROTTLE; - deadbandMotor3dHigh = DSHOT_3D_MIN_NEGATIVE; // TODO - Not working yet !! Mixer requires some throttle rescaling changes - deadbandMotor3dLow = DSHOT_3D_MAX_POSITIVE; // TODO - Not working yet !! Mixer requires some throttle rescaling changes + deadbandMotor3dHigh = DSHOT_3D_DEADBAND_HIGH + lrintf(((DSHOT_MAX_THROTTLE - DSHOT_3D_DEADBAND_HIGH) / 100.0f) * motorConfig->digitalIdleOffsetPercent); // TODO - Not working yet !! Mixer requires some throttle rescaling changes + deadbandMotor3dLow = DSHOT_3D_DEADBAND_LOW; } else #endif { diff --git a/src/main/flight/mixer.h b/src/main/flight/mixer.h index 3908bfd58..77ad434c8 100644 --- a/src/main/flight/mixer.h +++ b/src/main/flight/mixer.h @@ -43,8 +43,8 @@ #define DSHOT_DISARM_COMMAND 0 #define DSHOT_MIN_THROTTLE 48 #define DSHOT_MAX_THROTTLE 2047 -#define DSHOT_3D_MAX_POSITIVE 1047 // TODO - Not working yet!! Mixer requires some throttle rescaling changes -#define DSHOT_3D_MIN_NEGATIVE 1048// TODO - Not working yet!! Mixer requires some throttle rescaling changes +#define DSHOT_3D_DEADBAND_LOW 1047 // TODO - Not working yet!! Mixer requires some throttle rescaling changes +#define DSHOT_3D_DEADBAND_HIGH 1048// TODO - Not working yet!! Mixer requires some throttle rescaling changes // Note: this is called MultiType/MULTITYPE_* in baseflight. typedef enum mixerMode diff --git a/src/main/io/motors.h b/src/main/io/motors.h index d90c0a9e1..ab55497da 100644 --- a/src/main/io/motors.h +++ b/src/main/io/motors.h @@ -28,6 +28,6 @@ typedef struct motorConfig_s { uint16_t motorPwmRate; // The update rate of motor outputs (50-498Hz) uint8_t motorPwmProtocol; // Pwm Protocol uint8_t useUnsyncedPwm; - uint8_t digitalIdleOffset; + float digitalIdleOffsetPercent; ioTag_t ioTags[MAX_SUPPORTED_MOTORS]; } motorConfig_t; diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c index 300f216fb..3ff7ab56e 100755 --- a/src/main/io/serial_cli.c +++ b/src/main/io/serial_cli.c @@ -703,7 +703,7 @@ const clivalue_t valueTable[] = { { "max_throttle", VAR_UINT16 | MASTER_VALUE, &masterConfig.motorConfig.maxthrottle, .config.minmax = { PWM_RANGE_ZERO, PWM_RANGE_MAX } }, { "min_command", VAR_UINT16 | MASTER_VALUE, &masterConfig.motorConfig.mincommand, .config.minmax = { PWM_RANGE_ZERO, PWM_RANGE_MAX } }, #ifdef USE_DSHOT - { "digital_idle_offset", VAR_UINT8 | MASTER_VALUE, &masterConfig.motorConfig.digitalIdleOffset, .config.minmax = { 0, 255} }, + { "digital_idle_percent", VAR_FLOAT | MASTER_VALUE, &masterConfig.motorConfig.digitalIdleOffsetPercent, .config.minmax = { 0, 20} }, #endif { "max_esc_throttle_jump", VAR_UINT16 | MASTER_VALUE, &masterConfig.motorConfig.maxEscThrottleJumpMs, .config.minmax = { 0, 1000 } },