› BMS SOC 推定シミュレーター 戻る
BMS・SOC 推定

BMS SOC 推定 — クーロン計数・拡張カルマン

電動車や蓄電池のバッテリーマネジメント(BMS)が、なぜ「クーロン計数だけでは残量がズレる」のかを実時間で体験できるツールです。電流センサ誤差・劣化年数・セル温度を変えながら、EKF(拡張カルマンフィルタ)や OCV 法を切り替えて、ドリフトをどこまで抑えられるかを確かめられます。

パラメータ設定
アルゴリズム
SOC 推定の方法。係数 1.0 / 0.1 / 0.3 / 0.05 でドリフトを補正
公称容量
Ah
初期 SOC
%
負荷電流
A
正=放電、負=充電
電流センサ誤差
mA
劣化年数
使用年数による容量保持率(新品=100%/8年=70%)
セル温度
°C
経過時間
hr
計算結果
—
実効容量 (Ah)
—
積算電荷 (Ah)
—
SOC 変化 (%)
—
新 SOC (%)
—
推定誤差 (%)
—
残容量 (Ah)
—
電池パック模式図 — SOC ゲージ・電流方向

セル群と SOC ゲージ、電流の向き、端子電圧の測定ポイントを可視化します。色は SOC の高さ(緑→橙→赤)です。

SOC 推定誤差 vs 時間(アルゴリズム別)
アルゴリズム別ドリフト比較(現在条件)
理論・主要公式

$$\mathrm{SOC}(t)=\mathrm{SOC}_0-\frac{\int_0^{t} I(\tau)\,d\tau}{C_\text{eff}}\times 100$$

クーロン計数法。I:電流 (A)、C_eff:実効容量 (Ah)、SOC_0:初期 SOC (%)。

$$C_\text{eff}=C_\text{nom}\cdot \eta_\text{age}\cdot \eta_\text{temp}$$

実効容量。年数係数 η_age(新品=1.0、5年=0.85、8年=0.70)と温度係数 η_temp(<0°C=0.7、>40°C=0.95、それ以外=1.0)を掛ける。

$$\varepsilon_\text{drift}=\frac{\Delta I\cdot \Delta t}{C_\text{eff}}\times 100\times 5\cdot k_\text{algo}$$

推定誤差。ΔI:電流センサ誤差 (A)、Δt:経過時間 (hr)、k_algo:アルゴリズム係数(coulomb=1.0、EKF=0.1、OCV=0.3、ハイブリッド=0.05)。

BMS SOC 推定シミュレーターとは

🙋
EVのメーター、「あと残り○○km」ってどうやって出してるんですか?電池に「残量センサ」とか入ってるイメージなんですが。
🎓
残念ながら「残量センサ」は存在しないんだ。直接測れるのは端子電圧と、流れ込む/流れ出る電流の2つだけ。一番素直な方法は「出ていった電流を時間で積分して、その分だけ残量を減らす」というもので、これをクーロン計数(Coulomb Counting)と言うよ。式で書くと SOC(t) = SOC0 − ∫I dt / C × 100。シンプルでしょ?
🙋
それで十分じゃないですか?電流計を高精度にすれば良さそう。
🎓
そう思うよね。でも積分っていうのが曲者で、たとえセンサ誤差が 50mA という超優秀な値でも、4時間積分すれば 0.2Ah の電荷誤差が積み上がる。75Ah のセルなら SOC で 0.27% ズレるだけだけど、これが1日、1週間、と続くと「メーターでは20%残ってるのに突然シャットダウン」みたいな事故が起きる。だから実機の BMS は OCV(開回路電圧)や EKF(拡張カルマンフィルタ)で定期的に補正をかけるのが大前提なんだ。
🙋
左の「アルゴリズム」を EKF に切り替えると、推定誤差がガクッと小さくなりますね。EKFって何をやってるんですか?
🎓
超ざっくり言うと「クーロン計数の予測」と「端子電圧から OCV-SOC テーブルで逆算した観測」を、それぞれの不確かさで重み付けして融合してるんだ。クーロン計数が信用できないときは観測を重視し、観測ノイズが大きいときは予測を重視する。電流センサのバイアス誤差自体も状態変数として学習するので、時間が経つほどドリフトが押さえ込まれる。本ツールではこの効果を「アルゴリズム係数 0.1」と簡略化して、純クーロン計数の 1/10 まで誤差が落ちる様子を見せているよ。
🙋
劣化年数を「8年」にすると実効容量が 52.5Ah まで落ちました。これも BMS で見ているんですか?
🎓
そう、SOH(State of Health)と呼ばれる別の指標として常時推定してる。SOH が落ちると、たとえ SOC が 100% を指していても、実際に取り出せる kWh は新品の 70% しかない。だから EV のレンジ表示は SOC × SOH × 公称エネルギーで計算する必要があるんだ。低温時の容量も同じで、本ツールでは 0°C 未満で実効容量が 0.7 倍に落ちる簡易モデルにしている。冬の EV が「100% 充電したのに航続が 60% しか出ない」のはこのためだよ。
🙋
なるほど!じゃあ実機の BMS は、SOC・SOH・温度補正を全部同時に走らせてるんですね。
🎓
そう、しかも 100ms くらいの周期で。EKF・OCV テーブル・温度補償・セル間バランシング・過電圧/過電流/過温度保護まで含めて、車載 BMS は実は「リアルタイム制御の塊」なんだ。本ツールはその中の「SOC 推定の核」だけを切り出した教育用モデルだと思ってね。

よくある質問

クーロン計数(Coulomb Counting)法は、電池に流れ込む/流れ出す電流 I を時間で積分し、その電荷量 Q=∫I dt を公称容量で割って SOC を推定する方法です。SOC(t)=SOC0 − ∫I dt / C × 100 で計算します。実装が単純で軽量ですが、電流センサのオフセット誤差が時間とともに積み上がり、長時間運用するほどドリフトが大きくなる弱点があります。実機の BMS では一定間隔で OCV 法や EKF とリセット・補正することが前提です。
EKF は、クーロン計数による予測値と、端子電圧 V から逆算した OCV-SOC 観測値の両方を、各々の不確かさで重み付けして融合します。電流センサのドリフトは「予測モデルの誤差」として時間とともに学習・補正されるため、純粋なクーロン計数より誤差を一桁以上小さくできます。本ツールではアルゴリズム係数として coulomb=1.0、EKF=0.1、OCV=0.3、ハイブリッド=0.05 をかけてドリフト抑制の実用差を可視化しています。
本ツールでは劣化補正を「新品=1.0、2年=0.95、5年=0.85、8年=0.70」、温度補正を「0°C未満=0.7、40°C超=0.95、それ以外=1.0」と簡易モデル化しています。例えば75Ah公称のセルでも、5年使用で実効63.75Ah、低温下ではさらに44.6Ah相当まで落ちます。SOC 推定がいくら正確でも、容量側の補正を入れないと「残り電池量(kWh)」を大きく見誤り、航続距離や運転時間の表示が現実とずれます。
電流誤差 ΔI が時間 Δt だけ続くと、積算電荷の誤差は ΔI·Δt になります。容量 75Ah のセルで ΔI=50mA、Δt=4hr のとき、誤差は 0.2Ah ≒ SOC で 0.27% です。本ツールではこれに「アルゴリズム係数」(EKF なら 0.1)と現実的な係数 5 を掛け、純粋クーロン計数のドリフト 1.3% を EKF で 0.13% まで抑えられる差を強調表示しています。実機ではセンサ精度が SOC 表示精度を直接決めるため、ホール素子なら 0.5% F.S.、シャント抵抗なら 0.1% F.S. クラスを選びます。

実世界での応用

EV(電気自動車)の航続距離表示:市販 EV の BMS は、毎秒数回のサンプリングでクーロン計数を走らせ、駐車時の安静電圧で OCV 法による絶対値補正を行い、走行中は EKF で連続的にドリフトを補正します。航続距離は SOC × SOH × 1km あたり消費エネルギー(過去履歴)で計算されるため、SOC 推定誤差 1% は数 km の航続予測誤差として直接ユーザー体験に響きます。

定置型蓄電池(家庭用・系統連系):家庭用蓄電池や系統連系の大型 ESS では、放電深度(DoD)の浪費を避けるため SOC 推定の精度がそのまま電池寿命に直結します。SOC 5% を見誤って毎日深放電させてしまうと、劣化が 1.5〜2 倍速くなる試算もあります。本ツールの「劣化年数」スライダーで実効容量が落ちる感覚をつかんでください。

ドローン・産業用ロボット:飛行中/作業中に「あと何分動けるか」を表示する用途では、軽量化のためにシャント抵抗ではなくホール素子電流センサ(精度 1〜2% F.S.)が多用されます。センサ誤差が大きい分、EKF やパーティクルフィルタによる補正が必須で、誤推定は墜落・停止という重大事故に直結します。

携帯機器・モバイルバッテリー:スマホやノート PC のバッテリーゲージも内部は同じ理屈です。長期間使うと「90% から急に 0% になる」現象は、クーロン計数の積算ドリフトが OCV 補正のタイミングと噛み合っていない症状。「満充電 → 完全放電」を一度行うと自動学習が走り、表示が改善するのはこのためです。

よくある誤解と注意点

まず最大の落とし穴が、「SOC = 端子電圧から一意に決まる」と思い込むことです。リチウムイオン電池の OCV-SOC カーブは中央域(SOC 20〜80%)で平坦で、わずか数 mV の電圧差で SOC が数 % 変わります。さらに電流が流れている動的状態では IR ドロップ・分極で端子電圧は OCV から数十〜数百 mV ずれるため、走行中の「電圧→SOC」直読は誤差 10〜20% にもなります。BMS が必ずクーロン計数を併用するのはこの理由です。

次に、「アルゴリズムさえ高度なら誤差はゼロにできる」という幻想。EKF は素晴らしいフィルタですが、内部の電池モデル(RC 等価回路や OCV テーブル)が間違っていたら、いくら高次の数学を回しても出力は正しくなりません。実機開発では電池メーカーから提供される OCV テーブル・内部抵抗マップ・温度依存特性を厳密にキャリブレーションする工程が、アルゴリズム本体より時間を食います。本ツールの「アルゴリズム係数 0.1」はあくまで理想 EKF のベストケースです。

最後に、「SOC と SOH を混同する」こと。SOC(State of Charge)は「いま残っている電荷量/実効容量 × 100%」、SOH(State of Health)は「実効容量/公称容量 × 100%」と全く別物です。SOC 100% でも SOH 70% なら、実際に使えるエネルギーは新品の 70% しかありません。本ツールの「劣化年数」スライダーは SOH を簡易に表現したもの。実機 BMS はインピーダンス測定や容量フェード履歴から SOH を別途推定し、SOC × SOH で「真の残量」を出力します。両者を分けて理解することが、BMS 設計の第一歩です。

使い方ガイド

  1. 公称容量(60~200 Ah)と初期SOC(0~100%)を入力します。リチウムイオン電池の場合、公称容量は製造元仕様書から確認してください
  2. 負荷電流(-100~+100 A、放電負、充電正)とセンサ誤差範囲(±5~20 mA)を設定します。実装するBMSの電流センサ精度に合わせて調整してください
  3. クーロン計数・OCV曲線法・拡張カルマンフィルタの3手法を自動計算し、ドリフト誤差の蓄積と修正後のSOC値をリアルタイム表示します

具体的な計算例

LiFePO4電池(公称容量100 Ah、初期SOC 80%)に対して、放電電流25 A が1時間続く場合:クーロン計数法では積算電荷25 Ah減少で新SOC 75%となりますが、電流センサ誤差±10 mAが累積すると±3.6%のドリフトが発生します。拡張カルマンフィルタを適用すると、OCVセンサ値(3.2 V)から推定状態を補正し、ドリフト誤差を±0.8%以下に低減します

実務での注意点

  1. 電流センサの零点ドリフトはバイアス誤差として毎月キャリブレーションが必須です。特に高温環境(50℃以上)では±20 mAの誤差が生じやすくなります
  2. 25℃基準のOCV曲線は温度補正が必要です。セル温度が10℃低下すると実効容量は3~5%減少するため、温度センサと併用してください
  3. 劣化電池(サイクル数2000回以上)ではOCV勾配が鈍化するため、ハイブリッド手法(EKF+インピーダンス補正)への移行を検討してください

🎬 動画で見る

化学が、電気を生む|電池の仕組みを物理で解説
化学が、電気を生む|電池の仕組みを物理で解説
電気力線|プラスから出てマイナスへ吸い込まれる #Shorts
電気力線|プラスから出てマイナスへ吸い込まれる #Shorts