Battery monitor Current is not working - wrong schematic?

The current sensor does not appear to be functioning properly.
Whether the motor is stopped or running,
the reported current remains constant at approximately 0.81 A.
All other functions, including the voltage sensor, are operating normally.

The parameters are set as follows:

BATT_MONITOR = 4
BATT_VOLT_PIN = 12
BATT_CURR_PIN = 11
BATT_VOLT_MULT = 11.0
BATT_AMP_PERVLT = 38.0

If the current or voltage pin is set to any other value,
a ‘battery unhealthy pre-arm’ warning appears.
This suggests that the parameters themselves are configured correctly.

I am using a custom-made flight controller based on the Omnibus F4 Pro design.
The current sensor is connected to PC1, and the voltage sensor is connected to PC2.

The schematic of the current sensor section is shown below.
I suspect the capacitor on pin 1 of the INA139 output, so I’m considering removing it to test.

I would appreciate your help in identifying what might be causing this issue.
Thank you very much for your assistance.

Looking at your schematic, I notice a few things that could explain the constant 0.81A reading:

1. Check the INA139 connections

The INA139 needs the V+ pin connected to the battery positive (high-side), and the VIN- pin should go to the load side of the shunt. Make sure these aren’t swapped - incorrect polarity will give a constant offset.

2. Verify the shunt resistor value

Your R32 shows 0.5mΩ (HoLR2725D-4W-0.5mR-1%). With BATT_AMP_PERVLT = 38.0 and the 110kΩ output resistor, let’s verify the math:

  • INA139 gain = R_L / 1kΩ = 110kΩ / 1kΩ = 110
    • At 0.81A constant reading with your settings, this suggests an offset voltage
  • 3. The capacitor C27 isn’t the issue
  • The 0.1µF capacitor on pin 1 is actually fine for filtering. It won’t cause a constant offset.

4. Most likely cause: Input offset or wiring

A constant ~0.81A suggests ~21mV offset at the ADC (0.81A / 38 A/V). This could be:

  • Poor ground connection between shunt and INA139
    • Solder bridges or shorts
      • Damaged INA139
    • Debugging steps:
      1. Measure voltage directly at the INA139 output (pin 1) with a multimeter
        1. With no load, it should be very close to 0V
          1. If you see ~21mV with no load, the issue is in the sensing circuit
        2. You can verify your voltage divider calculations here: Voltage Divider Calculator | Schemalyzer Tools - useful for checking the ADC input scaling matches your BATT_VOLT_MULT setting.
1 Like

Thank you for taking interest in my issue.

VBAT is connected to the battery positive (+) through the 4-in-1 ESC,
and pin 4 of the INA139 is connected through the shunt resistor.
The connections themselves do not seem to be the problem.
The same issue is also occurring on other boards with the same design.

Unfortunately, I do not currently have equipment capable of measuring millivolt-level.
However, since the same problem appears across multiple boards, it is unlikely to be an issue with the INA139 itself or with soldering.

Before reviewing your reply, I had already removed the C27 capacitor.
After doing so, the Mission Planner current reading, which had been stuck at 0.81A, started to change. However, the values are still incorrect.

The attached log shows a test where the motors were slowly ramped up from idle to about 5A and then stopped.
(The Amp per Volt parameter is set to 195.)

Mission Planner already shows about 3A at an actual load of around 2A.
Even when increasing the load further, displayed current remains at approximately 3A.

Based on this behavior, I suspect that the voltage corresponding to 3A is reaching the maximum ADC voltage that the INA139 output can be interpreted correctly.

At this point, however, I am not sure which parameters need to be adjusted and how.
As far as I understand, the Batt_VOLT_Mult parameter is related to voltage measurement, and the voltage reading itself appears to be correct. Only the current measurement is abnormal.

Thank you again for your assistance.

Your suspicion is correct - this is an output saturation issue. The INA139 output is hitting the ADC maximum voltage.

The problem:

With your circuit:

  • Shunt resistor: 0.5mΩ
  • Load resistor (R_L): 110kΩ
  • INA139 gain = R_L / 1kΩ = 110

At 50A current:

  • Shunt voltage = 50A × 0.5mΩ = 25mV
  • INA139 output = 25mV × 110 = 2.75V

This seems fine for a 3.3V ADC. But the STM32F4 ADC on the Omnibus F4 has a maximum input of ~3.3V. Your output is saturating early because the INA139 output can’t swing all the way to the supply rail.

The real issue: Your 110kΩ load resistor creates too much gain for the shunt value.

Let’s recalculate what you’re seeing:

  • At 3A displayed (with BATT_AMP_PERVLT = 195), the ADC sees: 3A / 195 = ~15.4mV
  • But this is already saturating!

The fix:

You need to reduce the load resistor (R31) to lower the gain:

For 50A max current measurement with 3V max output:

  • Required gain = 3V / (50A × 0.5mΩ) = 3V / 25mV = 120

Your current gain of 110 is close, but the issue is likely that C27 was forming an RC filter that was causing issues with the feedback. Now that it’s removed, you’re seeing the true saturation point.

Try this:

  1. Replace R31 (110kΩ) with 47kΩ - this gives gain = 47
  2. Recalculate BATT_AMP_PERVLT = 1 / (0.5mΩ × 47) = 42.5 A/V

Or if you want to keep the 110kΩ resistor, increase the shunt to 1mΩ.

1 Like

I think I may be misunderstanding something.

With my current setup, if I calculate the ADC voltage at 3 A:

Shunt voltage = 3 A × 0.5 mΩ = 1.5 mV
INA139 output = 1.5 mV × 110 = 0.165 V

Using that as the basis to calculate the BATT_AMP_PER_VOLT parameter gives:

1 / (0.5 mΩ × 110) ≈ 18.2 A/V.

Does that mean the ADC maximum input voltage is around 0.165 V?
(I feel like I might have made a mistake in my math, haha.)

I would appreciate a bit more detail on what would change if the resistor were changed to 47 kΩ.