我們的智能小車用到了ADC測量電池電壓的功能,這章節(jié)我們做一下。
我們的一篇在這里
第一篇
什么是ADC
百度百科介紹:
我們知道萬用表 電壓表可以測量電池,或者電路電壓。那么我們是否可以通過單片機(jī)獲得電壓,方便我 們監(jiān)控電池狀態(tài)
如何測量我們的鋰電池電壓那?鋰電池電壓12V左右,單片機(jī)ADC最大測量電壓3.3V,這里我們需要分 壓電路分壓。
然后我們通過電阻分壓,顯而易見 ADC點(diǎn)的電壓是VBAT_IN的 五分之一
- 軟件初始化一下ADC 。
- 然后注意調(diào)長一點(diǎn)采樣時(shí)間、這樣精度才會(huì)更高一點(diǎn)。
在adc.c文件添加ADC相關(guān)函數(shù)
/*******************
* @brief 電池電壓測量計(jì)算函數(shù)
* @param 無
* @return 小車電池電壓
*
*******************/
float adcGetBatteryVoltage(void)
{
HAL_ADC_Start(&hadc2);//啟動(dòng)ADC轉(zhuǎn)化
if(HAL_OK == HAL_ADC_PollForConversion(&hadc2,50))//等待轉(zhuǎn)化完成、超時(shí)時(shí)間50ms
return (float)HAL_ADC_GetValue(&hadc2)/4096*3.3*5;//計(jì)算電池電壓
return -1;
}
在main中調(diào)用顯示函數(shù)顯示電壓
sprintf((char*)OledString, "U:%.2fV", adcGetBatteryVoltage());
OLED_ShowString(0,2,OledString,12);//這個(gè)是oled驅(qū)動(dòng)里面的,是顯示位置的一個(gè)函數(shù),
然后后面繼續(xù)做其他功能
聯(lián)系:Q,1930299709