Having an accurate current sensor on your FPV drone allows you to determine how much battery is left and what the current draw the motors are drawing in real time. In this article I will show you how to calibrate current sensor in Betaflight.
Benefits of Current Sensor
If you have a current sensor, you can display “Battery current draw” and “Battery current mAh drawn” in OSD.
Knowing your “amp draw” and how much “mah” has been used can be extremely useful.
- LiPo battery consumption (aka “Battery current mAh drawn”) tells you how much battery has been used. In my opinion, it’s just as a good battery indicator as voltage (VBAT), sometimes even more reliable because voltage can sag when you punch throttle
- The real time current draw is a good indicator how power hungry your motor and propeller combo is, you can use this to test different combo. You can also use this to test how well different batteries handles voltage sag
Virtual Current Sensor
If you don’t have a physical current sensor in your flight controller or ESC, then you can try setting up a virtual current sensor. Virtual current sensor is a feature in Betaflight, current consumption is estimated by how much you move your throttle, therefore it’s not the most accurate in the world, but it might be good enough for some people.
How to Calibrate Current Sensor
Betaflight uses a simple equation to allow users to adjust/calibrate the current sensor output:
y = ax + b
“a” is the scale, “b” is the offset. In most cases, offset is usually zero, and you only need to change scale.
There are a few different ways to calibrate current sensors.
Trial and Error
This is my “go-to” way of current sensor calibration, it’s not the fastest, but safe and doesn’t require additional equipment.
- fly a fully charged battery
- write down the “Battery current mAh drawn” that is displayed in your OSD after you landed (OSD_mAh_consumed)
- fully charge the battery and see how much mAh is put back (mAh_charged)
Use this formula you can calculate the new current sensor scale:
new_scale = old_scale x (OSD_mAh_consumed / mAh_charged)
You might want to repeat this process some more times to ensure you have an accurate enough scale number.
Note that the current sensor scale in Betaflight works backwards, i.e. to make the current sensor read lower, you need to increase scale. For example, if the OSD is reading 10% too high, we need to INCREASE the scale by 10%, this will make the OSD to read 10% lower… I know, it’s confusing :)
Let me give you an example:
- Your current sensor scale is 400
- You fly a fully charged battery and at the end of the flight (doesn’t matter what the voltage is), Betaflight OSD shows 1100mAh drawn
- When you fully recharge the battery, the charger shows 1000mAh was put back into the battery
- You can calculate the new scale value: New scale = 400 x (1100/1000) = 440
- Now repeat this process until you are happy with the accuracy
Low Current Test Using Multimeter
Using the motor tab in Betaflight, you can spin the motors without props and get some current measurements from the flight controller (same as the value displayed in OSD). You only need 3 to 5 measurements below 5A, so it’s relatively safe to perform.
However you do need a multimeter and crocodile clip cables for this test. Also the amp draw readings tend to jump around quite a lot so it’s very hard to take precise measurements. That’s why I still prefer the trial and error method described above. Anyway I thought I’d mentioned it in case someone is interested.
Learn how to use multimeter to measure current here.
Take the current draw measurements from the FC and multimeter, then put them in this spreadsheet and it will return the offset and scale values: https://docs.google.com/spreadsheets/d/1lkL-X_FT9x2oqrwQEctDsEUhgdY19upNGc78M6FfJXY/edit#gid=0
If you have an adjustable bench power supply like the ToolkitRC P200, it’s even easier as you can read the current draw off the screen.
High Current Test Using Power Meter
This way can be much quicker to work out the scale and offset values for your current sensor. You need to strap your quad to the bench (with propellers mounted), attach a power meter (watt meter) to the quad (between the quad’s XT60 and the battery) so you can measure the actual current draw while running the motors.
Powering your drone on the bench with spinning propellers can be dangerous, do this at your own risk. You can make it safer by putting the opposite props on so they don’t push up but down.
Get a watt meter here:
- AliExpress: https://s.click.aliexpress.com/e/_DmpskRH
- Amazon: https://amzn.to/3hruqg7
You are going to notice there is small current draw even when the motors are idle, that’s normal because your FC, RX, ESC etc are all drawing a small amount of current. The current sensor on our FC/ESC isn’t super accurate when measuring small current. I’d normally ignore any difference in current draw when the motors are idle.
It’s more reliable to use the motor tab in Betaflight to spin up the motors as it doesn’t get affected by PID and the motor outputs and current draw are more stable. Increase throttle slowly, watch the current meter and 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 have 30A on the watt meter, but you get 35A in your OSD, then try to increase the scale by +50. If now you get 27A in the OSD, then you need to decrease scale a little. You can calculate how much you need to decrease exactly by using this equation: (27-35)/50 = -0.16A, this is how much change in amp draw for per increment in scale value.
In this example, we are still 3A lower than what we get in the watt meter, so we know we need to lower the scale in this example just a little bit more by 3/-0.16 = -18.75.
And that’s it!
Voltage Sensor Calibration
You don’t normally need to calibrate the voltage sensor as it should be accurate out of the box.
Take a battery, check its voltage either using a battery checker or multimeter. Then plug it in to the drone.
If the reported voltage in the configurator (circle in red in below image) is far off from your measured voltage, then you should calibrate the voltage sensor.
Click the calibration button, and enter the measured voltage, click Calibrate and it will ask to apply a new voltage scale. That’s it.
- Apr 2017 – tutorial created
- Nov 2022 – updated post for Betaflight 4.3
hope you ca help, since i upgraded from 4.2.9 to 4.3.1 – I get an un steady current measurement both for low and high currents, using speedbee V2 . Both the configurator and OSD show me an unstable current reading fluctuations.
seems to me betaflight doesn’t average the samples . Same setup was perfect in 4.2.9, any idea what happened?
Make sure the current sensor pin from the ESC is actually matching the current sensor on the FC if you are using the ribbon cable.
Or it could just bad current sensor, it does happen to some ESC. In that case just calibrate it the best you can.
I am not using the ESC for current sense, I use the on board ADC with amp scale 168 as manufacturer recommend for speedybee F7 V2
it was working perfect in 4.2.9,looks like wrong hysteresis (averaging) setting…
I have the same fluctuating reading in betaflight 4.4.1, speedy bee f405 v3 :*(
Hi Oscar, why don’t you also explain how to use the method with the spreadsheet that can be found here directly on the betaflight wiki?
You can find it here: https://docs.google.com/spreadsheets/d/1lkL-X_FT9x2oqrwQEctDsEUhgdY19upNGc78M6FfJXY/
Personally I don’t like this method, the current value jumps a lot on both OSD and multimeter at low current draw (for example you may see 3.2A-3.7A, some current sensors jump even more than that), it’s really hard to take precise measurements.
Also not everyone has the needed equipment like multimeter or the necessary cables.
I still found it way more practical to just do the trial and error method.
But thanks for mentioning it i will add a link to the post just in case anyone is interested.
My current sensor is way off. In goggles it reported 545Mah used from a 1300Mah battery, at this point the voltage said land (3.5v per cell).
When I recharged the battery it said it put a full 1.30ah in.
100 is the scale in Betaflight currently.
I’ve used your formula, which in this case is 100 X (545/1300) which returns a result of 42. Should I set my new scale to 40??
Give that a try, and check mah in OSD and compare that with the number from your charger?
It’s likely that you have to repeat this process 2-3 times until you get it right.
Hello Oscar! Thanks for the article. Been calibrating my 7 inch for a while but I’m constantly rising the scale or lowering..never satisfied. But than I noticed, that until I don’t arm the quad, the amp stays on 0! But ofcourse it is consuming, vtx, camera, gps…So until I wait to get gps fix it should be let’s say 50 mah used or more, but it is 0. It is just a bug(bf 4.2) or should I play with the offset? Somethimes, at the end of flying, osd shows 3000 but in reality I used 3200, and sometimes(same scale) osd 3200, real mah=3000. Is this normal? It is a Mamba stack f405 mk3.
amperage_meter_scale = old_amperage_meter_scale * (mAh_recharged / cleanflight_reported_mAh_drawn)
For example, assuming:
An amount recharged of 1500 mAh
A Cleanflight reported current drawn of 2000 mAh
An existing amperage_meter_scale value of 400 (the default)
Then the updated amperage_meter_scale is:
amperage_meter_scale = old_amperage_meter_scale * (mAh_recharged / cleanflight_reported_mAh_drawn)
= 400 * (1500 / 2000)
I have tested whit an Tyro79 Virtual Current Sensor:
Scale: 400 / used 444 / recharged 334 = new scale 334
Scale:301 / used 304 / recharged 307 = new scale 304
Our formula is wrong! I used this: old_amperage_meter_scale * (mAh_recharged / cleanflight_reported_mAh_drawn)
(Tyro whit Betaflight 4.2)
I think this on our page is wrong: new_scale = old_scale x (OSD_mAh_consumed / mAh_charged)
shouldn’t that mean old_scale * (mAh_charged / OSD_mAh_consumed) (Github)
or am I wrong?
So heres a interesting one for you. I have three quads that I have calibrated the current sensor on with this method, however my 4th one wants to be special. When I plug the battery in disarmed it says Im running 70a. I tried messing with the offset but it didnt seem to change anything. I have the scale set to 13,000 and it still says that its running 2a before arming. Is this a sign of a sensor gone wrong?
I just soldered up my current sensor on f4 ominibus, all fine but i accidently soldered the + on the left of the current sensor not just to the pad it was supposed to go on to, but it soldered directly to the side of the current sensor, im guessing this will still be ok? or have a made a grande mistake?
My mAh going up and up as soon o plug ThE battery, no matter if it calibrated or not. Im using aikon f4 FC and current sensor from matek pdb. If iuse multishot mAh reads are correct . With dshot not. Any idea?
doing the second method “Bench Test and Power Meter” without any Props on the motors, won´t deliver reliable results? I need to have props on in any case?
My used mah is over 1000 when my battery used is only 350. How do I actually adjust it so it reads accurately in my osd?
New scale = Old scale x (1000/350)
Then repoeat the process until you are happy with the result.
Sorry, what scale or value am I changing in betaflight?
I would like to use the current sensor of my PDB instead of the one of my F4PRO-V2, but where to link the output wire ?
it’s usually not possible to override the built-in current sensor in the flight controller because it’s “hard-wired” to the MCU. Unless your FC has allows external current sensor (has a dedicated pin)
Hey, hope you can help me out. I have a hobbywing xrotor 45a esc which has a current sensor, and a OMNIBUS F4 Nano v6 with LC filter which supports Telemetry. Can I connect the wire from the esc current sensor to the flight controller telemetry and still get current sensing. Thanks
please answer this,.. I got the hobbywing xrotor g2 stack with xrotor micro 45a esc and I cant get esc sensor to work even though its in the breakout cable that plugs from esc to fc..
Hi – what is considered to be to high of an amp draw? Trying to get a good motor prop combo…
Mi OSD is reading current and the mAh is increasing when putting the batterie with no throttle. The increase seems to be the same with no relation with flying or not… You linear method doesn’t resolve this problem. Any idea? Thanks
Please join our forum for further troubleshoot:
Man you cover all topics in quad universe!:D love it <3
I got a pdb equipped with this function but I don’t want to use it. If I didn’t wire the current sensor terminal would this affect the other wirings ?
no, it won’t affect anything, you can just leave it if you don’t want to use it.
appreciated, thanks the informative blogs.
I think, the correct formula is:
old_scale : OSD_mAh_consumed = new_scale : mAh_charged
old_scale x mAh_charged = new_scale x OSD_mAh_consumed
new_scale = old_scale x (mAh_charged / OSD_mAh_consumed )
This formula can’t be correct, at least not with Betaflight.
If the current measurement is too high, you have to increase the scale value. Using this formula would decrease the scale. The example by Oscar shows it the right way.
My guess is, that this is different to Cleanflight. Their documentation shows your formula as correct.
I agree, Peter. The correct formula is scale x actual mAh / estimated mAh.
• Fly a fully charged LiPo pack and land when “mAh consumed” reaches a whole number, for example 1000mah or 1200mah or 1400mah…
do you think is really necessary to land the quad when a whole number is reached?
In theory, since I know the total mAh capacity of the battery, any value is good for calculation… eithe 998 consumed mAh, 655, 1247 etc..
It’s all a matter of calculations no? I’m I somehow wrong?
Thanks a lot for your clear and exhaustive article and forgive me if my question is silly…
Thanks for your very usefull knowledge sharing blog. In fact, I could calibrate precisely the Typhoon32 4 in 1 4 X 35A ESC connected to the OMNIBUS PRO F4 V5. With the soft method I obtained 230 to put on the Betaflight onboard current sensor tab..
my current sensor readout is backwards, how do i fix it?
By the way, for Matek FCHUB-6S the scale value specified in documentation. mateksys.com/?portfolio=fchub-6s
Okay I have wraith esc they have current sensing and matek fchub 6 w current sensing and f7 can I connect my swift w osd to flight controller because it has filtering for camera or do I have to connect to pdb to use current sensing capabilities?