This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Wrong discharged curve used in battery_level_in_percent method

I am not sure where to post this info so I do it here. We have been testing nRF51822 chips in a Rigado BMD-200 module powered by a single 2032 battery and have been getting capacity results significantly different than what was being reported using the battery_level_in_percent method located in app_util.h.

After reviewing the issue, I have determined that the battery_level_in_percent method implements a volt to capacity mapping derived from the continuous discharge curve ( see chart 1 in data.energizer.com/.../ However this is the incorrect discharge curve since as you know, the nRF51822 is not continuous draw but a pulse. The behavior we are seeing is much more like the discharge curve in chart 3 which is derived from a 1ms on / 14 ms off pulse. Not exactly what the nRF51 uses but significantly better match than continuous draw curve.

Parents
  • Hi randy

    Thank you for your suggestion.

    Sorry if the presented discharge curve in app_util.h is misleading. I suspect the purpose of providing it was to give an example of how it could be coded. I doubt there was much thought put into if it was correct or not for a certain battery. I also suspect that the discharge curve could be slightly different for batteries from different manufacturers. Anyway, since you have clearly put some research and thought into your reply, I will try to have the discharge curve in app_util.h updated to reflect what you have suggested.

  • Thanks Stefan,

    I am not sure what the preferred answer is. Not only are the discharge curves (probably) different between manufacturers but I think the actual pulse ratio you use (time on over time off) matters also. The chart for pulses on this spec ( data.energizer.com/.../cr2032.pdf ) are 1ms on, 14 ms off. We are pulsing one broadcast per second which has a significantly longer off interval than the chart in the spec.

    For now we have gone with a straight liner mapping between 3000 mv and 2100 mv. We will adjust based on what we find in our testing. The straight linear is more accurate in a pulse situation but far from satisfactory. Maybe just implement a straight linear calculation with a big comment explaining what the issue is and how people need to use their own conversion based on their own batteries discharge curve?

Reply
  • Thanks Stefan,

    I am not sure what the preferred answer is. Not only are the discharge curves (probably) different between manufacturers but I think the actual pulse ratio you use (time on over time off) matters also. The chart for pulses on this spec ( data.energizer.com/.../cr2032.pdf ) are 1ms on, 14 ms off. We are pulsing one broadcast per second which has a significantly longer off interval than the chart in the spec.

    For now we have gone with a straight liner mapping between 3000 mv and 2100 mv. We will adjust based on what we find in our testing. The straight linear is more accurate in a pulse situation but far from satisfactory. Maybe just implement a straight linear calculation with a big comment explaining what the issue is and how people need to use their own conversion based on their own batteries discharge curve?

Children
No Data
Related