From a5278740bd4e00d4dc1f3b024b23d23d21dc1a6c Mon Sep 17 00:00:00 2001 From: borisbstyle Date: Sat, 27 Feb 2016 15:56:45 +0100 Subject: [PATCH] Improve performane on all targets // remove emf_avoidance --- src/main/drivers/gyro_sync.h | 2 +- src/main/io/serial_msp.c | 16 +++++++++------- src/main/main.c | 6 ++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/drivers/gyro_sync.h b/src/main/drivers/gyro_sync.h index 330d59e38..ab181385d 100644 --- a/src/main/drivers/gyro_sync.h +++ b/src/main/drivers/gyro_sync.h @@ -5,7 +5,7 @@ * Author: borisb */ -#define INTERRUPT_WAIT_TIME 8 +#define INTERRUPT_WAIT_TIME 0 extern uint32_t targetLooptime; diff --git a/src/main/io/serial_msp.c b/src/main/io/serial_msp.c index 0a9e45d22..deb8594ab 100644 --- a/src/main/io/serial_msp.c +++ b/src/main/io/serial_msp.c @@ -124,8 +124,8 @@ void setGyroSamplingSpeed(uint16_t looptime) { masterConfig.pid_process_denom = 2; } else if (looptime < 375) { masterConfig.acc_hardware = 0; - masterConfig.baro_hardware = 0; - masterConfig.mag_hardware = 0; + masterConfig.baro_hardware = 1; + masterConfig.mag_hardware = 1; masterConfig.pid_process_denom = 2; } } else { @@ -144,20 +144,15 @@ void setGyroSamplingSpeed(uint16_t looptime) { gyroSampleRate = 125; maxDivider = 8; masterConfig.pid_process_denom = 1; - masterConfig.emf_avoidance = 0; if (currentProfile->pidProfile.pidController == 2) masterConfig.pid_process_denom = 2; if (looptime < 250) { masterConfig.pid_process_denom = 3; - masterConfig.emf_avoidance = 1; } else if (looptime < 375) { if (currentProfile->pidProfile.pidController == 2) { masterConfig.pid_process_denom = 3; } else { masterConfig.pid_process_denom = 2; } -#ifndef CC3D - masterConfig.emf_avoidance = 1; -#endif } } else { masterConfig.gyro_lpf = 1; @@ -168,6 +163,13 @@ void setGyroSamplingSpeed(uint16_t looptime) { } #endif masterConfig.gyro_sync_denom = constrain(looptime / gyroSampleRate, 1, maxDivider); + + if (looptime < 1000) { + masterConfig.use_fast_pwm = 1; + masterConfig.motor_pwm_rate = lrintf(1.0f / (gyroSampleRate * masterConfig.gyro_sync_denom * masterConfig.pid_process_denom * 0.000001f)); + } else { + masterConfig.use_fast_pwm = 0; + } } } diff --git a/src/main/main.c b/src/main/main.c index 07d03f581..58941dc31 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -668,14 +668,12 @@ int main(void) { setTaskEnabled(TASK_GYROPID, true); if(sensors(SENSOR_ACC)) { setTaskEnabled(TASK_ACCEL, true); - switch(targetLooptime) { + switch(targetLooptime) { // Switch statement kept in place to change acc rates in the future case(500): - accTargetLooptime = 5000; - break; case(375): case(250): case(125): - accTargetLooptime = 10000; + accTargetLooptime = 1000; break; default: case(1000):