同样标着 3000 mAh,两块电池可能能量不同、带不动同样的负载,也不能共用充电参数。电池不是一个固定电压源:化学体系决定工作窗口,结构和材料影响功率能力,温度与老化改变当下可用容量,保护电路只负责其中一部分边界。
| 查阅问题 | 对应内容 | 最容易混淆的量 |
| Li-Po、LFP 和 18650 是什么关系 | 分类与规格 | 化学体系、封装、尺寸 |
| 3000 mAh 能运行多久 | 电荷、能量与倍率 | Ah、Wh、W |
| 为什么还有电却突然关机 | 负载压降 | 开路电压、带载电压与截止条件 |
| 电量百分比为什么会跳 | SOC 估算 | 测量值与模型估计 |
| 串并联后能力如何变化 | 电池包算例 | 电压、容量、内阻与最弱电芯 |
| 循环千次是否一定耐用 | 老化与测试条件 | 循环次数、吞吐量与容量保持率 |
先拆开三个分类维度
Li-ion 是锂离子电池家族,不等于钴酸锂。 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”通常是六单体串联;浮充与循环充电设置不同 |
| 一次电池,如普通碱性电池 | 依体系而定 | 不能因外形匹配便当作可充电电池 |
表中标称电压用于分类,不是充电设定表。镍氢充电器会按设计结合电压变化、温度和时间等条件判断终止;铅酸的浮充电压也不是一个通用的“满电开路电压”。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 是足够静置后趋近的开路电压;欧姆压降几乎立即响应电流,极化则有随时间建立与恢复的过程。实际电芯还存在滞回,不能把一个静态电阻模型当作完整化学模型。
假设某时刻 OCV 为 3.6 V,短时等效电阻为 80 mΩ,负载从很小变成 5 A,仅 I×R 就会造成约 0.4 V 压降;再计连接电阻和极化,端电压可能触及系统欠压阈值。撤去负载后的回升说明压降减小,不意味着 SOC 自动增加。
因此“低电量关机”可能受能量耗尽、功率不足或保护动作支配。观察静置电压、带载最低电压、温度与电流变化,才能区分原因。ΔV/ΔI 估算内阻时,应记录脉冲长度及采样时刻;毫秒与秒级结果包含的极化成分不同,也不能不加条件地与 1 kHz 交流内阻比较。
卸载后电压回升,电量也回来了吗?
把光标从15 s前拖到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随SOC变化。","scopeLabel":"模型范围与约定","time":"观察时刻(s)","voltage":"端电压(V)"}}
SOC 是估计状态,不是电压表的另一种刻度
SOC 通常表示剩余电荷相对当前所用满充容量基准的比例;厂商显示的百分比还可能包含保留区和平滑策略。标称 3.7 V 不表示“剩余 37%”,4.0 V 也不是所有锂离子电池统一的 80%。充放电方向、负载、静置时间、温度和老化都会影响映射,LFP 的平坦平台让中段微小电压误差更难换成可靠百分比。
库仑计按电流积分更新电量。若约定放电为正,用小时和安培计算,Q剩余(t) = Q初始 − ∫I dt;但初始状态、充电效率、漏测电流和容量基准都会带来误差。例如 1 mA 的恒定偏置一天累计 24 mAh,对 3 Ah 电池就是 0.8 个百分点,不能无限积分而不校正。
实用电量计把电流积分与电压、温度、化学模型和容量学习结合。配置错误的电芯模型,可能在电压测量准确时仍报告错误 SOC;电量计也不能代替硬件过充、过放保护。TI BQ27Z561-R1:电流、电压、温度测量与阻抗跟踪电量计
串并联:先算理想模型,再看限制项
四节一致的 3.6 V、3 Ah 电芯,先两两并联,再把两组串联,得到 2S2P:标称 7.2 V、6 Ah,总能量 43.2 Wh。若每节等效内阻为 30 mΩ,忽略导线和保护器件,每并联组 15 mΩ,两组串联仍为 30 mΩ。整包输出 10 A 时,每节理想分担 5 A,整包压降 0.3 V,内部损耗 3 W。这是拓扑计算,不是允许输出 10 A 的选型结论。
| 连接关系 | 一致电芯的理想结果 | 现实限制 |
| S 节串联 | 电压相加,Ah 不相加 | 同一电流流经每串,最先到边界的串限制使用窗口 |
| P 节并联 | 电压相同,Ah 相加 | 分流受内阻、连接阻抗、温度和状态影响 |
| S 串 P 并 | 能量约为单节能量 × S × P | 需同时满足逐串、电流、热和故障保护约束 |
串联总压正常不代表每串正常。例如某种两串系统测到 8.4 V,仍可能是 4.3 V + 4.1 V,不能仅凭总压判定没有单串越界。均衡可减小状态差异,却不能修复容量衰退或允许某串超过其规格;不同系统的均衡启动区间与方式也不同。
并联让端电压趋同,不保证 SOC、健康状态或电流立即相同。若两个源相差 0.2 V、连接回路总电阻 40 mΩ,初始均衡电流的简化估计就是 5 A;因此不存在脱离回路阻抗的“只要差小于 0.1 V 就安全”规则。这些模型用于读懂电池包设计,实际配组还需制造商规定的匹配、连接、绝缘和故障隔离方案。
寿命要同时看日历老化和循环老化
电池即使不循环,也会随时间发生副反应;温度和存储状态影响日历老化。循环则叠加电极应力、界面变化等影响,结果依化学体系、SOC 窗口、电流和温度而变。不能把某组实验中的“一年损失 20%”写成所有电池规律,也不能给高温、快充、深放电排列永远成立的伤害名次。
读“循环 2000 次”至少需要知道一次循环的定义、放电深度、充放电倍率、温度以及结束标准。按初始额定容量统计放电吞吐量时,两次各放出 50% 额定容量约为一个等效完整循环(EFC);这只归一化吞吐量,不意味着它与一次深度循环具有相同老化结果。
容量保持率也不是全部 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('能量、内阻、压降、均衡电流与积分偏置计算通过')
算例仅验证模型与单位,没有对实物电芯进行充放电、组装或寿命测试。
继续查阅