板子能正常上电,只说明它在某个工作点运行;保护设计还要回答接反、热插拔、短路和外部放电时,电流流向哪里、谁承受能量、何时断开。给每个连接器加一颗 TVS 并不能自动完成保护,关键是把故障源、器件动作和被保护对象的承受能力接起来。
| 异常 | 首要物理问题 | 常用措施及边界 |
| ESD / 快瞬态 | 快速电流使寄生电感产生高压 | 低电感钳位与返回路径,兼顾信号完整性 |
| 电源反接 | 错误极性的电流路径 | 串联二极管或受控 MOS,检查体二极管 |
| 持续短路 | 电源持续向故障点供能 | 保险丝、限流、关断与热设计配合 |
| 大电容热插拔 | 给电容充电的瞬时电流与通态管损耗 | 控制输出斜率/电流,核对 SOA |
| 持续过压 | 钳位器不能无限吸收能量 | 断开、受控钳位或 crowbar 与上游保护配合 |
ESD 额定值不是通用耐压
MOSFET 的栅源绝对最大电压、IC 的 HBM/CDM 器件级 ESD 等级和系统端口抗扰度测试描述不同应力。不能把“栅极可承受 20 V”和“芯片 HBM 2 kV”放在同一条电压尺上比较;脉冲源阻抗、电流波形、注入端口和测试环境都不同。器件级通过也不自动表示装机后接口通过系统测试。
TVS 正常时尽量不影响信号,过压时提供分流路径。选型先看最大正常电压是否落在反向工作电压 VRWM 范围内,再看规定脉冲电流下的钳位电压 VC、动态电阻、漏电、寄生电容及封装。击穿电压 VBR 是在特定测试电流下测得的转折指标,不是任意大电流下恒定不变的钳位值。
被保护引脚实际承受的电压,还包含走线与封装寄生项。简化地写成 V引脚 ≈ V钳位 + L·di/dt + I·R;例如 2 nH 路径遇到 5 A/ns 的电流变化,仅电感项就有 10 V。这解释了为何选了低钳位器件,布局仍可能使保护失败。
应在外部瞬态进入敏感区域前安排钳位,缩短分流支路与返回路径,避免长支线及与敏感信号共用高阻抗返回段。“靠近连接器”是实现这些目标的常用办法,不能替代完整回路分析,也不代表 TVS 离 IC 近就必然失效。TI ESD 布局指南
高速接口还要看保护件的电容、封装和通道特性对眼图的影响,不能用“USB 一律小于某个 pF”完成所有速率选型。电源端则必须覆盖实际最高协商电压和容差:不能把普通 5 V USB 与高压 PD 输入用同一颗固定电压 TVS 概括。
防反接先画体二极管,再讨论低损耗
串联二极管的方向容易验证,但导通损耗约为 I×VF。3 A、0.7 V 时是 2.1 W,需要相应散热与电压预算。整流桥可让两种输入极性都得到固定输出极性,导电路径通常经过两颗二极管,因此还要承受两份压降。
高边 PMOS 基本防反接拓扑中,D 接输入正端,S 接负载正端,G 经电阻拉向返回端。这个方向让体二极管在正常接入时从输入向输出提供启动路径,S 电位升高后 VGS 为负,通道导通并降低压降。把 S、D 反过来,体二极管会改变故障时能否阻断的结论。TI:PMOS 防反接端点说明
反接时,在负载侧没有其他供电且参考关系符合图示的条件下,体二极管阻断,栅源驱动不足以开启通道。若输出被 USB、调试口或备用电池抬高,这些条件就变了;单管导通后可以双向传导,不能把防反接称作完整的防回灌方案。需要双向关断时,可采用适当方向的背靠背 MOS 与对应控制器。
选管看实际 VGS 下有保证的 RDS(on),而不是仅看 VGS(th)。假设热态电阻为 30 mΩ,3 A 压降 90 mV、损耗 0.27 W;室温典型值不能直接当热态保证值。输入或瞬态过高还可能超过栅源耐压,需要栅源钳位与限流,不能让栅极下拉电阻独自承担电压保护。
保险丝按时间—电流关系配合,不靠固定乘数
额定电流不是“超过就立即熔断”的阈值。环境温度、封装、标准体系和脉冲次数影响长期承载与动作时间;快断、慢断也不是固定的毫秒档位。贴片描述封装,并不等于一种动作速度。
| 规格 | 用来回答什么 | 常见误读 |
| 时间—电流曲线 | 某故障电流下多久动作 | 只看额定电流,不看故障持续时间 |
| 电压与 AC/DC 适用性 | 熔断后能否安全阻断电弧 | 认为同数字 AC/DC 额定可互换 |
| 分断能力 | 能否切断预期短路电流 | 电池回路统一写至少 50 A |
| 熔化 / 总清除 I²t | 脉冲耐受与放过应力 | 混淆熔化前和完整清除过程 |
| 温度降额与脉冲寿命 | 正常运行是否误动作 | 固定按工作电流 × 1.25 选型 |
预期短路电流需根据电源、线缆和回路阻抗估计,保险丝分断能力必须覆盖相应条件。I²t 的单位是 A²·s,本身不是焦耳;只有在电阻近似恒定时,乘 R 才对应电阻发热能量。矩形 10 A、10 ms 脉冲的 I²t 为 1 A²·s,但选型还需使用该型号对重复脉冲的降额要求。Littelfuse Fuseology 选型指南
也不能只比较“保险丝 I²t 小于 MOSFET I²t”:MOSFET 未必提供可按此比较的耐受值,它的 VDS、脉冲时长、初始结温和 SOA 都可能先成为限制。保险丝常保护线缆和火灾风险,未必能在半导体损坏前清除所有故障。
PPTC 通过自热升阻限制电流,并非形成理想开路。保持电流、动作电流和恢复条件随温度变化;故障状态仍有电流,通常需移除故障并降温才能恢复。是否适合某端口,应按电压、电流、动作时间与正常压降评估,不能要求每条电源轨一律使用 PPTC。
热插拔:电流受控后还要算 MOSFET 能量
给电容充电满足 I = C·dV/dt。假设 12 V 输入、1000 μF 输出电容,输出在 10 ms 内线性上升,电容充电电流约 1.2 A;若负载同时运行,通态器件电流还要加上负载电流。
在理想恒压输入、仅电容负载、无其他损耗且最终充到 12 V 的条件下,电容储能为 ½CV² = 0.072 J,串联线性充电器件也消耗约 0.072 J。开始时它可能同时承受接近 12 V 和 1.2 A,即 14.4 W;平均功率不高并不代表瞬时 SOA 足够。缩短或拉长启动时间会改变脉冲功率和热扩散,不能只看总能量或额定连续电流。
简单给 MOS 栅极加 RC,并不保证负载电流或输出斜率精确受控,因为跨导、米勒过程和负载都会参与。热插拔控制器通过采样与反馈限制电流/功率,并按故障定时决定关断或重试;仍需按输入、输出电容和外部 MOS 的 SOA 配置。TI LM5069:热插拔、限流与功率限制
NTC 的冷态高阻可减小浪涌,升温后阻值下降;短时间重新上电时它可能仍热,限流能力与冷启动不同。主动限流若反复自动重试,也可能累积发热,必须核对重试周期和热恢复条件。
启动放慢了,MOS的总耗能会减少吗?
把观察位置固定在100%,只改变启动时间:电流和峰值功率下降,累计72 mJ却不变。再回到中途,电源供能等于电容储能与MOS耗能之和。真实器件还需按整段电压—电流—时间轨迹核对SOA。
EMOS=∫(Vin−v)Cdv=CVinVout−21CVout2
正在呈现知识画面
启动放慢了,MOS的总耗能会减少吗?仅电容负载从0充到恒压源电压时,串联线性器件与电容各得到½CV²;放慢改变功率和时长,不改变这份能量账。
{"id":"hotswap-energy-partition","title":"启动放慢了,MOS的总耗能会减少吗?","summary":"仅电容负载从0充到恒压源电压时,串联线性器件与电容各得到½CV²;放慢改变功率和时长,不改变这份能量账。","height":1000,"html":"<h2 data-i18n=\"heading\"></h2><p class=\"intro\" data-i18n=\"intro\"></p><div class=\"control\"><label for=\"duration\" data-i18n=\"duration\"></label><output for=\"duration\" id=\"duration-value\"></output><input id=\"duration\" type=\"range\" min=\"2\" max=\"50\" value=\"10\" step=\"1\"></div><div class=\"control\"><label for=\"phase\" data-i18n=\"phase\"></label><output for=\"phase\" id=\"phase-value\"></output><input id=\"phase\" type=\"range\" min=\"0\" max=\"100\" value=\"100\" step=\"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=\"current\"></span><strong id=\"current\"></strong></div><div><span data-i18n=\"cap\"></span><strong id=\"cap\"></strong></div><div><span data-i18n=\"heat\"></span><strong id=\"heat\"></strong></div><div><span data-i18n=\"source\"></span><strong id=\"source\"></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 duration=n('duration'),u=n('phase')/100,i=12/duration,p=x=>12*i*(1-x/100),ec=72*u*u,es=144*u,em=es-ec;show('duration-value',duration);show('phase-value',u*100);plot('plot',[{pts:[[0,p(0)],[100,0]]}],[0,100],[0,75],{points:[[u*100,p(u*100)]]});show('current',i);show('cap',ec);show('heat',em);show('source',es);set('eq','t = '+(duration*u).toFixed(2)+' ms; Vout = '+(12*u).toFixed(2)+' V\\nEMOS = CVinVout − ½CVout²\\nAt Vout=Vin: EMOS = EC = 72 mJ');}inputs(draw);","audio":false,"strings":{"cap":"已存电容能量(mJ)","current":"充电电流(A)","duration":"启动时间(ms)","heading":"启动放慢了,MOS的总耗能会减少吗?","heat":"MOS累计耗能(mJ)","intro":"调整线性充电时间,比较瞬时功率和累计能量。","phase":"启动进度(%)","plot":"横轴启动进度%,纵轴 W;蓝:MOS功率","reset":"重置","scope":"12 V、1000 μF,无负载、无开关能量回收,输出线性上升;不计算SOA或温度,功率减小不等于已验证安全。","scopeLabel":"模型范围与约定","source":"电源累计供能(mJ)"}}
持续过压与关断后的能量去向
TVS 可吸收多大瞬态取决于脉冲形状、持续时间、温度和重复率,不是一个固定“只支持微秒”的规则。但持续电源过压往往无法靠小型并联 TVS 长期消耗:P = V钳位 × I,输入没有被限流或切断时,器件可能过热失效。
过压关断器检测阈值后打开串联开关,需要核对响应期间下游承受的峰值、MOS 耐压及关断后的回灌路径。Crowbar 则通过受控低阻路径促使上游限流或熔断;仅画“齐纳并联加保险丝”不能保证齐纳能活到保险丝断开。两者的故障能量和恢复方式不同,需按实际电源协调。
关断电流本身也会激发供电线缆或负载电感的尖峰。1 mH、2 A 储能为 2 mJ,必须由续流、钳位或其他路径消耗/转移;关断元件不是把这份能量删除。继电器续流二极管可降低尖峰,但也会影响电流衰减与释放速度。普通 LDO 的热关断、限流或 EN 也不能推导出“输入超过耐压会自动安全关闭”。
用一张故障账收拢设计
针对每个外部电源和信号入口,记录正常范围、可能异常源、故障电流/持续时间、先动作的器件、下游最大应力和恢复条件。例如“12 V 输入误接更高电压”要一路追到检测延迟、串联管关断、输入 TVS 能量和负载残余电压;只有器件名称而没有这条因果链,保护尚未被证明。
验证应分别覆盖正常启动不误动作、故障能受控及故障移除后的行为。数学预算能排除明显不合理设计,却不能代替相应标准条件下的 ESD、浪涌、温升或故障测试。
from math import isclose
assert isclose(2e-9*5e9, 10)
assert isclose(3*0.7, 2.1)
assert isclose(3*0.030, 0.09)
assert isclose(3**2*0.030, 0.27)
assert isclose(10**2*0.010, 1)
c, v, rise = 1000e-6, 12, 10e-3
assert isclose(c*v/rise, 1.2)
assert isclose(0.5*c*v*v, 0.072)
assert isclose(v*c*v/rise, 14.4)
assert isclose(0.5*1e-3*2**2, 0.002)
print('寄生尖峰、导通损耗、I²t、启动和电感储能计算通过')
继续查阅