ML302 OpenCPU系列(8)---锂电池电量计算

  ML302可以直接使用锂电池供电,模组VBAT引脚内部有一个ADC,可以直接采集VBAT的电压值,我们可以根据此电压计算锂电池电量,以百分比的方式显示出来。获取VBAT测得电压值的API:

int cm_get_vbat();

  基本思想:
    1、通过ADC采集vbat电压;
    2、计算稳定电压值;
    3、根据锂电池放电特性,使用稳定电压计算电量。

一、采集vbat电压值

  为提高ADC采样电压的准确性,取7次ADC采样的平均值,作为vbat电压值。

#define VBAT_RESULT_NUM         7       //ADC sampling number
static uint32_t cm_get_vbat_adc_result (void)
{
   
    int i, average;
    int sum = 0;
    int vbat_result[VBAT_RESULT_NUM];
    for (i = 0; i < VBAT_RESULT_NUM; i++)
    {
   
        vbat_result[i] = cm_get_vbat();
    }
    for(i =0; i <VBAT_RESULT_NUM; i++)
    {
   
        sum += vbat_result[i];
    }
    average = sum/VBAT_RESULT_NUM;
    return average;
}

二、定义锂电池特性值

  1、查看锂电池放电曲线,知道电压与电量并不是线性关系,我们不能采用简单的线性关系来计算电量。我们得采取look-up table(LUT)的方式计算,先定义如下电压与电量的对应关系。

#define BAT_CAPACITY_STEP   12
uint16_t cm_vbat_capacity_table[BAT_CAPACITY_STEP][2] = 
{
   
    {
   4120,  100},
    {
   4060,  90},
    {
   3979,  80},
    {
   3900,  70},
    {
   3840,  60},
    {
   3800,  50},
    {
   3760,  40},
    {
   3730</
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值