这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【转载】STM32采集电池电量方法实现--from森

共4条 1/1 1 跳转至

【转载】STM32采集电池电量方法实现--from森

工程师
2024-10-20 15:51:03     打赏

一、项目简介

      若设备接了锂电池,可以通过STM32的ADC采集电池的电量。锂电池为3节3.7V的单节串联,整体电压大约为12V。

二、实现过程

   1、由于STM32采集的电压范围为0-3.3V,所以无法直接采集锂电池的电压,这里可以用外接分压电阻的方法实现采集,同时,锂电池的电压和电量几乎为线性变化,所以可以通过采集电压值成比例转化为电量值。

2、分压电路设计:如图

744d69b14677bc0fa73a91989836e46b.png

根据经验,锂电池在没电的时候电压为9V,最高电压12V,则经过分压电路,AD端输出的电压范围为9*10/(10+47)=1.579到12*10/(10+47)= 2.211V,这样可以在ADC的电压采集范围内。

3、cubeMX设置

f5e6b892a970ebf1ff883e7cd533f749.png

9e85043716979742e5aeaffae6b7388d.png

4、程序代码实现:

void Get_Battery_ADC_Value()

{

HAL_ADC_Start(&hadc2);

    if(HAL_OK == HAL_ADC_PollForConversion(&hadc2,10))

    {

        Battery_ADC_Value = HAL_ADC_GetValue(&hadc2);

 

Battery_ADC_Volt=3.3*Battery_ADC_Value/4096;//根据采样值算出采集到的电压值

 

Float_Battery_Level=(Battery_ADC_Volt-1.579)*100/(2.211-1.579);

Battery_Level=Float_Battery_Level;

if(Float_Battery_Level>100)Battery_Level=100;

else if(Float_Battery_Level<0)Battery_Level=0;

    }

    HAL_ADC_Stop(&hadc2);

}

来源: 整理文章为传播相关技术,网络版权归原作者所有,如有侵权,请联系删除。



专家
2024-10-20 16:13:06     打赏
2楼

这种电路对分压电阻的精密度、热稳定要求高不高?


院士
2024-10-28 06:17:14     打赏
3楼

谢谢楼主的分享~    !


菜鸟
2024-11-09 14:08:51     打赏
4楼

用的内部ADC码?精度怎么样


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]