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