Current sensor is often used in multirotors to monitor real-time current draw and capacity consumption during flight in OSD or Telemetry. In this article we will discuss the benefits of current sensor and how to calibrate it to get more accurate readings.
Benefits of current sensor
Knowing your “amp draw” and how much “mah” has been used are very useful.
- LiPo battery consumption (aka “mah consumed”) tells you directly when your battery is depleted. In my opinion, it’s a much better battery indicator than voltage (VBAT) which sags with throttle
- A good indicator if your battery is getting old and should be retired – if voltage is reaching 3.5V from 4.2V, but your mah used is only 80% of the original capacity, then you know the pack is getting old
- You can easily compare the current draw of different motor and propeller combinations in real flights
Types of current sensor
- Built-in Current Sensor in PDB and flight controller
- External current sensor that connects between your battery and PDB
For mini quad builds, I don’t recommend external current sensor, which are heavy and large in size. They are probably more suitable for larger builds like a 450. FC ro PDB with integrated current sensor and OSD are becoming popular for tight builds like mini quads.
Virtual Current Sensor
Virtual current sensor is a feature in Cleanflight and Betaflight. It doesn’t require any of the current sensor hardware, but the current consumption is purely estimated by throttle level. It can be a handy tool to have in your quad if you wish to have current sensor capability but not have the hardware.
Wrong current readings?
Current sensors are useful, however sometimes these current sensors came uncalibrated from factory. Even 2 identical current sensors could give you slightly different results due to the resistance difference in the circuit, therefore it’s important to verify and calibrate them.
If the data of current sensor is not correct, then there is no point of having a current sensor at all. So you should calibrate it.
How to calibrate
Current sensors use a simple equation to allow users to adjust/calibrate the output:
y = ax + b
a is the scale, and b is the offset.
(line diagrame of wrong current sensor, and power meter)
For example in Betaflight… here are some screenshots from Betaflight configurator, and MWOSD configurator.
However I cannot suggest any offset or scale values since this is going to be different in every situation. You will have to following the rest of this guide to determine the correct value for scale and offset.
Ways of calibration
Since there are normally 2 variables we need to work out: scale and offset, I found it easier to work out scale first, then the offset. And I found offset can often be left at zero for most current sensors I’ve worked with, so it’s really just a matter of changing scale.
There are 2 ways I normally use to calibrate current sensors.
Trial and Error
This is a safer way to calibrate your current sensor, and doesn’t require any additional equipment. However it might take a little longer to get it done.
- Make sure you can display “mAh consumed” in your OSD
- Fly a fully charged LiPo pack and land when “mAh consumed” reaches a whole number, for example 1000mah or 1200mah or 1400mah…
- Fully charge the Lipo (to 4.2V), and see how much mAh is put back by the charger
- You can calculate a new current sensor scale using this forumla:
- new_scale = old_scale * (OSD_mAh_consumed / mAh_charged)
- Repeat the same procedure until the numbers from your OSD matches that from your charger
Bench Test and Power Meter
This way can be quicker to work out the scale and offset values for your current sensor. It requires you to strap your quad on the bench, attach a power meter to the quad so you can measure the actual voltage and current draw while running the motors.
However this way can be dangerous, therefore do this at your own risk. You can make it safer by putting the opposite props on so they don’t spin up but down.
You will need a power meter (watt meter) to begin with: https://oscarliang.com/turnigy-7in1-mega-watt-meter/ or this http://bit.ly/2pcP4Eg
I found it more reliable to use the motor tab in Betaflight to spin up the motors. You can use your radio transmitter to arm your quad and throttle up, but when PID controller is active, motors speed tend to change constantly which can affect the accuracy of your current readings. Motor tab gives you a more stable reading.
Compare the data from the power meter to the data from the OSD.
First you are going to notice there is small current draw when the motors are idle, that’s normal because your FC, RX, ESC etc are drawing current. If the difference between power meter and OSD is within 0.1A, you can safely ignore it. If it’s larger than 0.1A, you can adjust the offset to make it as close to the power meter as possible. Normally, offset at 0 works for most current sensors I have come across with.
Now spin up the motors and you are going to notice a high current draw. Aim for a whole amp value on your power meter, such as 30A.
If you get a higher or lower value on the OSD, you should adjust the scale. Change it by a small amount at first to see how much it affect the result.
For example if you get 35A on your OSD, increase the scale by +50, and now you get 27A in the OSD, and you know if by raising scale, you could decrease the reading. And we can work out the proportion between the current and scale: (27-35)/50 = -0.16A, for every scale increment.
In this example, we are still 3A lower than the expected value, so we know we need to lower the scale in this example a little bit more by 3/-0.16 = -18.75.
And that’s it!
Simple Example in Betaflight
- Betaflight OSD shows 1100mAh drawn at the end of the flight
- Then you fully re-charge the pack, and the charger shows 1000mAh was put back into the battery
- Now you know your current sensor is reading 10% too high (1100/1000 = 1.10), and you need to adjust the current sensor scale
- The current scale works backwards, i.e. to make the OSD read lower, you need to increase current scale. Since the OSD is reading 10% too high, we need to INCREASE the scale by 10%, this will make the OSD to read 10% lower
- If the current scale is at 400, and to add 10% to it we get the new scale value which is 440
- You might need to repeat this process several times to get an accurate result