基板が正常に電源投入できることは、ある動作点で動作していることを示すだけです。保護設計は、逆接続、ホットスワップ、短絡、外部放電が発生した際に、電流がどこを流れ、誰がエネルギーを吸収し、いつ遮断されるかを答える必要があります。すべてのコネクタにTVSを追加するだけでは、保護は自動的に完了しません。重要なのは、故障源、デバイスの動作、および保護対象の許容能力を結びつけることです。
異常 主要な物理的問題 一般的な対策とその限界
ESD / 高速瞬時サージ 高速電流による寄生インダクタンスでの高電圧発生 低インダクタンスのクランプと帰還パス、信号整合性の両立
電源逆接続 誤った極性の電流経路 直列ダイオードまたは制御済みMOSFETの使用、ボディダイオードの確認
持続短絡 電源からの故障点への継続的なエネルギー供給 ヒューズ、電流制限、シャットダウンおよび熱設計の協調
大容量コンデンサのホットスワップ コンデンサ充電時の瞬時電流とオン状態のMOSFET損失 出力傾斜/電流の制御、SOAの確認
持続過電圧 クランプデバイスによる無限のエネルギー吸収は不可能 遮断、制御済みクランプまたはクラバー(Crowbar)と上流保護の協調
ESD定格は汎用の耐圧ではない
MOSFETのゲート-ソース絶対最大電圧、ICのHBM/CDMデバイスレベルESD等級、およびシステムポート耐擾乱性テストは、異なるストレスを記述しています。「ゲートが20Vに耐えられる」と「チップのHBMが2kV」というのを同じ電圧スケールで比較することはできません。パルス源インピーダンス、電流波形、注入ポート、テスト環境はすべて異なります。デバイスレベルで合格したからといって、システムテストでインターフェースが合格するわけではありません。
TVSは通常時、信号にできるだけ影響を与えず、過電圧時に分流パスを提供します。選定時は、まず最大通常電圧が逆方向動作電圧 VRWM の範囲内にあるかを確認し、次に規定されたパルス電流におけるクランプ電圧 VC、動的抵抗、リーク電流、寄生容量、およびパッケージを確認します。降伏電圧 VBR は特定のテスト電流で測定された転換指標であり、任意の大電流下で一定のクランプ値ではありません。
外部コネクタ 保護対象IC TVSクランプ 低インダクタンス帰還パス 信号はICへ継続 瞬時電流の分流 入口配置+短い分岐+短い帰還パス;デバイスがコネクタから何mm離れているかのみを比較するものではない TVSは並列放電パス:保護効果は全体の電流ループに依存する 帰還は筐体/シールド/回路参照設計に従うべき;図の下部の線が、放電電流を耐えるのに任意のデジタルGNDに適している ことを意味するものではない。
保護対象ピンが実際に受ける電圧には、配線とパッケージの寄生要素も含まれます。簡略化して Vピン ≈ Vクランプ + L・di/dt + I・R と書けます。例えば、2 nH のパスで 5 A/ns の電流変化が生じた場合、インダクタンス項だけでも 10 V になります。これが、低クランプ電圧のデバイスを選んでも、レイアウトによっては保護が失敗する可能性がある理由です。
クランプは、外部瞬時ノイズが敏感な領域に入る前に配置し、分流分岐と帰還パスを短くし、長い分岐や敏感な信号との共有高インピーダンス帰還段を避けるべきです。「コネクタの近くに配置する」はこれらの目標を達成するための一般的な方法ですが、完全なループ解析に取って代わるものではなく、TVSがICに近いからといって必ずしも失敗するわけではありません。TI ESDレイアウトガイドライン
高速インターフェースでは、保護部品の容量、パッケージ、およびチャネル特性がアイパターンに与える影響も確認する必要があり、「USBは一律特定のpF以下」というルールだけですべての速度帯の選定を完了させることはできません。電源側では、実際の最高交渉電圧と許容誤差をカバーする必要があります。通常の5V USBと高電圧PD入力を、同じ固定電圧のTVSで概括することはできません。
逆接続防止はまずボディダイオードを描き、低損失を議論する
直列ダイオードの向きは検証しやすいですが、導通損失は約 I×VF です。3 A、0.7 V の場合、2.1 W となり、適切な放熱と電圧マージンが必要です。整流ブリッジを使用すると、両方の入力極性に対して固定された出力極性が得られますが、導電経路は通常2つのダイオードを経るため、2つの順方向電圧降下を耐える必要があります。
ハイサイドPMOSの基本的な逆接続防止トポロジーでは、Dを入力正端子に、Sを負荷正端子に、Gは抵抗を介して帰還端にプルダウン します。この向きにより、ボディダイオードは正常接続時に入力から出力へ起動パスを提供し、Sの電位が上昇すると VGS が負となり、チャネルが導通して電圧降下が低減します。SとDを逆にすると、故障時の遮断能力に関する結論がボディダイオードによって変わってしまいます。TI:PMOS逆接続防止のエンドポイント説明
PMOSチャネル Dは入力側、Sは出力側 入力 + 負荷 + D S ボディダイオード D → S G G–S 抵抗 入力 − / 負荷帰還 PMOSハイサイド逆接続防止:まずボディダイオードの向きを確認 図は低電圧の基本的なトポロジー;ゲート-ソースクランプとその電流制限は、最高入力および瞬時ノイズに応じて別途設 計する必要がある 単一素子では逆方向電流の遮断を意味しない;出力が他の電源によって引き上げられている場合、VGS と逆流パスを再分 析する必要がある。
逆接続時、負荷側に他の電源がなく、参照関係が図と一致する条件下では、ボディダイオードが遮断し、ゲート-ソース駆動がチャネルをオンにするのに不十分です。出力がUSB、デバッグポート、または予備バッテリーによって引き上げられている場合、これらの条件は変化します。単一トランジスタが導通すると双方向伝導が可能になり、逆接続防止を完全な逆流防止ソリューションと呼ぶことはできません。双方向遮断が必要な場合は、適切な向きでバックツーバックMOSFETと対応するコントローラを使用できます。
トランジスタの選定では、VGS(th) のみを見るのではなく、実際の VGS で保証された RDS(on) を確認します。熱状態での抵抗が 30 mΩ と仮定すると、3 A で電圧降下 90 mV、損失 0.27 W となります。室温での典型値を熱状態での保証値として直接使用することはできません。入力または瞬時ノイズが高すぎると、ゲート-ソース耐圧を超え、ゲート-ソースクランプと電流制限が必要となり、ゲートプルダウン抵抗単独で電圧保護を担わせることはできません。
ヒューズは時間-電流特性で協調し、固定乗数に頼らない
定格電流は「超えると即座に溶断する」閾値ではありません。環境温度、パッケージ、規格体系、およびパルス回数が、長期許容電流と動作時間に影響を与えます。ファストブロー、スローブローも固定されたミリ秒の段階ではありません。表面実装はパッケージを記述するだけで、動作速度が一種類であることを意味しません。
仕様 回答すべき質問 一般的な誤解
時間-電流曲線 特定の故障電流でどのくらいで動作するか 定格電流のみを見、故障持続時間を見ない
電圧およびAC/DC適用性 溶断後にアークを安全に遮断できるか 同じ数値のAC/DC定格は相互に交換可能だと考える
分断能力 予期される短絡電流を遮断できるか 電池回路には一律少なくとも50Aと記載する
溶断/総除去 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が十分であるとは限りません。起動時間を短くしたり長くしたりすると、パルス電力と熱拡散が変化し、総エネルギーや定格連続電流のみを見ることはできません。
MOSFETのゲートに単純にRCを追加するだけでは、トランスコンダクタンス、ミラー効果、および負荷が関与するため、負荷電流や出力傾斜が正確に制御される保証はありません。ホットスワップコントローラは、サンプリングとフィードバックによって電流/電力を制限し、故障に基づいてシャットダウンまたはリトライを決定します。入力、出力コンデンサ、および外部MOSFETのSOAに基づいて構成する必要があります。TI LM5069:ホットスワップ、電流制限、および電力制限
NTCの冷態での高抵抗は突入電流を低減できますが、昇温後に抵抗値が低下します。短時間の再投入時にはまだ熱くなっている可能性があり、限流能力は冷間起動時とは異なります。アクティブ限流が繰り返し自動リトライを行う場合、発熱が蓄積する可能性があるため、リトライ周期と熱回復条件を確認する必要があります。
起動を遅くするとMOSの総損失エネルギーは減る?
100%で時間を変えると電流とピーク電力は下がるが72 mJは不変。途中でも電源供給は容量蓄積とMOS損失の和。実素子では全電圧・電流・時間軌跡でSOAを確認する。
E MOS = ∫ ( V in − v ) C d v = C V in V o u t − 2 1 C V o u t 2
図を準備しています 再読み込み
起動を遅くするとMOSの総損失エネルギーは減る? 容量負荷だけをゼロから定電圧まで充電すると容量と直列線形素子に各½CV²。低速化は電力と時間を変えるが分配エネルギーは変えない。
{"id":"hotswap-energy-partition","title":"起動を遅くするとMOSの総損失エネルギーは減る?","summary":"容量負荷だけをゼロから定電圧まで充電すると容量と直列線形素子に各½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 であり、入力が電流制限または遮断されていない場合、デバイスが過熱して故障する可能性があります。
過電圧シャットダウンデバイスは閾値を検出すると直列スイッチを開きますが、応答期間中に下流が受けるピーク、MOSFETの耐圧、およびシャットダウン後の逆流パスを確認する必要があります。クラバー(Crowbar)は、制御された低抵抗パスを通じて上流の電流制限または溶断を促します。「ツェナーダイオードの並列+ヒューズ」を描くだけでは、ツェナーダイオードがヒューズの溶断まで生き残れる保証はありません。両者の故障エネルギーと回復方法は異なり、実際の電源に応じて調整する必要があります。
シャットダウン電流自体が、供給ケーブルや負荷インダクタンスのスパイクを励起します。1 mH、2 A の蓄エネルギーは 2 mJ であり、フリーホイーリング、クランプ、または他のパスによって消費/転送されなければなりません。シャットダウン素子は、このエネルギーを消去するものではありません。リレーのフリーホイーリングダイオードはスパイクを低減できますが、電流減衰および解放速度にも影響します。一般的なLDOのサーマルシャットダウン、電流制限、またはEN機能から、「入力が耐圧を超えると自動的に安全にシャットダウンする」とは導き出せません。
1枚の故障帳で設計をまとめる
各外部電源および信号入力に対して、正常範囲、可能な異常源、故障電流/持続時間、最初に動作するデバイス、下流の最大ストレス、および回復条件を記録します。例えば、「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、起動およびインダクタンス蓄エネルギー計算が通過' )
さらに調べる