2014-09-19 13:16:40 -07:00
# Battery Monitoring
2015-04-24 12:39:05 -07:00
Cleanflight has a battery monitoring feature. The voltage of the main battery can be measured by the system and used to trigger a low-battery warning [buzzer ](Buzzer.md ), on-board status LED flashing and LED strip patterns.
2014-09-19 13:16:40 -07:00
Low battery warnings can:
2015-04-24 12:39:05 -07:00
* Help ensure you have time to safely land the aircraft
* Help maintain the life and safety of your LiPo/LiFe batteries, which should not be discharged below manufacturer recommendations
2014-09-19 13:16:40 -07:00
2015-05-15 04:13:11 -07:00
Minimum and maximum cell voltages can be set, and these voltages are used to auto-detect the number of cells in the battery when it is first connected.
2014-09-19 13:16:40 -07:00
2015-01-03 15:53:24 -08:00
Per-cell monitoring is not supported, as we only use one ADC to read the battery voltage.
2014-09-19 13:16:40 -07:00
## Supported targets
All targets support battery voltage monitoring unless status.
## Connections
2014-11-14 04:42:48 -08:00
When dealing with batteries **ALWAYS CHECK POLARITY!**
2014-09-19 13:16:40 -07:00
2015-04-26 07:10:07 -07:00
Measure expected voltages **first** and then connect to the flight controller. Powering the flight controller with
2015-04-24 12:39:05 -07:00
incorrect voltage or reversed polarity will likely fry your flight controller. Ensure your flight controller
has a voltage divider capable of measuring your particular battery voltage.
2014-09-19 13:16:40 -07:00
### Naze32
2015-04-24 12:39:05 -07:00
The Naze32 has an on-board battery divider circuit; just connect your main battery to the VBAT connector.
2014-09-19 13:16:40 -07:00
2015-04-24 12:39:05 -07:00
**CAUTION:** When installing the connection from main battery to the VBAT connector, be sure to first disconnect the main battery from the frame/power distribution board. Check the wiring very carefully before connecting battery again. Incorrect connections can immediately and completely destroy the flight controller and connected peripherals (ESC, GPS, Receiver etc.).
2015-04-20 05:50:27 -07:00
2014-09-19 13:16:40 -07:00
### CC3D
2015-04-24 12:39:05 -07:00
The CC3D has no battery divider. To use voltage monitoring, you must create a divider that gives a 3.3v
MAXIMUM output when the main battery is fully charged. Connect the divider output to S5_IN/PA0/RC5.
2014-09-19 13:16:40 -07:00
2015-04-24 12:39:05 -07:00
Notes:
2014-09-19 13:16:40 -07:00
2015-04-24 12:39:05 -07:00
* S5_IN/PA0/RC5 is Pin 7 on the 8 pin connector, second to last pin, on the opposite end from the
GND/+5/PPM signal input.
* When battery monitoring is enabled on the CC3D, RC5 can no-longer be used for PWM input.
2015-03-30 13:49:07 -07:00
### Sparky
2015-04-26 07:10:07 -07:00
See the [Sparky board chapter ](Board - Sparky.md ).
2015-03-30 13:49:07 -07:00
2014-09-19 13:16:40 -07:00
## Configuration
Enable the `VBAT` feature.
2014-11-12 17:29:07 -08:00
Configure min/max cell voltages using the following CLI setting:
2014-09-19 13:16:40 -07:00
2015-04-24 12:39:05 -07:00
`vbat_scale` - Adjust this to match actual measured battery voltage to reported value.
2014-09-19 13:16:40 -07:00
2015-04-24 12:39:05 -07:00
`vbat_max_cell_voltage` - Maximum voltage per cell, used for auto-detecting battery voltage in 0.1V units, i.e. 43 = 4.3V
2014-09-19 13:16:40 -07:00
2015-04-24 12:39:05 -07:00
`set vbat_warning_cell_voltage` - Warning voltage per cell; this triggers battery-out alarms, in 0.1V units, i.e. 34 = 3.4V
2015-01-01 13:55:18 -08:00
2015-04-24 12:39:05 -07:00
`vbat_min_cell_voltage` - Minimum voltage per cell; this triggers battery-out alarms, in 0.1V units, i.e. 33 = 3.3V
2014-09-19 13:16:40 -07:00
e.g.
```
set vbat_scale = 110
set vbat_max_cell_voltage = 43
2015-01-01 13:55:18 -08:00
set vbat_warning_cell_voltage = 34
2014-09-19 13:16:40 -07:00
set vbat_min_cell_voltage = 33
```
2014-11-12 17:29:07 -08:00
# Current Monitoring
2015-04-24 12:39:05 -07:00
Current monitoring (amperage) is supported by connecting a current meter to the appropriate current meter ADC input (see the documentation for your particular board).
2014-11-12 17:29:07 -08:00
2015-04-24 12:39:05 -07:00
When enabled, the following values calculated and used by the telemetry and OLED display subsystems:
* Amps
* mAh used
* Capacity remaining
2014-11-12 17:29:07 -08:00
## Configuration
2015-04-24 12:39:05 -07:00
Enable current monitoring using the CLI command:
2014-11-12 17:29:07 -08:00
```
feature CURRENT_METER
```
2015-04-24 12:39:05 -07:00
Configure the current meter type using the `current_meter_type` settings here:
2015-01-16 01:47:10 -08:00
| Value | Sensor Type |
| ----- | ---------------------- |
| 0 | None |
| 1 | ADC/hardware sensor |
| 2 | Virtual sensor |
2015-04-24 12:39:05 -07:00
Configure capacity using the `battery_capacity` setting, in mAh units.
2014-11-12 17:29:07 -08:00
2015-01-16 01:47:10 -08:00
If you're using an OSD that expects the multiwii current meter output value, then set `multiwii_current_meter_output` to `1` (this multiplies amperage sent to MSP by 10).
### ADC Sensor
2014-11-12 17:29:07 -08:00
2015-04-24 12:39:05 -07:00
The current meter may need to be configured so the value read at the ADC input matches actual current draw. Just like you need a voltmeter to correctly calibrate your voltage reading you also need an ammeter to calibrate the current sensor.
Use the following settings to adjust calibration:
2014-11-12 17:29:07 -08:00
`current_meter_scale`
`current_meter_offset`
2015-01-16 01:47:10 -08:00
### Virtual Sensor
2015-04-24 12:39:05 -07:00
The virtual sensor uses the throttle position to calculate an estimated current value. This is useful when a real sensor is not available. The following settings adjust the virtual sensor calibration:
2015-01-16 01:47:10 -08:00
| Setting | Description |
| ----------------------------- | -------------------------------------------------------- |
| `current_meter_scale` | The throttle scaling factor [centiamps, i.e. 1/100th A] |
2015-02-25 13:30:44 -08:00
| `current_meter_offset` | The current at zero throttle (while disarmed) [centiamps, i.e. 1/100th A] |
2015-01-16 01:47:10 -08:00
2015-04-24 12:39:05 -07:00
There are two simple methods to tune these parameters: one uses a battery charger and another depends on actual current measurements.
2015-02-13 16:00:54 -08:00
#### Tuning Using Actual Current Measurements
2015-04-24 12:39:05 -07:00
If you know your craft's current draw while disarmed (Imin) and at maximum throttle while armed (Imax), calculate the scaling factors as follows:
2015-01-16 01:47:10 -08:00
```
current_meter_scale = (Imax - Imin) * 100000 / (Tmax + (Tmax * Tmax / 50))
current_meter_offset = Imin * 100
```
2015-04-24 12:39:05 -07:00
Note: Tmax is maximum throttle offset (i.e. for `max_throttle` = 1850, Tmax = 1850 - 1000 = 850)
For example, assuming a maximum current of 34.2A, a minimum current of 2.8A, and a Tmax `max_throttle` = 1850:
2015-01-16 01:47:10 -08:00
```
current_meter_scale = (Imax - Imin) * 100000 / (Tmax + (Tmax * Tmax / 50))
= (34.2 - 2.8) * 100000 / (850 + (850 * 850 / 50))
= 205
current_meter_offset = Imin * 100 = 280
```
2015-04-24 12:39:05 -07:00
#### Tuning Using Battery Charger Measurement
2015-04-26 07:10:07 -07:00
If you cannot measure current draw directly, you can approximate it indirectly using your battery charger.
However, note it may be difficult to adjust `current_meter_offset` using this method unless you can
measure the actual current draw with the craft disarmed.
Note:
+ This method depends on the accuracy of your battery charger; results may vary.
+ If you add or replace equipment that changes the in-flight current draw (e.g. video transmitter,
camera, gimbal, motors, prop pitch/sizes, ESCs, etc.), you should recalibrate.
The general method is:
2015-04-24 12:39:05 -07:00
1. Fully charge your flight battery
2. Fly your craft, using >50% of your battery pack capacity (estimated)
3. Note Cleanflight's reported mAh draw
4. Re-charge your flight battery, noting the mAh charging data needed to restore the pack to fully charged
2015-04-26 07:10:07 -07:00
5. Adjust `current_meter_scale` to according to the formula given below
2015-04-24 12:39:05 -07:00
6. Repeat and test
2015-04-26 07:10:07 -07:00
Given (a) the reported mAh draw and the (b) mAh charging data, calculate a new `current_meter_scale` value as follows:
```
current_meter_scale = (charging_data_mAh / reported_draw_mAh) * old_current_meter_scale
```
For example, assuming:
+ A Cleanflight reported current draw of 1260 mAh
+ Charging data to restore full charge of 1158 mAh
+ A existing `current_meter_scale` value of 400 (the default)
Then the updated `current_meter_scale` is:
```
current_meter_scale = (charging_data_mAh / reported_draw_mAh) * old_current_meter_scale
= (1158 / 1260) * 400
= 368
```
2015-04-24 12:39:05 -07:00