0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【SOC的多種計(jì)算方法】

jf_40173050 ? 來(lái)源:jf_40173050 ? 作者:jf_40173050 ? 2024-06-05 09:34 ? 次閱讀

soc的估算方法大致有五種:電流積分法、開路電壓法、阻抗法、智能算法、狀態(tài)觀測(cè)器。今天先給大家介紹前兩種方法。

什么是SOC
電池的狀態(tài)(State of Charge,SOC)是電池能夠提供的電荷總量與總電荷容量的比率,通常用百分比表示。在電池管理系統(tǒng)(Battery Management System,BMS)中,精準(zhǔn)地計(jì)算電池的SOC是非常重要的,因?yàn)樗梢詭椭鶥MS判斷電池的剩余能量,從而控制電池的使用和充放電過(guò)程,延長(zhǎng)電池的壽命。

目前,常用的計(jì)算電池SOC的方法主要有電流積分法和開路電壓法。這兩種方法各有優(yōu)缺點(diǎn),但都存在一定的誤差。因此,在實(shí)際應(yīng)用中,常常將兩種方法結(jié)合起來(lái)使用,以提高SOC的精度。

wKgaomZe9UqAO9ndACORBk5sbk4224.png

本文將詳細(xì)介紹如何使用電流積分法和開路電壓法結(jié)合起來(lái)計(jì)算電池的SOC。

一、電流積分法
電流積分法是一種通過(guò)對(duì)電池的充放電電流進(jìn)行積分,來(lái)計(jì)算電池SOC的方法。它的優(yōu)點(diǎn)在于計(jì)算過(guò)程簡(jiǎn)單,不需要進(jìn)行標(biāo)定。下面是電流積分法的具體步驟:

步驟1:記錄電池開始充電或放電時(shí)的SOC。

步驟2:記錄電池充放電時(shí)的電流。

步驟3:對(duì)電池的電流進(jìn)行積分,得到電池的電量變化量。

步驟4:根據(jù)電量變化量和開始時(shí)的SOC,計(jì)算出當(dāng)前的SOC。

公式:SOC = 初始SOC + ∫(I*dt)/Q

其中,I表示電流,Q表示電池的電量,dt表示時(shí)間間隔。

需要注意的是,由于電池內(nèi)阻等因素的存在,電流積分法的計(jì)算結(jié)果存在一定的誤差。此外,電流積分法只能對(duì)電池進(jìn)行較長(zhǎng)時(shí)間的充放電測(cè)試,才能得到較為準(zhǔn)確的結(jié)果。

二、開路電壓法
開路電壓法是通過(guò)測(cè)量電池的開路電壓(即在沒(méi)有負(fù)載情況下的電壓)來(lái)計(jì)算電池SOC的方法。開路電壓法的優(yōu)點(diǎn)在于計(jì)算過(guò)程簡(jiǎn)單,無(wú)需進(jìn)行電流測(cè)量。下面是開路電壓法的具體步驟:

步驟1:根據(jù)電池的型號(hào)和廠家提供的SOC-開路電壓曲線,建立SOC和開路電壓之間的關(guān)系。

步驟2:測(cè)量電池的開路電壓。

步驟3:根據(jù)步驟1中建立的SOC-開路電壓曲線,計(jì)算出當(dāng)前的SOC。

需要注意的是,電池的SOC-開路電壓曲線是隨著電池的使用和壽命的變化而變化的,因此,需要定期進(jìn)行標(biāo)定,以確保計(jì)算結(jié)果的準(zhǔn)確性。

另外,由于電池的內(nèi)阻等因素的影響,開路電壓法也存在一定的誤差。尤其在高放電狀態(tài)下,誤差會(huì)更大。

三、結(jié)合使用電流積分法和開路電壓法
電流積分法和開路電壓法各自有其優(yōu)缺點(diǎn),因此,在實(shí)際應(yīng)用中,常常將兩種方法結(jié)合起來(lái)使用,以提高SOC的精度。

結(jié)合使用電流積分法和開路電壓法的具體步驟如下:

步驟1:使用電流積分法記錄電池的充放電情況,并得到當(dāng)前的SOC1。

步驟2:使用開路電壓法測(cè)量電池的開路電壓,并根據(jù)SOC-開路電壓曲線計(jì)算出當(dāng)前的SOC2。

步驟3:根據(jù)SOC1和SOC2,計(jì)算出當(dāng)前的SOC。

公式:SOC = k1SOC1 + k2SOC2

其中,k1和k2是權(quán)重系數(shù),它們的和等于1。權(quán)重系數(shù)的選擇需要考慮到電池的使用情況、測(cè)試時(shí)間和測(cè)試精度等因素。一般來(lái)說(shuō),如果電池進(jìn)行了較長(zhǎng)時(shí)間的充放電測(cè)試,那么k1的值應(yīng)該更大;如果電池的開路電壓測(cè)量精度較高,那么k2的值應(yīng)該更大。

需要注意的是,在結(jié)合使用電流積分法和開路電壓法時(shí),需要進(jìn)行相應(yīng)的標(biāo)定工作,以保證計(jì)算結(jié)果的準(zhǔn)確性。此外,電池的內(nèi)阻、溫度等因素對(duì)計(jì)算結(jié)果也有一定的影響,需要進(jìn)行相應(yīng)的校正。

四、結(jié)論
綜上所述,電流積分法和開路電壓法是計(jì)算電池SOC的兩種主要方法,它們各自有其優(yōu)缺點(diǎn)。為了提高SOC的精度,在實(shí)際應(yīng)用中,常常將兩種方法結(jié)合起來(lái)使用。通過(guò)結(jié)合使用電流積分法和開路電壓法,可以克服各自的缺點(diǎn),提高SOC的精度和可靠性。然而,在使用這兩種方法時(shí)需要進(jìn)行相應(yīng)的標(biāo)定和校正,以保證計(jì)算結(jié)果的準(zhǔn)確性。

第一種:電壓法
STM32 中,電池電量百分比的計(jì)算需要考慮到電池的電壓曲線和電量曲線。一般來(lái)說(shuō),電量百分比可以通過(guò)下面的公式計(jì)算:

電量百分比 = (當(dāng)前電壓值 - 最低電壓值)/(最高電壓值 - 最低電壓值)* 100%

其中,最低電壓值和最高電壓值需要根據(jù)電池的實(shí)際情況進(jìn)行設(shè)置。在實(shí)際使用中,可以通過(guò) ADC 模塊讀取電池的電壓值,然后將其轉(zhuǎn)換為電量百分比。具體的 C 語(yǔ)言代碼如下:

#define ADC_MAX_VALUE 4096 // ADC 最大值
#define VOLTAGE_DIVIDER_RATIO 2 // 電壓分壓比
#define BATTERY_MAX_VOLTAGE 4.2 // 電池滿電電壓
#define BATTERY_MIN_VOLTAGE 3.0 // 電池極低電壓

float get_battery_voltage(void) {
uint16_t adc_value = HAL_ADC_GetValue(&hadc); // 讀取 ADC 值
float voltage = (float)adc_value / ADC_MAX_VALUE * VREF * VOLTAGE_DIVIDER_RATIO; // 轉(zhuǎn)換為電壓值
return voltage;
}

uint8_t get_battery_percentage(void) {
float voltage = get_battery_voltage();
uint8_t percentage = (voltage - BATTERY_MIN_VOLTAGE) / (BATTERY_MAX_VOLTAGE - BATTERY_MIN_VOLTAGE) * 100;
return percentage;
}

以上代碼假設(shè)使用的 ADC 通道已經(jīng)初始化并啟動(dòng),get_battery_voltage() 函數(shù)用于讀取電池電壓值,get_battery_percentage() 函數(shù)用于計(jì)算電量百分比。需要注意的是,上述代碼僅供參考,實(shí)際使用中需要根據(jù)具體情況進(jìn)行調(diào)整。

第二種:累積電量積分法
對(duì)于電池管理系統(tǒng)(BMS)的電量計(jì)算,一般采用累積電量積分法。要計(jì)算電池的電量百分比,需要知道當(dāng)前電池的電量和額定電量。以下是一種簡(jiǎn)單的實(shí)現(xiàn)方法:

獲取電池實(shí)際電壓值,單位為毫伏(mV)。

獲取電池額定電壓值,單位為毫伏(mV)。

計(jì)算電池當(dāng)前電量,單位為毫安時(shí)(mAh)。

計(jì)算電池額定電量,單位為毫安時(shí)(mAh)。

根據(jù)以下公式計(jì)算電池電量百分比:電量百分比 = 當(dāng)前電量 / 額定電量 * 100%

在BMS中,可以使用ADC模塊來(lái)獲取電池實(shí)際電壓值,并使用電流傳感器來(lái)獲取電池充放電電流值,從而計(jì)算電池當(dāng)前電量。以下是一種簡(jiǎn)單的代碼實(shí)現(xiàn):

#define VBAT_R1 10000 // 電阻R1的值,單位為歐姆(Ω)
#define VBAT_R2 10000 // 電阻R2的值,單位為歐姆(Ω)
#define VBAT_ADC_RES 4096 // ADC的分辨率
#define VBAT_R1_R2_RATIO 0.5 // R1和R2的比值

float get_battery_voltage(void)
{
uint16_t adc_value = 0;
float voltage = 0;
// 讀取ADC的值
adc_value = HAL_ADC_GetValue(&hadc1);

// 根據(jù)ADC的值計(jì)算電壓值
voltage = (float)adc_value * 3.3 / (float)VBAT_ADC_RES * VBAT_R1_R2_RATIO;

// 根據(jù)電壓分壓計(jì)算實(shí)際電池電壓值
voltage = voltage / (VBAT_R2 / (VBAT_R1 + VBAT_R2));

return voltage;
}

float get_battery_current(void)
{
uint16_t adc_value = 0;
float current = 0;
// 讀取ADC的值
adc_value = HAL_ADC_GetValue(&hadc2);

// 根據(jù)ADC的值計(jì)算電流值
current = ((float)adc_value - 2048) * 3.3 / 4096 / 0.04;

return current;
}

float get_battery_capacity(float current, float time)
{
float capacity = 0;
// 計(jì)算電量
capacity = current * time / 3600;

return capacity;
// 計(jì)算電池當(dāng)前電量
float current = get_battery_current();
float time = 1; // 積分時(shí)間,單位為秒
float current_capacity = get_battery_capacity(current, time);
capacity += current_capacity;

// 計(jì)算電池電量百分比
percentage = (int)(capacity / rated_capacity * 100);

// 限制百分比在0-100之間
percentage = percentage > 100 ? 100 : percentage;
percentage = percentage < 0 ? 0 : percentage;

return percentage;
}

其中,get_battery_voltage()函數(shù)用于獲取電池實(shí)際電壓值,get_battery_current()函數(shù)用于獲取電池充放電電流值,get_battery_capacity()函數(shù)用于計(jì)算電池當(dāng)前電量,get_battery_percentage()函數(shù)用于計(jì)算電池電量百分比。在使用時(shí),需要提供電池的額定電壓、電量和實(shí)際電壓等參數(shù)。

注意,在計(jì)算電池當(dāng)前電量時(shí),需要進(jìn)行電流積分,積分時(shí)間可以根據(jù)實(shí)際應(yīng)用場(chǎng)景進(jìn)行調(diào)整。

第三種:開路電壓法
開路電壓法是一種基于電池開路電壓與SOC之間的關(guān)系計(jì)算SOC的方法。具體計(jì)算公式如下:

SOC = f(V_oc)

其中,V_oc是電池的開路電壓,f是一種特定的函數(shù),它反映了電池開路電壓與SOC之間的關(guān)系。不同類型的電池有不同的f函數(shù),常見(jiàn)的有線性關(guān)系、二次函數(shù)關(guān)系等。下面是使用C語(yǔ)言實(shí)現(xiàn)線性函數(shù)開路電壓法計(jì)算電池SOC的代碼示例:

#include 
int main()
{
// 輸入電池的電壓、最小電壓和最大電壓
float voltage, min_voltage, max_voltage;
printf(“請(qǐng)輸入電池的電壓、最小電壓和最大電壓(以空格分隔):”);
scanf("%f %f %f", &voltage, &min_voltage, &max_voltage);
// 計(jì)算電池的SOC
float soc = (voltage - min_voltage) / (max_voltage - min_voltage) * 100;
printf(“電池的SOC為:%.2f%%”, soc);
return 0;
}

第四種:卡爾曼濾波法
卡爾曼濾波法是一種基于電池電流、電壓及其他信息計(jì)算SOC的方法,它采用了狀態(tài)估計(jì)和卡爾曼濾波技術(shù)。具體實(shí)現(xiàn)過(guò)程比較復(fù)雜,需要借助數(shù)學(xué)模型和計(jì)算機(jī)算法。下面是使用C語(yǔ)言調(diào)用卡爾曼濾波庫(kù)計(jì)算電池SOC的代碼示例:

#include 
#include “kalman.h”
int main()
{
// 初始化卡爾曼濾波器
kalman_state state;
kalman_init(&state, 1.0, 1.0, 1.0, 0.0);
// 輸入電池的電流和電壓
float current, voltage;
printf(“請(qǐng)輸入電池的電流和電壓(以空格分隔):”);
scanf("%f %f", ¤t, &voltage);
// 使用卡爾曼濾波器計(jì)算電池SOC
float soc = kalman_update(&state, current, voltage);
printf(“電池的SOC為:%.2f%%”, soc);
return 0;
}
wKgZomWRVB2AXAlTACMfwuYjJRw859.png

有需要的可以給作者留言

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • adc
    adc
    +關(guān)注

    關(guān)注

    97

    文章

    6345

    瀏覽量

    543342
  • soc
    soc
    +關(guān)注

    關(guān)注

    38

    文章

    4064

    瀏覽量

    217545
  • bms
    bms
    +關(guān)注

    關(guān)注

    106

    文章

    960

    瀏覽量

    65536
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    阻抗計(jì)算方法

    阻抗計(jì)算方法,希望有所幫助
    發(fā)表于 06-10 16:58

    機(jī)器視覺(jué)計(jì)算方法

    機(jī)器視覺(jué)計(jì)算方法
    發(fā)表于 08-14 09:23

    處理增益的計(jì)算方法是什么?

    本文以Intersil 公司專用于DSSS無(wú)線設(shè)計(jì)的PRISM芯片組為例,說(shuō)明處理增益的計(jì)算方法,適合于從事RF收發(fā)器應(yīng)用的中國(guó)設(shè)計(jì)工程師閱讀。
    發(fā)表于 06-01 06:29

    soc計(jì)算方法

    soc計(jì)算方法,BMS中的SOC計(jì)算其實(shí)可以分為三大部分:1、電芯層級(jí)的SOC計(jì)算(軟件中最真
    發(fā)表于 07-27 06:13

    請(qǐng)問(wèn)伺服電機(jī)的選型計(jì)算方法是什么?

    請(qǐng)問(wèn)伺服電機(jī)的選型計(jì)算方法是什么?
    發(fā)表于 09-28 08:45

    Rstart的計(jì)算方法

    或者是通過(guò)TI官網(wǎng)UC3842手冊(cè)上的方法學(xué)習(xí)Rstart的計(jì)算方法。
    發(fā)表于 10-29 07:04

    pcb載流能力的計(jì)算方法

    pcb載流能力的計(jì)算方法
    發(fā)表于 03-06 15:56 ?63次下載
    pcb載流能力的<b class='flag-5'>計(jì)算方法</b>

    IFFT的計(jì)算方法

    IFFT的計(jì)算方法 FFT算法同樣可以應(yīng)用于IDFT的計(jì)算,稱為快速傅里葉反變換,簡(jiǎn)寫為IFFT。前述DFT和IDFT公式為
    發(fā)表于 10-30 13:14 ?1.3w次閱讀
    IFFT的<b class='flag-5'>計(jì)算方法</b>

    甲類單端的簡(jiǎn)易計(jì)算方法

    甲類單端的簡(jiǎn)易計(jì)算方法甲類單端的簡(jiǎn)易計(jì)算方法甲類單端的簡(jiǎn)易計(jì)算方法
    發(fā)表于 01-19 15:37 ?0次下載

    特征阻抗的計(jì)算方法

    特征阻抗的計(jì)算方法
    發(fā)表于 06-09 14:53 ?27次下載

    公路坡度的表示和計(jì)算方法綜述

    公路坡度的表示和計(jì)算方法綜述
    發(fā)表于 08-11 14:34 ?2次下載

    EMC計(jì)算方法和EMC仿真(4)

    エンジニアコラム第19篇 EMC計(jì)算方法和EMC仿真(4)傳導(dǎo)抗擾度(CI)的試行計(jì)算方法什么是IEC 62132-4 DPI法?大家好!我是ROHM的稻垣。
    的頭像 發(fā)表于 02-14 09:26 ?2452次閱讀
    EMC<b class='flag-5'>計(jì)算方法</b>和EMC仿真(4)

    EMC計(jì)算方法和EMC仿真(1) 計(jì)算方法簡(jiǎn)介

    EMC計(jì)算方法概述2021/11/16大家好!我是ROHM的稻垣。本文是第16篇,從本文開始我們來(lái)談一談電磁兼容性(EMC)的計(jì)算方法和仿真。
    的頭像 發(fā)表于 02-14 09:26 ?2852次閱讀

    開關(guān)電源中多種線圈電感量的計(jì)算方法

    電子發(fā)燒友網(wǎng)站提供《開關(guān)電源中多種線圈電感量的計(jì)算方法.pdf》資料免費(fèi)下載
    發(fā)表于 11-13 09:55 ?1次下載
    開關(guān)電源中<b class='flag-5'>多種</b>線圈電感量的<b class='flag-5'>計(jì)算方法</b>

    EMC計(jì)算方法和EMC仿真(1) ——計(jì)算方法簡(jiǎn)介

    EMC計(jì)算方法和EMC仿真(1) ——計(jì)算方法簡(jiǎn)介
    的頭像 發(fā)表于 12-05 14:56 ?1188次閱讀
    EMC<b class='flag-5'>計(jì)算方法</b>和EMC仿真(1) ——<b class='flag-5'>計(jì)算方法</b>簡(jiǎn)介