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</