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

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

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

電池SOC估算中的安時積分與卡爾曼濾波的數(shù)值計算方法

冬至子 ? 來源:日篤小站 ? 作者:日篤小站 ? 2023-06-25 17:06 ? 次閱讀

接下來的Matlab數(shù)值計算,將以電池建模的foster型等效電路為基礎(chǔ),在連續(xù)時間內(nèi)對電池進行系統(tǒng)同定。

圖片

foster等效電路

首先,我們利用輸入輸出的數(shù)據(jù)來推測電池模型的參數(shù)。推測的參數(shù)為:

θ = [ R0 Rd Cd FCC SOC0 ] T

圖片

輸入輸出數(shù)據(jù)與SOC

電池的建模(Matlab)

數(shù)值實驗用輸入出數(shù)據(jù)的生成:

[ex_batt.m]1

%%假想實驗數(shù)據(jù)的作成

Te = 2*3600; %實驗結(jié)束時刻[sec]

Ts = 1; %采樣周期[sec]

t = ( 0: Ts: Te );

N = length(t);

%輸入(電流)的設(shè)定

u = 40sawtooth( tsqrt(2)) + 10*sin(t) - 18;

%輸出(電壓)的生成

SOC0 = 95; %初期SOC[%]

FCC = 40*3600; %滿充電容量[C]

R0 = 0.450e-3; %電池內(nèi)阻[ohm]

Rd = 0.500e-3; %擴散電阻[ohm]

Cd = 82000; %擴散電容[F]

th0 = [ R0, Rd, Cd, FCC ];

Nd = 3; %foster等效電路的近似級數(shù)

[ f, h, A, C, ymodel ] = batterymodel_foster(Nd);

%Simulation

[ y0, x ] = ymodel( u, t, th0, [SOC0; zeros(Nd, 1)] );

SOC = x(1, :);

%含有誤差的采樣值的模擬

um = u + randn(1, N) * 0.1; %電流傳感器的誤差

ym = y0 + randn(1, N) * 0.01; %電壓傳感器的誤差

%波形

figure(3), hold on

subplot(3,1,1); plot(t/60, u)

ylabel('Current [A]'), xlim([0 Te/60]), ylim([-100 50)]

subplot(3,1,2); plot(t/60, y0)

ylabel('Voltage [V]'), xlim([0 Te/60]), ylim([3.2 4.2)]

subplot(3,1,3); plot(t/60, SOC)

ylabel('SOC [%]'), xlim([0 Te/60]), ylim([0 100)]

xlabel('Time [min]),

上述 “m file” 里面使用的函數(shù) “batterymodel_foster" , 用以下方式記述。

[batterymodel_foster.m]

function [ f, h, A, C, ymodel ] = batterymodel_foster(Nd)

n = 1:Nd;

%參數(shù)矢量與物理常數(shù)的關(guān)系定義

R0 = @(th) th(1);

Rd = @(th) th(2);

Cd = @(th) th(3);

FCC = @(th) th(4);



A = @th blkdiag(0, -pi^2/4 * diag((2*n-1).^2)/Rd(th)/Cd(th();

B = @th [100/FCC(th); 2*ones(Nd,1)/Cd(th)];



f = @(x, u, th) A(th)*x + B(th)*u;

h = @(x, u, th) SOC2OCV(x(1,:)) + [0, ones(1, Nd)]*x+R0(th)*u;



%利用數(shù)值微分來計算SOC的雅可比數(shù)列

C = @(x) [numdiff(@SOC2OCV, x(1)), ones(1, Nd)];

%yhat:預(yù)測輸出的函數(shù)

function [y, x] = proto_ymode(u, t, th, x0)

    x = lsim(ss(A(th), B(th), eye(Nd+1), 0), u, t, x0, 'zoh')';

    y = h(x, u, th);

end

ymodel = @proto_ymodel;

end

上述的雅可比數(shù)列A,C為狀態(tài)推算時使用。

我們再來看看偏微分的數(shù)值計算。

[numdif.m]

function [dfdx] = numdiff(f, x)

n = length(x);

h = eye(n)*1e-5;

dfdx = arrayfun(@(k) (f(x+h(:, k)) - f(x-h(:,k)))/(2*h(k, k)), 1:n);

end

另外,SOC-OCV特性的簡易模型我們可以用以下m file來記述。

[SOC2OCV.m]

function ocv=SOC2OCV(SOC)

%系數(shù)設(shè)定

E0 = 4.14;    

K1 = 0.237;

K2 = -0.0516;

K3 = 1.05e-3;

K4 = 0.183;



mode = @(soc) E0 + K1.*log(soc/100) + K2.*log(1-soc/100) - K3./soc*100 - K4.*soc/100;

ocv = model(SOC);



ocv(SOC >98) = numdiff(model, 98)*(SOC(SOC >98)-98) + model(98);

ocv(SOC 2) = numdiff(model, 2)*(SOC(SOC< 2)-2) + model(2);

end

下面繼續(xù)[ex_batt.m]來進行連續(xù)時間里的電池系統(tǒng)同定,轉(zhuǎn)而來推算模型的參數(shù)。

[ex_batt.m]2

%%連續(xù)時間系統(tǒng)同定

yhat = @(th) ymodel(um, t, th(1:4), [th(5); zeros(Nd, 1)]);

%初期推算值

thhat0 = [1e-3, 1e-3, 1e5, 30*3600, 80];

%輸出誤差最小化的參數(shù)推算

thhat = Isqnonlin(...

@(th) ym-yhat(th.*thhat0), thhat0./thhat0, [ ], [ ],...

            optimoptions(@Isqnonlin, 'Display', 'iter',...

            'Algorithm', 'levenberg-marquardt')) .*thhat0

綜如上述所訴,在連續(xù)時間內(nèi)利用系統(tǒng)同定的方法,從實驗得到的輸入輸出數(shù)據(jù),可以定義內(nèi)含物理現(xiàn)象的電池模型的參數(shù)。

電池狀態(tài)的推定

眾所周知,電池的狀態(tài)主要包括SOC(剩余電量)和SOH(剩余壽命)。

SOC的推定方法可以總結(jié)為:

  1. 依據(jù)放電試驗的SOC測定
  2. 基于電池端子電壓的SOC推定
  3. 基于OCV測試的SOC推定
  4. 依據(jù)安時積分法的SOC推定
  5. 基于模型的SOC推定

圖片

SOH的推定方法可以總結(jié)為:

  1. 利用完全充放電測試容量的SOH推定
  2. 依據(jù)內(nèi)部電阻查表的SOH推定
  3. Bookkeeping的SOH推定
  4. 基于模型的SOH推定

圖片

內(nèi)部電阻的推定方法可以總結(jié)為:

  1. 依據(jù)I-V特性(電流電壓特性)的線性回歸的內(nèi)部電阻推定
  2. 從step跳躍應(yīng)答的內(nèi)部電阻推定
  3. 依據(jù)電阻測試的內(nèi)部電阻推定
  4. 基于模型的內(nèi)部電阻推定

圖片

雖然有各種推算方法,但是我們需要根據(jù):要求精度,使用環(huán)境,硬件條件,在線連續(xù)推定的必要性等等來具體判斷用什么方法。

下面我們就給出比較復(fù)雜的利用卡爾曼濾波以及安時積分推算SOC的Matlab建模方法。

[ex_batt.m]3

%%利用EKF的狀態(tài)推定

%離散時間的狀態(tài)空間建模

f_ct = @(x, u) f(x, u, th0); %模型參數(shù)的固定

f_dt = c2d_euler(f_ct, Ts); %euler法的離散化

%fd的雅可比數(shù)列

Ad = expm(A(th0)*Ts); %f的雅可比解析計算

Q = diag([0.1Ts)^2, 1e-6ones(1, Nd)]); %系統(tǒng)外亂

R = 0.01^2; %觀測外亂

xhat = zeros(Nd+1, N); %狀態(tài)推算值

P = zeros(Nd+1, Nd+1, N); %推定分散

%初期推算值

SOChat0 = OCV2SOC(ym(1));

xhat(:,1) = [SOChat0; zeros(Nd,1)];

P(:,:,1) = diag([1e2, 1e-4*ones(1, Nd)]);

%更新時間

for k=2:N

[xhat(:,k),P(:,:,k)] =...

ekf(@(x) f_dt(x, um(k-1)), @x h(x, um(k), th0),...

@(x) Ad, C, Q, R, ym(k), xhat(:,k-1), P(:,:,k-1));

end

%表示結(jié)果

figure, plot_SOC(t, xhat(1,:), squeeze(P(1,1,:))',SOC);

EKF_RMSE = sqrt(mean((xhat(1,:) - SOC).^2,2));

%%安時積分法

SOC_cc = zeros(1, N);

SOC_cc(1) =SOChat(0);

for k=1:N-1

SOC_cc(k+1) = SOC_cc(k) + um(k)*Ts/FCC*100;

end

%表示結(jié)果

figure, plot_SOC(t, SOC_cc, [ ], SOC);

CC_RMSE = sqrt(mean((SOC_cc - SOC).^2,2));

上述euler的離散時間的狀態(tài)方程式變化方法為:

[c2d_euler.m]

function fd = c2d_euler(fc, h)

fuction x_new = fproto(x, u)

    x_new = x + h*fc(x, u);

end

fd = @fproto;

end

SOC推算結(jié)果的表示

[plot_SOC.m]

function [ ] = plot_SOC(t, SOChat, P, SOC)

subplot(2,1,1), hold on

plot(t/60, SOC, 'r', 'LineWidth', 2)

plot(t/60, SOChat, 'b', 'LineWidth', 0.5)

xlim([0 t(end)/60]), ylim([0 100]);

xlabel('Time [min]'), ylabel('SOC [%]')

legend('True', 'Estimated', 'Location', 'Best')

box on



subplot(2,1,2), hold on

if ~isempty(P)

    hold on

    patch([t, fliplr(t)]/60,...

        [(SOChat-SOC-2*sqrt(P)), fliplr(SOChat-SOC+2*sqrt(P))],...

        ' ','FaceColor', [0.5, 0.5, 1], 'FaceAlpha', 0.5,...

        'EdgeAlpha', 0)

end

plot(t/60, SOChat-SOC, 'b')

plot([0 t(end)/60], [0 0], 'r', 'LineWidth', 2)

xlabel('Time [min]'), ylabel('Error [SOC%]')

xlim([0 t(end)/60]), ylim([-5 3]);

box on

end

上述為線性卡爾曼濾波的推算方法,非線性卡爾曼濾波的matlab建模方式基本相同,這里就不做介紹了。另外,本文是以EV為對象所建模,以HEV為對象時,由于電流波形的差異,推定的結(jié)果會有變故。HEV的剎車回生充電,內(nèi)燃機回生充電,SOC都是在50%附近控制,所以對于輸入的電流波形,不會有低頻率的成分。

對于實際使用電池的系統(tǒng)來說,有著電池組內(nèi)的誤差,生產(chǎn)誤差,環(huán)境溫度誤差等各項影響因素,所以未來我們使用模型推算電池狀態(tài)時,不僅要考慮到這些誤差因素的影響,更要考慮到鋰電池材料進化的影響。未必復(fù)雜的算法適用于每個產(chǎn)品,我們需要根據(jù)實際的條件以及性價比等各種綜合因素來挑選推算的方法,希望讀者朋友們互相切磋,共同進步。

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

    關(guān)注

    1

    文章

    586

    瀏覽量

    34759
  • MATLAB仿真
    +關(guān)注

    關(guān)注

    4

    文章

    175

    瀏覽量

    19844
  • 卡爾曼濾波
    +關(guān)注

    關(guān)注

    3

    文章

    162

    瀏覽量

    24585
  • 電池系統(tǒng)
    +關(guān)注

    關(guān)注

    9

    文章

    376

    瀏覽量

    29851
收藏 人收藏

    評論

    相關(guān)推薦

    卡爾濾波的原理說明

    機器人導(dǎo)航,控制,傳感器數(shù)據(jù)融合甚至在軍事方面的雷達(dá)系統(tǒng)以及導(dǎo)彈追蹤等等。近年來更被應(yīng)用于計算機圖像處理,例如頭臉識別,圖像分割,圖像邊緣檢測等等。2.卡爾濾波器的介紹(Introd
    發(fā)表于 09-21 11:41

    電池SOC

    電池SOC對于電池組目前電量計實現(xiàn)方法主要有TI的阻抗跟蹤、電流積分的庫倫計、卡
    發(fā)表于 08-26 10:59

    soc計算方法

    soc計算方法,BMSSOC計算其實可以分為三大部分:1、電芯層級的SOC
    發(fā)表于 07-27 06:13

    電池SOC的自適應(yīng)平方根無極卡爾濾波計算

    電池SOC的自適應(yīng)平方根無極卡爾濾波計算法,下來看看
    發(fā)表于 01-13 13:26 ?19次下載

    基于卡爾濾波的動力電池SOC精確估計

    基于卡爾濾波的動力電池SOC精確估計
    發(fā)表于 01-13 13:28 ?33次下載

    卡爾濾波算法在鋰電池SOC估算的應(yīng)用

    卡爾濾波算法在鋰電池SOC估算的應(yīng)用
    發(fā)表于 01-13 13:50 ?17次下載

    基于自適應(yīng)卡爾濾波的礦用救生艙動力電池SOC估計_于微波

    基于自適應(yīng)卡爾濾波的礦用救生艙動力電池SOC估計_于微波
    發(fā)表于 12-31 14:44 ?7次下載

    電池SOC的自適應(yīng)平方根無極卡爾濾波計算

    電池SOC的自適應(yīng)平方根無極卡爾濾波計算法_胡志坤
    發(fā)表于 01-07 17:16 ?3次下載

    球面單形—徑向容積求積分卡爾濾波算法

    為了進一步提高非線性卡爾濾波算法的估計精度,提出一種高階球面單形一徑向容積求積分卡爾
    發(fā)表于 01-15 16:58 ?1次下載

    如何在單片機上實現(xiàn)卡爾濾波詳細(xì)計算方法和程序概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何在單片機上實現(xiàn)卡爾濾波詳細(xì)計算方法和程序概述。
    的頭像 發(fā)表于 08-11 11:23 ?1.3w次閱讀
    如何在單片機上實現(xiàn)<b class='flag-5'>卡爾</b><b class='flag-5'>曼</b><b class='flag-5'>濾波</b>詳細(xì)<b class='flag-5'>計算方法</b>和程序概述

    電池SOC 估算方法卡爾濾波器法

    本期主要介紹的是電池SOC 估算方法的第三種方法的剩余部分
    的頭像 發(fā)表于 09-21 15:51 ?1.3w次閱讀
    <b class='flag-5'>電池</b><b class='flag-5'>SOC</b> <b class='flag-5'>估算</b><b class='flag-5'>方法</b><b class='flag-5'>中</b><b class='flag-5'>卡爾</b><b class='flag-5'>曼</b><b class='flag-5'>濾波</b>器法

    基于擴展卡爾濾波SOC估算仿真

    基于擴展卡爾濾波SOC估算Simulink仿真,內(nèi)容完整,模型可仿真,代碼可實現(xiàn)
    發(fā)表于 08-25 15:22 ?14次下載

    淺析卡爾濾波

    在 飛行器姿態(tài)計算 ,卡爾濾波是最常用的姿態(tài)計算方法之一。今天就以目前的理解講以下
    的頭像 發(fā)表于 06-14 10:44 ?1844次閱讀

    基于自適應(yīng)卡爾濾波算法的電池SOC估算研究

    本文采用自適應(yīng)卡爾濾波算法,基于Thevenin/RC電池模型,鋰離子電池SOC進行
    的頭像 發(fā)表于 06-28 11:45 ?2951次閱讀
    基于自適應(yīng)<b class='flag-5'>卡爾</b><b class='flag-5'>曼</b><b class='flag-5'>濾波</b>算法的<b class='flag-5'>電池</b><b class='flag-5'>SOC</b><b class='flag-5'>估算</b>研究

    卡爾濾波的數(shù)學(xué)基礎(chǔ)

    卡爾濾波是一種用于估算線性動態(tài)系統(tǒng)狀態(tài)的優(yōu)化算法,其基礎(chǔ)數(shù)學(xué)理論為貝葉斯定理,將傳感器測量值和系統(tǒng)模型的預(yù)測值進行融合,得到對系統(tǒng)狀態(tài)的估計。貝葉斯定理是基于條件概率的公式,用于
    的頭像 發(fā)表于 08-30 10:18 ?760次閱讀
    <b class='flag-5'>卡爾</b><b class='flag-5'>曼</b><b class='flag-5'>濾波</b>的數(shù)學(xué)基礎(chǔ)