同じ 3000 mAh と表示されていても、2つの電池はエネルギー量が異なり、同じ負荷を駆動できない場合があり、充電パラメータを共用することもできません。電池は固定電圧源ではありません:化学系が動作範囲を決定し、構造と材料が出力能力に影響し、温度と劣化が現在の利用可能容量を変化させ、保護回路はその一部の境界のみを担当します。
調べるべき問題 対応する内容 最も混同しやすい量
Li-Po、LFP、18650 の関係は? 分類と仕様 化学系、パッケージング、寸法
3000 mAh でどのくらい動作するか 電荷、エネルギー、レート Ah、Wh、W
残量があるのに突然シャットダウンするのはなぜか 負荷電圧降下 開放電圧、負荷電圧、カットオフ条件
残量パーセントが跳ねるのはなぜか SOC推定 測定値とモデル推定値
直並列接続後、能力はどのように変化するか 電池パックの例 電圧、容量、内部抵抗、最も弱いセル
1000回のサイクルで必ずしも耐久性があるとは限らないのはなぜか 劣化とテスト条件 サイクル数、スループット、容量保持率
3つの分類次元をまず分解する
Li-ion はリチウムイオン電池のファミリーであり、コバルト酸リチウム(LCO)を意味するものではありません。 LCO、NMC、LFP は異なる正極系を記述します。「Li-Po」は消費財製品において、ポリマー関連電解質またはソフトパック構造を採用したリチウムイオン電池を指すことが多く、これだけで正極組成、充電上限、放電レートを推測することはできません。円筒形、角型、ソフトパックはパッケージングの次元です:ソフトパックが自動的に最高エネルギー密度を意味するわけでも、製造や膨張の制約を受けずに形状が自由であるわけでもありません。
種類 理解しやすい典型セルの公称電圧 仕様書を読む際の重要な違い
一般的な LCO / NMC リチウムイオン 約 3.6~3.7 V 製品ごとの充電上限、カットオフ電圧は完全に一致しない
LFP リチウムイオン 約 3.2 V 充電ウィンドウが異なり、放電プラットフォームが平坦で、電圧から SOC を推定するのが困難
ニッケル水素 NiMH 約 1.2 V 充電終了はリチウムイオンの固定電圧戦略を適用できない
鉛酸 約 2 V 「12 V」は通常 6 セルの直列接続;浮充電圧とサイクル充電設定は異なる
一次電池(例:アルカリ電池) 系による 外形が一致しても、充電池として扱ってはならない
表の公称電圧は分類用であり、充電設定表ではありません。ニッケル水素充電器は、設計に基づき電圧変化、温度、時間などの条件を組み合わせて終了を判断します;鉛酸の浮充電圧も、万能な「満充電時の開放電圧」ではありません。Panasonic ニッケル水素技術ハンドブック 、Yuasa:VRLA 充電条件
18650、21700 などの名称は主に円筒形セルの寸法シリーズを示すものであり、容量、化学系、定格電流を保証するものではありません。保護基板、突起端子、外皮を追加すると実際の寸法が変化する可能性があります;平頭だからといって「保護なし」の確実な判断材料にはなりません。14500 と AA は外形が似ていますが、電圧は互換性がない場合があり、交換時には機器の仕様を必ず確認してください。
Ah は電荷、Wh で初めてエネルギーを比較できる
容量 Q は、規定の温度、電流、カットオフ条件下で取り出せる電荷であり、1 Ah = 3600 C です。エネルギーは放電過程に沿って積分する必要があります:E = ∫V(t)I(t)dt。公称電圧に Ah を掛けて Wh を得ることは実用的な近似であり、電圧が終始一定であることを主張するものではありません。
3.6 V、3 Ah のセルは約 10.8 Wh です。全体の動作区間での変換効率が約 90% と仮定し、システムの平均消費が 2 W の場合、エネルギー予算から 10.8 × 0.9 / 2 = 4.86 時間 となります。実際には、カットオフ時の残存エネルギー、待機消費電力、温度、負荷の変化も考慮する必要があります。3000 mAh を安定化後の 5 V 側の電流で直接除算すると、異なる電圧側の電荷を混同することになり、計算ミスにつながります。
レート C-rate は電流を定格容量で正規化したものです:3 Ah セルの 1C は 3 A、0.5C は 1.5 A です。これはデフォルトの許容値ではありません;充電上限、連続放電上限、短時間パルス上限は、それぞれ持続時間、温度、カットオフ、放熱条件を別々に確認する必要があります。放電曲線に特定のテスト電流が現れたからといって、任意の環境でその電流を長期間使用できるわけではありません。
定格容量は「規定条件下でどのくらいの電荷を取り出せるか」に答え、出力能力は「現在の状態で必要な電流を提供できるか」に答えます。これが、大容量モデルが必ずしもパルス大負荷に適さない理由を説明します:公称容量を使い切る前に、電圧降下や昇温の制限に達して動作不能になる可能性があります。
なぜ負荷接続時に電圧が下がり、シャットダウン後に回復するのか
放電端電圧を理解するための簡易モデルを使用します:V端 ≈ OCV(SOC, 温度) − I × Rオーム − V分極。OCV は十分静置後に近づく開放電圧です;オーム電圧降下は電流にほぼ即時応答し、分極には時間とともに形成され回復する過程があります。実際のセルにはヒステリシスも存在するため、静的な抵抗モデルを完全な化学モデルとして扱うことはできません。
電流 一定放電負荷 電圧 接続:瞬時電圧降下 + 緩慢な分極 除去:瞬時リバウンド + 緩慢な回復 負荷除去後の電圧回復は、電荷が自然に回復したことを意味しない 端電圧は SOC、温度、履歴状態によっても変化します;曲線は模式図のみで、汎用閾値は提供しません 短時間 ΔV / ΔI で推定した直流内部抵抗はサンプリング時刻に依存し、交流インピーダンスメータの読み値と直接同等では ありません。
ある時刻に OCV が 3.6 V、短時間等価抵抗が 80 mΩ で、負荷が非常に小さい状態から 5 A に変化したと仮定すると、I×R だけでも約 0.4 V の電圧降下が発生します;さらに接続抵抗と分極を考慮すると、端電圧はシステムの低電圧閾値に達する可能性があります。負荷を除去した後の回復は電圧降下が減少したことを示すだけで、SOC が自動的に増加したことを意味しません。
したがって、「低電力シャットダウン」は、エネルギー枯渇、出力不足、または保護動作によって支配される可能性があります。静置電圧、負荷時最低電圧、温度、電流の変化を観察して、原因を区別する必要があります。ΔV/ΔI で内部抵抗を推定する際は、パルス長とサンプリング時刻を記録する必要があります;ミリ秒単位と秒単位の結果に含まれる分極成分は異なり、条件なしで 1 kHz の交流内部抵抗と比較することはできません。
除荷後の電圧回復は電荷の回復?
15 sをまたぐと電流がゼロになりオーム降下が即消えるが、分極は残る。その後端子電圧は回復しても放出電荷は不変。電荷が補給されるのではなく電圧成分が変わる。
図を準備しています 再読み込み
除荷後の電圧回復は電荷の回復? 除荷でオーム降下が消え、その後分極が緩和する。電圧回復は放出電荷の復帰ではない。
{"id":"battery-voltage-relaxation","title":"除荷後の電圧回復は電荷の回復?","summary":"除荷でオーム降下が消え、その後分極が緩和する。電圧回復は放出電荷の復帰ではない。","height":1000,"html":"<h2 data-i18n=\"heading\"></h2><p class=\"intro\" data-i18n=\"intro\"></p><div class=\"control\"><label for=\"load\" data-i18n=\"load\"></label><output for=\"load\" id=\"load-value\"></output><input id=\"load\" type=\"range\" min=\"0\" max=\"5\" value=\"2\" step=\"0.1\"></div><div class=\"control\"><label for=\"time\" data-i18n=\"time\"></label><output for=\"time\" id=\"time-value\"></output><input id=\"time\" type=\"range\" min=\"0\" max=\"30\" value=\"16\" step=\"0.1\"></div><div class=\"chart-wrap\"><div class=\"chart-label\" data-i18n=\"plot\"></div><svg id=\"plot\" class=\"curve\" viewBox=\"0 0 360 210\" role=\"img\" data-i18n-label=\"plot\"></svg></div><div class=\"metrics\"><div><span data-i18n=\"voltage\"></span><strong id=\"voltage\"></strong></div><div><span data-i18n=\"ohmic\"></span><strong id=\"ohmic\"></strong></div><div><span data-i18n=\"polar\"></span><strong id=\"polar\"></strong></div><div><span data-i18n=\"charge\"></span><strong id=\"charge\"></strong></div></div><p id=\"eq\" class=\"formula\"></p><details class=\"scope\"><summary data-i18n=\"scopeLabel\"></summary><p data-i18n=\"scope\"></p></details>","css":".intro{margin:8px 0 18px;color:var(--muted);font-size:14px}.caption,.hint{font-size:12px;color:var(--muted);margin-top:12px}.control{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 12px;align-items:center;margin:14px 0;font-size:13px}.control label{font-size:13px}.control output{color:var(--accent);min-width:5em;text-align:right;font-variant-numeric:tabular-nums}.control input{grid-column:1/-1;width:100%;margin:0}.presets{display:flex;gap:4px;align-items:stretch}.presets button{flex:1 1 0;min-width:0;overflow-wrap:anywhere;font-size:13px}.actions{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}.actions button{flex:1;min-width:0;font-size:13px;min-height:42px}.copy{display:grid;font-size:14px;margin:16px 0}.copy>*{grid-area:1/1;margin:0}.reserve{visibility:hidden}.scope{margin-top:14px;color:var(--muted);font-size:12px}.scope summary{padding:8px 0;cursor:pointer}.scope p{margin-top:10px}.two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:16px 0}.card{border:1px solid var(--rule);border-radius:9px;padding:14px;min-width:0}.card header{font-size:14px;font-weight:600;margin-bottom:10px}.card button{font-size:12px;width:100%;min-width:0}.card small{display:block;font-size:12px;color:var(--muted)}.card code{font-size:12px;overflow-wrap:anywhere}.metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:16px 0}.metrics>div{border-left:2px solid var(--accent);padding-left:10px;min-width:0}.metrics span{display:block;min-height:3.2em;color:var(--muted);font-size:12px}.metrics strong{font-size:23px;display:block;font-weight:550;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.formula{border-top:1px solid var(--rule);padding-top:12px;margin-top:14px;font-size:13px;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.value{font:550 20px ui-monospace,monospace}.legend{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:12px;color:var(--muted);margin:12px 0}.legend span:before{content:'';display:inline-block;width:8px;height:8px;border-radius:2px;background:var(--accent);margin-right:6px}.legend .second:before{background:var(--second)}.check{display:flex;align-items:center;gap:8px;font-size:13px;margin:12px 0}.check input{width:16px;height:16px;flex-shrink:0;accent-color:var(--accent)}select,input[type=text],input[type=number]{background:var(--paper);color:var(--ink);font:inherit;font-size:13px;padding:10px;border:1px solid var(--rule);border-radius:7px;max-width:100%;min-width:0}select{width:100%;min-height:42px}.band{height:20px;display:flex;background:var(--surface);border-radius:4px;overflow:hidden}.band i{height:100%;display:block;background:var(--accent);transition:width .25s}.band i.second{background:var(--second)}button:disabled{cursor:default}.status{font-size:13px;min-height:4.8em}.mono{font-family:ui-monospace,monospace;font-variant-numeric:tabular-nums}.muted{color:var(--muted)}\n@media(max-width:480px){.two{gap:8px}.card{padding:12px 9px}.actions button,.presets button{font-size:12px}.metrics strong{font-size:20px}.metrics{gap:8px}}\n@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;animation:none!important}}\n.track-row{margin:16px 0}.track-row>span{display:block;font-size:12px;color:var(--muted);margin-bottom:7px}.track{display:flex;gap:5px;min-width:0}.cell{flex:1;min-width:0;min-height:48px;border:1px solid var(--rule);border-radius:5px;background:var(--surface);display:flex;align-items:center;justify-content:center;text-align:center;padding:5px 3px;font-size:12px;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.cell.on{background:var(--accent-soft);border-color:var(--accent)}.cell.gold{background:var(--second-soft);border-color:var(--second)}.cell.empty{border-style:dashed;color:var(--muted)}.cell.error{border-color:var(--second);text-decoration:line-through}.choices{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin:14px 0}.choices button{min-width:0;padding:10px 4px;font-size:12px;overflow-wrap:anywhere}.choices button[aria-current=true]{border-color:var(--accent);background:var(--accent-soft)}.relation{display:grid;grid-template-columns:minmax(0,1fr) 28px minmax(0,1fr);align-items:center;gap:6px;margin:12px 0}.relation .cell{min-height:72px}.relation>i{text-align:center;font-style:normal;color:var(--accent)}.readout{font-size:13px;white-space:pre-line;min-height:6.4em;overflow-wrap:anywhere}.plot{position:relative;border-left:1px solid var(--rule);border-bottom:1px solid var(--rule);padding:8px 0;margin:18px 0}.plot-row{height:28px;position:relative;margin:4px 0;background:var(--surface)}.plot-row i{position:absolute;inset-block:5px;background:var(--accent);min-width:2px;transition:width .2s,left .2s}.plot-row b{position:relative;padding:4px 6px;font:11px/28px ui-monospace,monospace;background:var(--paper);border-radius:3px}.axis{display:flex;justify-content:space-between;font-size:11px;color:var(--muted)}\n\n/* Action labels must remain readable across locales and narrow embeds. */\n.actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}\n.actions button{overflow-wrap:anywhere;white-space:normal;min-height:58px;padding:8px}\nbutton{overflow-wrap:anywhere}\n@media(min-width:640px){.actions{grid-template-columns:repeat(3,minmax(0,1fr))}}\n\n.metrics span{overflow-wrap:anywhere}\n.panel{border:1px solid var(--rule);border-radius:9px;padding:12px;margin:14px 0;min-width:0}.panel h3{font-size:13px;margin:0 0 10px;color:var(--muted)}.source{font:13px/1.8 ui-monospace,monospace;white-space:pre-wrap;overflow-wrap:anywhere;margin:12px 0}.source mark{background:var(--accent-soft);color:var(--ink);border-bottom:2px solid var(--accent)}.source .fault{background:var(--second-soft);border-color:var(--second)}.diagram{display:block;width:100%;height:auto;max-height:320px;margin:14px 0;overflow:visible}.diagram text{fill:var(--ink);font:12px ui-monospace,monospace}.diagram .edge{stroke:var(--muted);stroke-width:1.5;fill:none}.diagram .edge.on{stroke:var(--accent);stroke-width:3}.diagram .node{fill:var(--surface);stroke:var(--rule);stroke-width:1.5}.diagram .node.on{fill:var(--accent-soft);stroke:var(--accent)}.diagram .node.gold{fill:var(--second-soft);stroke:var(--second)}.log{font:12px/1.8 ui-monospace,monospace;white-space:pre-line;overflow-wrap:anywhere;min-height:7.2em}.table{display:grid;gap:5px;margin:14px 0}.table .tr{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}.table .tr>*{padding:8px 5px;background:var(--surface);border-radius:4px;min-width:0;overflow-wrap:anywhere;font-size:12px}.table .tr .on{background:var(--accent-soft)}.table .tr .gold{background:var(--second-soft)}.choices button{min-height:44px}.metrics strong{min-height:1.6em}.code-line{display:block}.code-line.on{background:var(--accent-soft);border-left:2px solid var(--accent);padding-left:6px}.status-badge{font-size:12px;color:var(--accent)}.tile-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.tile-grid .cell{min-height:40px}.actions button{min-height:48px}.form-field{display:grid;gap:8px;margin:14px 0;font-size:13px}.form-field input{width:100%;font-family:ui-monospace,monospace}.metrics.three{grid-template-columns:repeat(3,minmax(0,1fr))}.formula{min-height:3.2em}.presets{flex-wrap:wrap}.presets button{flex-basis:25%;min-height:44px}\n\n.budget{display:flex;height:28px;margin:16px 0;background:var(--surface);border-radius:5px;overflow:hidden}.budget i{display:block;background:var(--accent);transition:width .2s}.budget i.gold{background:var(--second)}.intervals{margin:16px 0}.interval{position:relative;height:36px;background:var(--surface);margin:6px 0;border-radius:4px;overflow:hidden}.interval i{position:absolute;height:100%;background:var(--accent-soft);border-left:2px solid var(--accent)}.interval i.gold{background:var(--second-soft);border-color:var(--second)}.interval span{position:relative;z-index:1;font:12px/36px ui-monospace,monospace;padding-left:7px}.table .tr>*{min-height:4.8em}.formula{white-space:pre-line;min-height:7.2em}.actions:has(>button:only-child){grid-template-columns:1fr}.metrics strong{min-height:3.2em}.rangegrid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:3px;margin:14px 0}.rangegrid .cell{min-height:30px;padding:3px 1px;font-size:10px}.message{min-height:7.2em;white-space:pre-line;font:13px/1.8 ui-monospace,monospace;overflow-wrap:anywhere}\n/* Allow CJK hanging punctuation without overflowing a metric's border box. */\n.metrics>div{padding-right:4px}.metrics span{line-break:anywhere}\n\n.chart-wrap{margin:18px 0}.chart-label{font-size:12px;color:var(--muted);min-height:3.2em}.curve{display:block;width:100%;height:auto;max-height:320px;overflow:visible}.curve text{font:11px ui-monospace,monospace;fill:var(--muted)}.gridline{stroke:var(--rule);stroke-width:1}.metrics strong{font-size:20px;min-height:3.2em}.formula{font:12px/1.8 ui-monospace,monospace;min-height:9em}.readout{min-height:8em}.presets button{flex-basis:30%}.scope p{overflow-wrap:anywhere} .unit-note{font-size:12px;color:var(--muted);margin:10px 0}\n\n.metrics span{word-break:break-all;line-break:strict}.metrics>div{padding-right:6px}\n\n","js":"const $=s=>document.querySelector(s);const set=(id,v)=>$('#'+id).textContent=v;const t=k=>viz.t(k);function cells(id,values){$('#'+id).replaceChildren(...values.map(v=>{const e=document.createElement('div');e.className='cell '+(v.cls||'');e.textContent=v.text;e.title=v.title||v.text;return e;}));}function pressed(mode){document.querySelectorAll('[data-mode]').forEach(e=>e.setAttribute('aria-pressed',String(e.dataset.mode===mode)));}const esc=s=>String(s).replace(/[&<>\"']/g,c=>({'&':'&','<':'<','>':'>','\"':'"',\"'\":'''}[c]));const fmt=s=>'{'+[...s].sort().join(', ')+'}';function graph(id,nodes,edges){const el=$('#'+id);el.setAttribute('viewBox','0 0 360 200');el.innerHTML='<defs><marker id=\"arrow-'+id+'\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"5\" markerHeight=\"5\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"var(--muted)\"/></marker></defs>'+edges.map(e=>{const a=nodes[e[0]],b=nodes[e[1]],dx=b.x-a.x,dy=b.y-a.y,d=Math.hypot(dx,dy)||1;if(edges.some(r=>r[0]===e[1]&&r[1]===e[0])){const nx=-dy/d,ny=dx/d;return '<path class=\"edge '+(e[2]?'on':'')+'\" d=\"M '+(a.x+dx/d*22+nx*12)+' '+(a.y+dy/d*22+ny*12)+' Q '+((a.x+b.x)/2+nx*38)+' '+((a.y+b.y)/2+ny*38)+' '+(b.x-dx/d*25+nx*12)+' '+(b.y-dy/d*25+ny*12)+'\" marker-end=\"url(#arrow-'+id+')\"/>';}return '<line class=\"edge '+(e[2]?'on':'')+'\" x1=\"'+(a.x+dx/d*25)+'\" y1=\"'+(a.y+dy/d*25)+'\" x2=\"'+(b.x-dx/d*28)+'\" y2=\"'+(b.y-dy/d*28)+'\" marker-end=\"url(#arrow-'+id+')\"/>';}).join('')+nodes.map(n=>'<g><circle class=\"node '+(n.cls||'')+'\" cx=\"'+n.x+'\" cy=\"'+n.y+'\" r=\"25\"/><text x=\"'+n.x+'\" y=\"'+(n.y+4)+'\" text-anchor=\"middle\">'+esc(n.name)+'</text>'+(n.sub?'<text x=\"'+n.x+'\" y=\"'+(n.y+43)+'\" text-anchor=\"middle\">'+esc(n.sub)+'</text>':'')+'</g>').join('');}function table(id,rows){$('#'+id).classList.add('table');$('#'+id).replaceChildren(...rows.map(r=>{const row=document.createElement('div');row.className='tr';row.style.gridTemplateColumns='repeat('+r.length+',minmax(0,1fr))';r.forEach(x=>{const c=document.createElement('div');if(typeof x==='object'){c.textContent=x.text;c.className=x.cls||'';}else c.textContent=x;row.append(c)});return row;}));}function band(id,parts,total){$('#'+id).replaceChildren(...parts.map((p,i)=>{const e=document.createElement('i');e.style.width=(100*p.value/total)+'%';e.className=i%2?'gold':'on';e.title=p.name+': '+p.value;return e}));}function intervals(id,items,total){$('#'+id).replaceChildren(...items.map(p=>{const row=document.createElement('div');row.className='interval';const bar=document.createElement('i');bar.style.left=(100*p.start/total)+'%';bar.style.width=(100*(p.end-p.start)/total)+'%';bar.className=p.cls||'';const label=document.createElement('span');label.textContent=p.label;row.append(bar,label);return row;}));}function plot(id,series,xr,yr,opts={}){const e=$('#'+id),X=x=>42+(x-xr[0])/(xr[1]-xr[0])*298,Y=y=>175-(y-yr[0])/(yr[1]-yr[0])*148;let out='<defs><clipPath id=\"clip-'+id+'\"><rect x=\"42\" y=\"27\" width=\"298\" height=\"148\"/></clipPath></defs>';for(let i=0;i<3;i++){let x=xr[0]+i*(xr[1]-xr[0])/2,y=yr[0]+i*(yr[1]-yr[0])/2;out+='<path class=\"gridline\" d=\"M '+X(x)+' 27V175M42 '+Y(y)+'H340\"/><text x=\"'+X(x)+'\" y=\"194\" text-anchor=\"middle\">'+esc(opts.xfmt?opts.xfmt(x):Number(x.toFixed(2)))+'</text><text x=\"36\" y=\"'+(Y(y)+4)+'\" text-anchor=\"end\">'+esc(opts.yfmt?opts.yfmt(y):Number(y.toFixed(2)))+'</text>';}out+='<g clip-path=\"url(#clip-'+id+')\">';for(const s of series){out+='<path fill=\"none\" stroke=\"'+(s.color||'var(--accent)')+'\" stroke-width=\"2.5\" '+(s.dash?'stroke-dasharray=\"5 4\"':'')+' d=\"'+s.pts.map((p,i)=>(i?'L':'M')+X(p[0]).toFixed(2)+','+Y(p[1]).toFixed(2)).join(' ')+'\"/>';}for(const p of opts.points||[])out+='<circle cx=\"'+X(p[0])+'\" cy=\"'+Y(p[1])+'\" r=\"4\" fill=\"var(--second)\" stroke=\"var(--paper)\" stroke-width=\"1.5\"/>';if(opts.cursor!==undefined)out+='<path d=\"M'+X(opts.cursor)+' 27V175\" stroke=\"var(--muted)\" stroke-dasharray=\"3 3\"/>';e.innerHTML=out+'</g>';e.dataset.curves=JSON.stringify(series.map(s=>s.pts));}const curve=(fn,lo,hi,n=120)=>Array.from({length:n+1},(_,i)=>{const x=lo+(hi-lo)*i/n;return[x,fn(x)]});function inputs(draw){document.querySelectorAll('input,select').forEach(e=>{e.addEventListener('input',draw);e.addEventListener('change',draw)});draw()}const n=id=>+$('#'+id).value;const show=(id,v,d=3)=>set(id,Number(v.toFixed(d)));function draw(){let load=n('load'),time=n('time'),i=t=>t>=5&&t<15?load:0,p=t=>t<5?0:t<15?load*.05*(1-Math.exp(-(t-5)/5)):load*.05*(1-Math.exp(-2))*Math.exp(-(t-15)/5),v=t=>3.8-.03*i(t)-p(t),xs=[...new Set([...curve(x=>x,0,30,300).map(p=>p[0]),4.999999,14.999999])].sort((a,b)=>a-b);show('load-value',load);show('time-value',time);plot('plot',[{pts:xs.map(x=>[x,v(x)])},{pts:[[0,3.8],[30,3.8]],dash:true,color:'var(--second)'}],[0,30],[3.3,3.85],{cursor:time,points:[[time,v(time)]]});show('voltage',v(time),4);show('ohmic',30*i(time));show('polar',p(time)*1000);show('charge',load*Math.max(0,Math.min(10,time-5))/3.6,4);set('eq','Vterminal = OCV − IR0 − Vp\\ndVp/dt = (IR1 − Vp)/τ\\nI = '+i(time).toFixed(2)+' A; Vp = '+p(time).toFixed(4)+' V');}inputs(draw);","audio":false,"strings":{"charge":"放出済み電荷(mAh)","heading":"除荷後の電圧回復は電荷の回復?","intro":"負荷を変え、即時電圧降下と遅い分極回復を見る。","load":"放電電流(A)","ohmic":"オーム降下(mV)","plot":"横軸 s、縦軸 V、青:端子電圧、破線:OCV","polar":"分極降下(mV)","reset":"リセット","scope":"仮想等価回路:OCV=3.8 V固定、R0=30 mΩ、R1=50 mΩ、τ=5 s。5–15 sに定電流放電、短時間のOCV変化を省略。","scopeLabel":"モデルの範囲と前提","time":"観測時刻(s)","voltage":"端子電圧(V)"}}
SOC は推定状態であり、電圧計のもう一つの目盛りではない
SOC は通常、現在の満充電容量基準に対する残存電荷の割合を示します;メーカーが表示するパーセントには、リザーブ領域や平滑化戦略が含まれている可能性があります。公称 3.7 V が「残り 37%」を意味するわけでも、4.0 V がすべてのリチウムイオン電池で統一された 80% を意味するわけでもありません。充放電方向、負荷、静置時間、温度、劣化はすべてマッピングに影響し、LFP の平坦なプラットフォームは、中央部の微小な電圧誤差を信頼できるパーセントに変換することをより困難にします。
クーロンカウンターは電流積分によって電量を更新します。放電を正と仮定し、時間とアンペアで計算する場合、Q剩余(t) = Q初期 − ∫I dt となります;しかし、初期状態、充電効率、未検出電流、容量基準はすべて誤差をもたらします。例えば、1 mA の一定バイアスが 1 日累積すると 24 mAh となり、3 Ah バッテリーに対して 0.8 パーセントポイント となります。補正なしで無限に積分することはできません。
実用的なクーロンカウンターは、電流積分と電圧、温度、化学モデル、容量学習を組み合わせます。誤って設定されたセルモデルは、電圧測定が正確であっても誤った SOC を報告する可能性があります;クーロンカウンターはハードウェアの過充電、過放電保護に代わるものではありません。TI BQ27Z561-R1:電流、電圧、温度測定およびインピーダンス追跡クーロンカウンター
直並列:まず理想モデルを計算し、次に制限項目を見る
3.6 V · 3 Ah 仮定:各セル 30 mΩ 3.6 V · 3 Ah 仮定:各セル 30 mΩ 3.6 V · 3 Ah 仮定:各セル 30 mΩ 3.6 V · 3 Ah 仮定:各セル 30 mΩ − + 直列ノード 並列グループ:3.6 V · 6 Ah 全体パック:7.2 V · 6 Ah = 43.2 Wh 2S2P:各グループで2セルを並列接続し、その後2グループを直列接続 等価パラメータはセルが一致し、均等に電流が分流することを仮定しています;模式図には保護、ストリングごとのサン プリング、ヒューズ、接続抵抗は描かれていません。
一致した 3.6 V、3 Ah のセル 4 本を、まず 2 本ずつ並列接続し、その後 2 グループを直列接続すると、2S2P となり、定格 7.2 V、6 Ah、総エネルギー 43.2 Wh が得られます。各セルの等価内部抵抗が 30 mΩ で、導線と保護デバイスを無視すると、各並列グループは 15 mΩ となり、2 グループの直列接続でも 30 mΩ のままです。全体パックが 10 A を出力するとき、各セルは理想的に 5 A を分担し、全体パックの電圧降下は 0.3 V、内部損失は 3 W となります。これはトポロジー計算であり、10 A の出力を許可する選定結論ではありません。
接続関係 一致したセルの理想的な結果 現実の制限
S セル直列 電圧が加算されるが、Ah は加算されない 同一電流が各ストリングを流れるため、最も先に境界に達するストリングが使用範囲を制限する
P セル並列 電圧は同じで、Ah が加算される 電流分流は内部抵抗、接続インピーダンス、温度、状態の影響を受ける
S 直列 P 並列 エネルギーは単一セルのエネルギー × S × P に近い ストリングごと、電流、熱、故障保護の制約を同時に満たす必要がある
直列接続の総電圧が正常だからといって、各ストリングが正常であるわけではありません。例えば、ある 2 ストリングシステムで 8.4 V が測定された場合、それでも 4.3 V + 4.1 V である可能性があり、総電圧のみで単一ストリングの範囲外がないと判断することはできません。バランシングは状態の差異を縮小できますが、容量の衰退を修復することはできず、あるストリングがその仕様を超えることを許可するものではありません;異なるシステムのバランシング起動範囲と方法は異なります。
並列接続は端電圧を一致させますが、SOC、健康状態、または電流が直ちに同一であることを保証するものではありません。2つの電源が 0.2 V 異なり、接続ループの総抵抗が 40 mΩ の場合、初期均衡電流の簡易推定は 5 A となります;したがって、ループインピーダンスを離れて「差が 0.1 V 未満であれば安全」というルールは存在しません。これらのモデルは電池パック設計を理解するために使用されますが、実際のマッチングには、メーカーが規定するマッチング、接続、絶縁、故障隔離方式が必要です。
寿命はカレンダー劣化とサイクル劣化の両方を見る必要がある
電池はサイクルしなくても、時間とともに副反応が発生します;温度と保存状態はカレンダー劣化に影響します。サイクルは、電極応力、界面変化などの影響を重ね合わせ、結果は化学系、SOC ウィンドウ、電流、温度によって異なります。ある実験グループでの「1 年で 20% の損失」をすべての電池の法則として記述することはできず、高温、急速充電、深放電の永続的な害の順位を付けることもできません。
「2000 サイクル」と読む際には、少なくとも 1 サイクルの定義、放電深度、充放電レート、温度、終了基準を知る必要があります。初期定格容量に基づいて放電スループットを統計処理する場合、2 回の放電で定格容量の 50% をそれぞれ放電すると、約 1 回の等価完全サイクル(EFC)となります;これはスループットを正規化するだけで、1 回の深度サイクルと同じ劣化結果を意味するものではありません。
容量保持率は SOH のすべてではありません;内部抵抗の上昇は、まず高出力デバイスの起動を不可能にし、低消費電力デバイスがまだ長く使用できる可能性があります。製品間で比較する際は、容量、出力、温度、終了基準を同じ条件のセットで考慮する必要があります。充電温度制限は特にセル仕様に従って実行する必要があり、「低温放電が可能」という理由で「同様に低温充電も可能」と推論してはなりません。
セル、保護、デバイス戦略はそれぞれ何を担当するか
セルデータシートは許容範囲を規定します;充電器は日常の充電プロセスを調整します;保護デバイスは過電圧、低電圧、過電流などの異常を処理します;メインコントローラは温度と動作要件に基づいて戦略を策定します。裸のセルが必ずしも保護基板を備えているわけでもなく、保護基板があっても、完全な温度監視、バランシング、または電量推定を備えているわけではありません。保護動作閾値は通常の充電目標値ではありません。
LFP も大量のエネルギーを蓄えるリチウムイオン系であり、「ほとんど発火しない」と記述することはできません。明らかな膨張、異常な発熱、異臭、または損傷がある場合は、使用を停止し、メーカーまたは認定サービス担当者に連絡してください;煙や火災が発生した場合は、避難して消防に連絡してください。リチウムイオン電池の火災と金属リチウムの火災を混同してはなりません。NFPA リチウムイオン電池安全注意事項
エネルギーと直並列の帳目を再計算する
from math import isclose
v , ah , r = 3. 6 , 3. 0 , 0. 030
s , p = 2 , 2
pack_v , pack_ah , pack_r = s * v , p * ah , s * r / p
assert isclose ( pack_v * pack_ah , 43. 2 )
assert isclose ( pack_r , 0. 030 )
assert isclose ( 10 * pack_r , 0. 3 )
assert isclose ( 10 * * 2 * pack_r , 3. 0 )
assert isclose ( v * ah * 0. 9 / 2 , 4. 86 )
assert isclose ( 0. 001 * 24 / ah * 100 , 0. 8 )
assert isclose ( 0. 2 / 0. 040 , 5. 0 )
assert isclose ( 5 * 0. 080 , 0. 4 )
print ( ' エネルギー、内部抵抗、電圧降下、均衡電流、積分バイアス計算が通過' )
算例はモデルと単位を検証するだけで、実物のセルに対する充放電、組立、または寿命テストは行っていません。
引き続き参照