Your OSD mAh reading is lying to you. It says 850mAh drawn, but your charger pushes 1,200mAh back in during the next charge. That 40% error means you’re either landing early with 30% capacity left — wasting flight time — or worse, you’re over-discharging your packs and wondering why they puff after 30 cycles. Betaflight’s current sensor calibration takes 10 minutes and one charged pack. Here’s exactly how to dial it in, whether you’re running an ADC sensor on a 4-in-1 ESC or the virtual current sensor on an AIO board.
How Betaflight Measures Current
Two methods exist, and knowing which one your build uses determines the calibration approach.
Analog Current Sensor (ADC — Most 4-in-1 ESCs)
A shunt resistor on the ESC measures voltage drop proportional to current. The flight controller reads this via the CURRENT pin and converts it to milliamps using two values: Scale and Offset. Scale is the conversion factor (mV/A). Offset accounts for zero-current drift. Most ESCs ship with approximately correct scale values (100-400 depending on the shunt resistor value), but “approximately” can mean 20-30% error out of the box.
Virtual Current Sensor (AIO Boards without a Shunt)
Some AIO flight controllers lack a physical current sensor. Betaflight estimates current draw from throttle position, battery voltage, and motor RPM data. This is better than nothing, but expect 15-25% accuracy at best — and it degrades as your battery sags. If you have a virtual sensor, calibrate it the same way as ADC, but accept that accuracy will drift with battery age.
Step 1: Determine Your Sensor Type
Connect to Betaflight Configurator → Power & Battery tab → look at “Current Meter Source”:
– “Onboard ADC” → physical sensor, calibrate with scale/offset
– “Virtual” → estimated, calibrate but expect drift
– “ESC Sensor” → digital telemetry from BLHeli_32, most accurate, minimal calibration needed
Step 2: The Calibration Procedure
You need: one fully charged pack, your quad, and a charger that displays mAh put back during charging.
-
Note the pack’s exact starting voltage (e.g., 16.80V for 4S). Fly normally — don’t baby it, fly your typical style. Calibration at cruising throttle produces different results than calibration under punch-outs.
-
Land when your OSD shows approximately 1,000mAh consumed for a 1,500mAh pack (or roughly two-thirds capacity). Record the exact OSD mAh value immediately upon landing — the number resets on disarm if you have the setting enabled.
-
Charge the pack and record how many mAh the charger puts back in. This is your “true” consumption.
-
Calculate the correction factor:
Correction = True mAh / OSD mAh. Example: charger reports 1,100mAh, OSD showed 850mAh → Correction = 1.29. -
Apply the correction to your current scale:
New Scale = Current Scale × Correction. If your scale was 400 and correction is 1.29, new scale = 516. Set this in Betaflight and save. -
Fly one more pack and repeat the test. If OSD and charger now agree within 5%, you’re done. If not, apply the correction again — two iterations typically nail it.
Step 3: Current Sensor Offset (ADC Sensors Only)
Offset corrects for a small non-zero current reading when the quad is disarmed. This is usually 0-50mA and matters less than scale for total consumption, but it affects the instantaneous amp reading in your OSD.
To set offset: with the quad powered and disarmed (props off), read the current value in Betaflight’s Power & Battery tab. If it shows 0.3A with no motors spinning, set Offset to -300 (offset is in milliamps, so 0.3A = 300mA). This zeroes out the idle reading.
Current Sensor Calibration Reference Table
| Flight Style | Typical Scale Range | Expected OSD Error (Uncalibrated) | Calibration Iterations Needed |
|---|---|---|---|
| Cruising (low throttle) | 350-450 | 15-25% low | 1-2 |
| Freestyle (mixed throttle) | 350-450 | 10-20% low | 1-2 |
| Racing (high throttle) | 400-500 | 5-15% low | 1 |
| Long-range (constant throttle) | 300-400 | 20-30% low | 2-3 |
| AIO Virtual Sensor | N/A | 15-30% varying | 2-4, accept 10% drift |
| ESC Brand | Default Scale (4-in-1) | Default Offset | Notes |
|---|---|---|---|
| SpeedyBee | 400 | 0 | Generally 10-15% low out of box |
| Hobbywing XRotor | 250 | 0 | Closer to accurate, ~5% error |
| Diatone Mamba | 350 | 0 | Varies by batch, check |
| iFlight SucceX | 370 | 0 | Consistent, ~8-12% low |
| Skystars | 400 | 0 | Wide variance, always calibrate |
| JHEMCU AIO | Virtual | N/A | Expect 20%+ drift over battery life |
Common Mistakes & How to Avoid Them
Mistake 1: Calibrating with one flight and never checking again
Current sensor drift is real. Shunt resistors change resistance slightly with temperature. As we discussed in our FPV Voltage Sag Troubleshooting guide, a pack with high IR sags more, which changes the current-to-throttle relationship. Re-check calibration every 20-30 flights or whenever you notice a consistent OSD-vs-charger discrepancy.
Mistake 2: Using the wrong starting Scale value
Some builders copy a random scale value from a YouTube video without checking their ESC’s specifications. A Hobbywing ESC with a 0.5mΩ shunt needs scale ~200. A generic ESC with a 0.25mΩ shunt needs scale ~400. Starting with the wrong base scale means your corrections will chase a moving target. Look up your specific ESC’s current sensor shunt value if available, or start at 400 for most 4-in-1 ESCs.
Mistake 3: Landing at different voltages for calibration vs verification
If you calibrate at 3.8V/cell but verify at 3.5V/cell, the numbers won’t match. Voltage sag at lower cell voltages changes the current-to-throttle curve. Always calibrate and verify at the same landing voltage — 3.75V/cell is a good target.
Mistake 4: Trusting the virtual sensor for pack health decisions
Virtual current sensors estimate from throttle position. A tired pack that sags more under load will cause the virtual sensor to report lower current than reality — the opposite of what you want. You’ll think you’re flying gently while actually over-discharging. Use voltage-based landing (e.g., land at 3.5V/cell under load) with virtual sensors, not mAh-based landing.
Mistake 5: Calibrating offset before scale
Offset is the fine-tuning knob; scale is the coarse adjustment. If your scale is 20% off, the offset you set to zero out the idle current will be wrong at every other throttle position. Always calibrate scale first, then touch offset. Better yet, leave offset at 0 unless you see a consistent 0.2A+ idle reading.
⚠️ Regulatory Notice: The battery monitoring and charging procedures in this article should be followed in accordance with the latest 2026 regulations for lithium polymer battery handling, storage, and transport in your country. Over-discharging LiPo batteries creates fire and safety hazards. Some regions mandate specific charging container requirements and restrict LiPo transport quantities. Regulations vary significantly between the FAA (US), EASA (EU), CAA (UK), CAAC (China), and other authorities. Always dispose of damaged packs through certified battery recycling programs.
As we detailed in our Betaflight OSD Configuration guide, a calibrated current sensor lets you configure meaningful mAh-drawn warnings. Pair that with voltage-based backup alerts, and you’ll never over-discharge a pack again.
The SpeedyBee F405 V4 stack includes an onboard ADC current sensor with a factory scale value that’s typically 10-15% low. Calibrate it once using the procedure above and you’ll have reliable mAh data for every pack. At uavmodel.com, we stock flight controllers and ESCs with verified current sensor accuracy across every batch.
