From 77dc19e9d94c5b0e12209a3ef87c5161dd80c54b Mon Sep 17 00:00:00 2001 From: borisbstyle Date: Thu, 2 Jun 2016 10:38:33 +0200 Subject: [PATCH 1/3] Fix Fast PWM synced update for non ONESHOT125 --- src/main/flight/mixer.c | 6 +++--- src/main/flight/mixer.h | 2 +- src/main/mw.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c index abf8e27832..100aeb62f8 100755 --- a/src/main/flight/mixer.c +++ b/src/main/flight/mixer.c @@ -633,7 +633,7 @@ void writeServos(void) } #endif -void writeMotors(uint8_t unsyncedPwm) +void writeMotors(uint8_t fastPwmProtocol, uint8_t unsyncedPwm) { uint8_t i; @@ -641,7 +641,7 @@ void writeMotors(uint8_t unsyncedPwm) pwmWriteMotor(i, motor[i]); - if (feature(FEATURE_ONESHOT125) && !unsyncedPwm) { + if (fastPwmProtocol && !unsyncedPwm) { pwmCompleteOneshotMotorUpdate(motorCount); } } @@ -653,7 +653,7 @@ void writeAllMotors(int16_t mc) // Sends commands to all motors for (i = 0; i < motorCount; i++) motor[i] = mc; - writeMotors(1); + writeMotors(1,1); } void stopMotors(void) diff --git a/src/main/flight/mixer.h b/src/main/flight/mixer.h index 8ebd0fd22a..8ccd45cb37 100644 --- a/src/main/flight/mixer.h +++ b/src/main/flight/mixer.h @@ -213,6 +213,6 @@ int servoDirection(int servoIndex, int fromChannel); #endif void mixerResetDisarmedMotors(void); void mixTable(void); -void writeMotors(uint8_t unsyncedPwm); +void writeMotors(uint8_t fastPwmProtocol, uint8_t unsyncedPwm); void stopMotors(void); void StopPwmAllMotors(void); diff --git a/src/main/mw.c b/src/main/mw.c index cc515485b4..f5865a27b4 100644 --- a/src/main/mw.c +++ b/src/main/mw.c @@ -742,7 +742,7 @@ void subTaskMotorUpdate(void) #endif if (motorControlEnable) { - writeMotors(masterConfig.use_unsyncedPwm); + writeMotors(masterConfig.fast_pwm_protocol, masterConfig.use_unsyncedPwm); } if (debugMode == DEBUG_PIDLOOP) {debug[3] = micros() - startTime;} } From 09f5c858175de70ac0b543da9258c0b51380882f Mon Sep 17 00:00:00 2001 From: borisbstyle Date: Thu, 2 Jun 2016 10:41:31 +0200 Subject: [PATCH 2/3] Default Anti Desync --- src/main/config/config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/config/config.c b/src/main/config/config.c index 88fd490592..af15469eb1 100755 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -237,7 +237,7 @@ void resetEscAndServoConfig(escAndServoConfig_t *escAndServoConfig) escAndServoConfig->maxthrottle = 1850; escAndServoConfig->mincommand = 1000; escAndServoConfig->servoCenterPulse = 1500; - escAndServoConfig->escDesyncProtection = 0; + escAndServoConfig->escDesyncProtection = 10000; } void resetFlight3DConfig(flight3DConfig_t *flight3DConfig) From 6c8a8614fc89d471070e704b85c3eed5498708bf Mon Sep 17 00:00:00 2001 From: borisbstyle Date: Thu, 2 Jun 2016 11:06:03 +0200 Subject: [PATCH 3/3] Rate limiter --- src/main/flight/pid.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index d0c38f086a..99cc25ae06 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -80,14 +80,14 @@ float calculateRate(int axis, const controlRateConfig_t *controlRateConfig) { if (isSuperExpoActive()) { float rcFactor = (axis == YAW) ? (ABS(rcCommand[axis]) / 500.0f) : (ABS(rcCommand[axis]) / (500.0f * (controlRateConfig->rcRate8 / 100.0f))); - rcFactor = 1.0f / (1.0f - (rcFactor * (controlRateConfig->rates[axis] / 100.0f))); + rcFactor = constrainf(1.0f / (1.0f - (rcFactor * (controlRateConfig->rates[axis] / 100.0f))), 0.01f, 1.00f); angleRate = rcFactor * ((27 * rcCommand[axis]) / 16.0f); } else { angleRate = (float)((controlRateConfig->rates[axis] + 27) * rcCommand[axis]) / 16.0f; } - return angleRate; + return constrainf(angleRate, -8190, 8290); // Rate limit protection } uint16_t getDynamicKp(int axis, const pidProfile_t *pidProfile) {