Anton from CapeFPV team shared with us how to get better and more linear throttle response, by doing ESC (BLheli) and flight controller (Cleanflight) calibration and configuration.
So I came across a video by Joshua Bardwell about Motor Top End Calibration and I wanted to do some testing about it myself. In most cases using normal throttle calibration is good enough, there is nothing wrong with leaving it up to the firmware to try and work out the correct min and max throttle. That being said, let me explain to you why we are looking into Top End Calibration.
By default the throttle response looks something like the red line in the top graph, and there is a flat spot at the top of the throttle (most right). What we really want is a linear throttle curve that looks like the blue line.
Further Reading: Learn about PID Tuning in this tutorial.
Benefits of linear throttle response
Linear throttle response solves a number of issues some pilots complain about, a multirotor drifting or turning when giving 100% throttle, or getting oscillation. You can also squeeze a bit more performance out of your motors, and it helps your quadcopter to feel more “locked in” and less sloppy, especially when you are doing extreme acro. Note: This is not the holy grail for all the problems in PID tuning, but a good start.
I will also explain some of the reasons on why Cleanflight and BLHeli choose the values for Minimum and Maximum Throttle. I will then move into a tutorial for getting the maximum performance out of your motors by getting that response as linear as possible.
The signal from flight controller sends to ESC is normally between 1000 to 2000, this is the start and end of an analogue signal. You will see that on my Cleanflight setup, the values are set to 1150 and 2000 (Refer to the Cleanflight Documentation). These values where allocated in Cleanflight after doing my default calibration. Cleanflight detected this on calibration, which proceeded to set the values accordingly.
The Value 1150 is the Minimum Throttle Value. This value should not be confused with the Min_Command Value of 1000.
The Minimum command is to specify where the motors won’t spin. The Minimum Throttle Value is what is required as input for all motors to start spinning freely. This is also important when you are running “Air Mode“.
When we do a roll, pitch or yaw movement to an extreme, for instance a 360 roll, we cause 2 motors to spin at 100% (Maximum Throttle) and the other two to spin at 0% (Minimum Throttle).
This is where the Minimum Throttle value comes in. We set the Minimum Throttle value to the lowest value where all 4 motors start to spins smoothly (for example if motor 1 start to spin at 1120, motor 2 at 1130, motor 3 at 1110, motor 4 at 1140, we set Minimum Throttle to 1140). This ensure the ESC and Brushless motor does not stop completely or desync mid-air when doing a flip.
Maximum Throttle is the one we are going to be calibrating. We have set it to 2000 in Cleanflight Configurator, However after ESC calibration, you might find it to be a different value in BLHeli, which is more likely to be lower than 2000. This is due to how BLHeli works, it automatically created a dead zone at the top end. But this also creates a plateaus (flat bit) on the throttle top end.
Why does this matter?
There are two main reasons why we want to lower our Maximum Throttle in Cleanflight, to eliminate the plateaus:
- We want a linear throttle response for a more locked-in feel
- We don’t want to waste loop cycles when the ESC max throttle reached the throttle plateaus before it reaches Cleanflight max throttle value
When a PID loop takes place and sends a command to the ESC, the quad reacts and the Gyro sense the movement, and tells the flight controller that a change has occurred. When the PID loop sends a signal to the ESC again that is higher than the ESC’s max throttle value (PPM Max), the motor’s speed will be capped at PPM Max.
This causes the PID loop to “think” that the quad is not changing fast enough, and in turn sends an even higher value to the ESC to speed up the motor. But again the motor won’t speed up as it has reached the max limit set on the ESC.
This can continue until the PID loop reaches Max throttle value set in Cleanflight, and cycle by cycle and ESC command will come back down again, which takes time. You can notice this effect in the form of small oscillations when doing punch outs, or doing flips and rolls. You can most likely eliminate the oscillations by bringing your P gain down, however this will not give you a linear throttle response.
So how can we improve on the configured values?
Tutorial – The Steps
Ensure all props are remove before doing this, motors might be spinning!!
1. ESC Normalization:
First of all, do a ESC calibration first on your ESC / FC setup, this will set the initial “PPM Min Throttle” and “PPM Max Throttle” values on your ESC’s. We can set these values by using a USB Linker, Arduino or FC pass-through.
If the ESC does go into calibration mode with max_throttle set to 1850, then the ESC will think 1850 is the highest setting it will ever see. It will then apply it’s full throttle to the ESC at 1850 – i.e. subsequently changing max_throttle to 2000 would not result in any increase in max RPM. If you calibrate the ESC to the true full range (2000), and then set max_throttle to 1850, the actual RPM at full throttle should then be lower.
When you check these values in BLHeliSuite, you might find them to be a slightly different from one ESC to another, so we need to make sure they are the name by adjusting them. (I normally copy values from the first ESC to the rest)
In my case BLHeli defaults to 1.148 for Min and 1.832 for Max. I have made sure that these values are the same across all my ESC’s on my mini quad.
2. Calibrate Minimum Throttle:
As stated in the theory section, minimum Throttle needs to be set to the point where all 4 motors start to spin smoothly.
To find out what this value is, we go to the Motors tab in Cleanflight. Check the checkbox “I understand the risks, propellers are removed” and continue to slide the Master slider upwards.
Find the value where all motors spin and write it down. In my case it was 1155. Go to the Configuration tab and set this value at Minimum Throttle. Make sure your Minimum Command is set to 1000, or a value lower than the one in Minimum Throttle.
3. Calibrate Maximum Throttle:
Calibrating the Top End of the ESC requires a bit of intuition. You will need to listen to harmonic resonance changes when the motor speed changes. It’s not hard to hear these changes so don’t worry.
- Go to the Motors tab and Check the checkbox “I understand the risks, propellers are removed”
- Move the motor slider to the maximum throttle value (1850 in my case)
- Slowly lower the motor’s throttle value until you hear a change in the resonance frequency. This frequency is the motor’s changing of speed.
- Write down the value you get; this value will be the one just before the resonance frequency changes.
- Repeat Steps 2,3 and 4 for the remaining motors.
- Go to the Configuration tab and set the lowest value from your test at Maximum Throttle. We take the lowest value, because it’s the weakest motor.
You are now done, Save and reboot your Flight Controller and test the new values.
Do not calibrate your ESC’s again after this, otherwise you will put the dead band back in.
Also check out Joshua’s video he explained very well:
Author: Anton Van Zyl Bio: I am from Stellenbosch, a little wine town in South Africa. I competitively compete in FPV racing and just love flying all things. I am just into it for meeting friends and having a blast.