Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

meanDifferenceModel

直列接続リチウムイオン バッテリー パックの最も劣化したセルを特定

R2022b 以降

説明

meanDifferenceModel(data) は、直列接続リチウムイオン バッテリー パック内の各セルの開回路電圧 (OCV) の一貫性を解析し、その結果をプロットします。再帰的最小二乗 (RLS) アルゴリズムを平均差モデル (MDM) と組み合わせて、各セルの OCV のパックの平均 OCV からの偏差が推定されます[1]。負方向の偏差が大きいほど、バッテリー パックに内部短絡回路などの故障状態がある可能性が高くなります。偏差が最も大きいセルがパック内の "最悪のセル" としてプロットの凡例で識別されます。

アルゴリズムで data を収集する際、バッテリーの活動には何の制限も課されません。バッテリーの動作シーケンスは、充電相、放電相、待機相など、いずれの段階でもかまいません。

meanDifferenceModel(data,Name=Value) は、1 つ以上の名前と値の引数で指定された追加のオプションを組み込みます。たとえば、インデックス 10 の列にパックの電流の値が格納されていることを指定するには、引数 CurrentVariable10 に設定します。

[worstcell,deltae,deltar0] = meanDifferenceModel(___) は、最悪のセルのインデックス worstcell、セルの電圧の平均 OCV からの偏差 deltae、および内部抵抗の平均 R0 値からの偏差 deltar0 を返します。この構文は、前述の任意の入力引数の組み合わせで使用できます。

すべて折りたたむ

8 セルのバッテリー パックの動作プロファイルを表すデータを読み込みます。そのうちの 1 つのセルで内部短絡回路が発生しています。プロファイルには待機相、駆動相、充電相、および平衡相が含まれます。データは、サンプル時間 (列 1)、バッテリーの電圧 (列 2 ~ 9)、およびパックの電流 (列 10) が格納された 10 個の列で構成されます。

load internalShortCircuit.mat internalShortCircuit

バッテリーの電圧とパックの電流を一緒にプロットします。

plot(internalShortCircuit(:,2:9))
hold on
plot(internalShortCircuit(:,10))
legend('Voltages (V)','Current (A)')
title('internalShortCircuit Datasets - Voltages and Pack Current')
ylabel('Voltage (V) and Current (A) Values')
hold off

Figure contains an axes object. The axes object with title internalShortCircuit Datasets - Voltages and Pack Current, ylabel Voltage (V) and Current (A) Values contains 9 objects of type line. These objects represent Voltages (V), Current (A).

電圧は密接に追従しているように見えますが、このスケールではそれぞれを区別するのは困難です。

それぞれの電圧がより明確に見えるように "t" = 4000 以降の領域にズームインします。

xlim([4000 4010])
ylim([3.4 3.6])
title('Voltage Separation')
ylabel('Voltages (V)')

Figure contains an axes object. The axes object with title Voltage Separation, ylabel Voltages (V) contains 9 objects of type line. These objects represent Voltages (V), Current (A).

電圧は互いに密接に追従しています。他のセルと比べて明らかに劣化しているセルはありません。

meanDifferenceModel を使用して最悪のセルを特定します。

meanDifferenceModel(internalShortCircuit(:,2:end))

Figure contains an axes object. The axes object with title Estimated OCV Deviation from Mean, xlabel Time, ylabel deltaE contains 8 objects of type line. These objects represent 1, 2, 3, 4, 5 (worst cell), 6, 7, 8.

平均差モデルでセル 5 が明らかに異なっています。

table に格納されたデータを読み込み、最初の 2 行を表示します。

load internalShortCircuitTbl.mat internalShortCircuitTbl
head(internalShortCircuitTbl,2)
    Time    Cell1     Cell2     Cell3    Cell4     Cell5     Cell6     Cell7     Cell8    Current
    ____    ______    ______    _____    ______    ______    ______    ______    _____    _______

     0           0         0        0         0         0         0         0        0       0   
     5      4.0037    4.0018    4.002    4.0012    4.0029    4.0012    4.0042    4.002       0   
data = internalShortCircuitTbl;

meanDifferenceModel を使用し、時間変数と電流変数を指定して最悪のセルを特定します。Time を使用して時間変数を指定します。CurrentVariable を使用して電流変数を指定します。

meanDifferenceModel(data(:,2:end),Time=data.Time,CurrentVariable="Current")

Figure contains an axes object. The axes object with title Estimated OCV Deviation from Mean, xlabel Time, ylabel deltaE contains 8 objects of type line. These objects represent Cell1, Cell2, Cell3, Cell4, Cell5 (worst cell), Cell6, Cell7, Cell8.

最悪のセルがプロットで識別されます。

table に格納されたデータを読み込みます。

load internalShortCircuitTbl.mat internalShortCircuitTbl
data = internalShortCircuitTbl;

解析結果を格納する出力引数を使用して meanDifferenceModel を実行します。

[worstcell,deltae,deltar0] = meanDifferenceModel(data(:,2:end),Time=data.Time,CurrentVariable="Current");

最悪のセルを特定します。

iwc = worstcell
iwc = 5

推定される内部抵抗の偏差をプロットします。

time = data.Time;
plot(data.Time,deltar0.Variables)
title('Estimated Internal Resistance Deviation from Mean')
legend("Cell 1","Cell 2","Cell 3","Cell 4","Cell 5","Cell 6","Cell 7","Cell 8")
ylabel('deltaR0')

Figure contains an axes object. The axes object with title Estimated Internal Resistance Deviation from Mean, ylabel deltaR0 contains 8 objects of type line. These objects represent Cell 1, Cell 2, Cell 3, Cell 4, Cell 5, Cell 6, Cell 7, Cell 8.

関数で最悪のセルとして識別されたセル 5 で、内部抵抗の偏差が最も大きくなっています。

入力引数

すべて折りたたむ

バッテリー セルの電圧とパックの電流のデータ。ns 個の行と nc+1 個の列または変数を含む tabletimetable、または行列として指定します。ここで、ns はサンプルの数、nc はバッテリー セルの数です。既定では、最後の列がパックの電流として解釈されます。名前と値の引数 'CurrentVariable' を使用して別の列をパックの電流に指定できます。

測定データに時間についての明示的な列も含まれている場合は、meanDifferenceModel を呼び出すときに、その列を引数 data から除外する必要があります。ただし、プロットするときは、名前と値の引数 'Time' を使用して時間データにアクセスできます。

例: meanDifferenceModel(data(:,2:end),Time=data(:,1)) は、行列または table data の電圧と電流のデータを使用して OCV の偏差とパックの電流を解析し、その結果を最初の列の時間データに対してプロットします。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペア自体は順不同で構いません。

例: meanValueModel(data,CurrentVariable="Current") は、table または timetable の "Current" という名前の変数をパックの電流の変数として識別します。

プロットに使用する時間データ。長さ ns の数値ベクトル、duration ベクトル、または datetime ベクトルとして指定します。ここで、ns は data のサンプル数です。'Time' は、data に使用するデータセット内の列にすることも、別個のベクトルにすることもできます。

datatimetable の場合、data 内の時間情報が優先され、'Time' の指定は無視されます。

data が table または行列で、'Time' が指定されていない場合、関数は結果をインデックス ベクトル [1:ns] に対してプロットします。

例: meanDifferenceModel(data,Time=tv) は、data と行数は同じですが data とは別の時間ベクトル tv を指定します。

パックの電流のデータの変数名または列インデックスを示すパックの電流の列の識別子。string、文字ベクトル、または整数として指定します。

  • data が timetable または table の場合、'CurrentVariable' は string、文字ベクトル、または整数にすることができます。

  • data が行列の場合、'CurrentVariable' は整数でなければなりません。

例: meanValueModel(data,CurrentVariable=10) は、インデックス 10 の列をパックの電流のデータとして識別します。

RLS (再帰的最小二乗) の推定の忘却係数。範囲 (0,1] の数値スカラーとして指定します。'ForgettingFactor' の値により、パラメーターの推定に対して過去の測定がどの程度有意であるかが決まります。値 1 は "忘却なし" に対応し、つまり過去のすべての測定の値が保持されます。詳細については、recursiveLS の引数 ForgettingFactor の説明を参照してください。

例: meanValueModel(data,ForgettingFactor=0.995) は、忘却係数を 0.995 に設定します。

出力引数

すべて折りたたむ

最悪のセルのインデックス。平均 OCV からの負方向の OCV の偏差が最も大きいセルの電圧が格納された data の列に対応する整数として返されます。

平均 OCV からの推定される OCV の偏差。table、timetable、または行列として返されます。deltae のデータ型は data のデータ型と一致します。

平均内部抵抗 R0 からの推定される内部抵抗の偏差。table、timetable、または行列として返されます。deltar0 のデータ型は data のデータ型と一致します。

参照

[1] Ouyang, Minggao, Mingxuan Zhang, Xuning Feng, Languang Lu, Jianqiu Li, Xiangming He, and Yuejiu Zheng. “Internal Short Circuit Detection for Battery Pack Using Equivalent Parameter and Consistency Method.” Journal of Power Sources 294 (October 2015): 272–83. https://doi.org/10.1016/j.jpowsour.2015.06.087.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2022b で導入