24S Power Monitoring - Voltage Divider Issue


Currently we are trying to implement a 24S battery with monitoring onboard our octoquad. We are using pairs of 12S 30000 mAh wired in series to reach the 24S voltage.

We are using some Mauch Electronics components for measurement and once up and running will be running 8x PL-200 sensors into a sensor hub X8. The X8 is connected to a PowerCube 4 v2 and our flight controller, a Cube Orange, is powered through both power brick ports from the power 1 and 2 ports on the PowerCube. Power 1 (Cable with analogue voltage and current values) has been connected to both Power 1 and 2 on the cube to test both battery monitors but has been left connected to 1 for now as it didn’t resolve our issue. The PowerCube is powered through a separate avionics battery pack (As 24S flight batteries are too high voltage for this device) and a ground bridge has been fitted between the avionics and flight battery power systems.

The problem we are running into is that no matter what we have tried through Mission Planner, the battery monitor always reports an incorrect voltage. We have set the voltage divider multiplier to the calibrated value provided by mauch (37) and this results in a reported voltage from the flight controller of approximately 35 V. This is definitelty incorrect as our batteries have been measured at 99.5 V while connected. Additionally, I have measured the analogue voltage signal going into the flight controller to be 2.699 V for this battery voltage. This would give us a divider value of 36.8655 (99.5/2.699). So by our reckoning this signal should be correct?

Weirdly when we set the divider value to 1, we see the measured voltage of 2.699 V. We set it to 10 and we get 26.99 and so on with increasing divider values. However, when we get to a divider value of 25 we get a significant decrease in the measured voltage which reads 8 V and any further increase in the divider value does not get us any closer to a reasonable measured voltage. The highest we’ve been able to get the measured voltage to read is about 66 V just be trying various divider values.

Any help on this would be greatly appreciated, we are about to downgrade the firmware a few versions to see if we get any change.

In the code it looks like a straight multiplication to me, unless there’s an issue with one of the variable types being unable to handle values over 66volts without wrapping around @rmackay9

// get voltage
_state.voltage = (_volt_pin_analog_source->voltage_average() - _volt_offset) * _volt_multiplier;

Note there is the new volt_offset value in the latest firmware.

Maybe show us all you associated params

Did this get sorted out? or is it still an issue?

Feel free to set LOG_DISARMED and provide a .bin log file

Hi, thanks for your feedback.

After speaking to some of the developers on discord, they suggested to divide our multiplier by 10 and all our failsafe values as well by 10. This does mean we have to deal with reading 10 V instead of 100 V for example at full charge on our 24S batteries. This at least can be applied consistently.

After trying some custom builds where I had edited the variable types used to store voltage we still had no success. The issue relates to the mavlink protocol sending voltage to the GCS in mV, using a uint16_t. This limits the value to 65535 or 65.535 V. For us this variable overflowed for our battery voltage and so displayed ~34-35 V.

The devs are apparently planning to fix this in an upcoming release although the exact timeline isn’t quite confirmed.

Thanks again for the help!