基于STM32L476的锂电池SOC检测
便攜式設(shè)備由于使用需求而配備了鋰電池,但使用過程中需要掌握電源的狀態(tài)才能保證設(shè)備正常運(yùn)行。而且在電池充放電的過程中,監(jiān)控電池的充放電狀態(tài)也是保證設(shè)備安全的需要。
1、硬件設(shè)計(jì)
電池SOC檢測(cè)是一個(gè)難題,有很多的模型和檢測(cè)電路。但對(duì)于我們這樣一臺(tái)很小的便攜式一起來說,使用各類檢測(cè)模型和電路無論成本還是周期都不允許,所以只能想別的辦法。
我們使用一個(gè)采樣電路采集電壓信號(hào),形成以個(gè)0-2.5V的差分信號(hào),如下圖所示:
再將差分信號(hào)引入到具有差分信號(hào)輸入功能的ADC控制器,就可以采集電池的電壓了。模擬量采集在前面已經(jīng)試驗(yàn)過了:
在STM32L476RG開發(fā)板中,有SPI3口已經(jīng)引到端子可以使用。各引腳分別為:
CN7-1 PC10 SPI3-SCK
CN7-2 PC11 SPI3-MISO
CN7-3 PC12 SPI3-MOSI
在開發(fā)板上的位置如下紅框標(biāo)識(shí):
關(guān)于硬件配置這里就不再敘述了。
2、軟件設(shè)計(jì)
前面說過了我們使用采集電池電壓的方式來估算電池的SOC,那么首先我們來看一看電池SOC與電壓的關(guān)系。一般的鋰電池電壓與SOC的關(guān)系可表示如下圖:
根據(jù)上圖我們可以知道在10%到100%的范圍內(nèi)電壓的變化是比較平緩的,但在10%以下就會(huì)計(jì)數(shù)下降。在我們估算SOC是其實(shí)在小于10%的時(shí)候就應(yīng)該認(rèn)為電池已經(jīng)不具備工作條件。
首先定義一個(gè)數(shù)組用于存儲(chǔ)電池電壓值,然后再檢測(cè)到電壓值后與存儲(chǔ)的數(shù)據(jù)對(duì)比。獲得相應(yīng)的區(qū)間計(jì)算SOC值。
float voltages[2][13]; /*查找目標(biāo)位置*/ static uint16_t FindTargetLocation(float voltage) {uint16_t position=0;while(voltages [1][position]< voltage){if(position<12){position++;}else{position++;break;}}return position; }static float LookupCalcSoc(float voltage) {float temp;uint16_t index=14;index=FindTargetLocation(voltage);if(index<=0){temp= voltages [0][0];}else if(index>=13){temp= voltages [0][12];}else{float lowV= voltages [0][index-1];float lowS= voltages [1][index-1];float highS= voltages [1][index];temp=((resistance-lowS)*0.5)/(highS-lowS)+lowV;}return temp; }以上是我們對(duì)電池SOC的估算方式,當(dāng)然不同的廠家電池也許充放電曲線會(huì)有些差異,但方法應(yīng)該都是一致的。
3、測(cè)試結(jié)果
我們看一看在屏上顯示出來的效果,有圖標(biāo)動(dòng)態(tài)顯示,也有數(shù)字指示,如下圖所示:
在這一次我們采用了簡單的做法,這種做法叫做電壓估算法。
歡迎關(guān)注:
總結(jié)
以上是生活随笔為你收集整理的基于STM32L476的锂电池SOC检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: obj文件编辑软件_工程动画制作 | M
- 下一篇: mysql ==null_mysql