STM32ベースの同期整流Buck-Boostデジタル電源 オープンソース

具体的にはどう言うんだよ、なんで無負荷でオープンループ運転できないのかわからない

もし溶接面で問題がない場合、ADCが収集する入出力の電圧・電流が正確でないのは、ADCのデータ処理アルゴリズムの問題ではないでしょうか。というのも、私が数値処理に関するコードを少し修正したところ、誤差がそれほど大きくなくなったからです。

Boostの原理を自分で調べてみてください。以下にAIの回答を示します:


簡単に言うと、Boost(昇圧)変換器を無負荷(負荷なし) かつオープンループ(フィードバック制御なし) の状態で動作させると、出力電圧が無限に上昇し、最終的にコンデンサやスイッチング素子(トランジスタ)、ダイオードが焼損します。

以下は、その背後にある物理的メカニズムの詳細な解説です。

1. エネルギーが「増える一方」になる累積効果

Boost回路の動作は2つのフェーズに分けられます:

  • 充電フェーズ:スイッチング素子がオンになり、インダクタ L がエネルギーを蓄える。
  • 放電フェーズ:スイッチング素子がオフになり、インダクタ L が蓄えたエネルギーを電源 V_{in} と合わせて出力コンデンサ C へ供給する。

通常の負荷時には、インダクタが各周期でコンデンサに伝達するエネルギーは、負荷によって消費され、エネルギーのバランスが取れます。

しかし、無負荷時には負荷電流がゼロです。つまり、各スイッチング周期でインダクタからコンデンサへ「ポンプ」されるエネルギーがどこにも逃げ道がないということになります。コンデンサの蓄エネルギーの式 E = \\frac{1}{2}CV^2 によれば、エネルギーが蓄積され続ける限り、電圧 V は必然的に上昇し続けます。


2. 数学モデルによる解析

理想的な条件(連続導通モード CCM)では、Boost変換器の出力電圧は次の式で表されます:

V_{out} = \\frac{V_{in}}{1 - D}

(ここで D はデューティ比)

  • オープンループ状態:デューティ比 D が固定(例:$D=0.5$)であることを意味します。
  • 理想と現実の矛盾:この理論式は「動的平衡」が成り立つ場合に成立します。しかし無負荷時には出力電流がないため、回路は不連続導通モード (DCM) に入ります。DCM状態でデューティ比が固定され、かつ負荷抵抗が無限大に近づくと、理論上の出力電圧は無限大に向かいます。

3. 災害的な結果

実際の回路では「無限大の電圧」は存在しないため、物理的限界に達してシステムが破綻します:

  1. コンデンサの絶縁破壊:出力フィルタコンデンサの耐圧(VDC)を超えて、コンデンサが破裂または短絡する。
  2. スイッチング素子/ダイオードの破損:MOSFETの V_{ds} やダイオードの逆方向耐圧が破壊される。
  3. フィードバックの失敗:「オープンループ」と言いましたが、フィードバック回路があっても、応答速度が遅い、あるいは過電圧保護 (OVP) 機能が設計されていない場合、無負荷時に発生する電圧の急上昇に対処できず致命傷となる。

まとめと予防策

特性 現象 結果
エネルギー伝達 各周期で強制的に出力側にエネルギーを「ポンプ」 電荷がコンデンサに蓄積し続ける
電圧フィードバック なし(オープンループ)、デューティ比を下げて電圧を抑制できない 電圧が制御不能になる
最終的な結末 部品の耐圧限界を超える ハードウェアの焼損

実際のエンジニアリングではどう対処するか?

  • クローズドループ制御:PWMコントローラを使用し、電圧上昇を検出すると自動でデューティ比 D を小さくする。
  • ダミー負荷 (Dummy Load):出力端子に大きな抵抗を並列接続し、無負荷時でもわずかな電流で余分なエネルギーを消費させる。
  • 過電圧保護 (OVP) :ハードウェアレベルで電圧クランプ回路を追加する。

ご質問の情報が少なすぎて、回答できません。画像もなければデータもなく、詳細な説明もありません(どのような変更をしたのか?)。

おすすめの参考記事:https://bbs.eeclub.top/t/topic/109

STM32G474を用いたデジタルBuck-Boost回路のループ補償パラメータ設計は、連続領域(アナログ)での設計から離散領域(デジタル)への変換を行うプロセスです。STM32G474は高分解能タイマー(HRTIM)と内蔵数学演算アクセラレータ(FMAC/CORDIC)を備えており、このような高周波数デジタル電源制御に非常に適しています。

デジタルループ補償パラメータの計算および設計は、通常以下の主要なステップに分けられます:


第1ステップ:パワーステージの小信号モデル取得(s領域)

まず、制御対象であるBuck-Boostパワーステージの連続時間伝達関数 G_{vd}(s) (制御入力から出力電圧への伝達関数)を把握する必要があります。
四スイッチ同期整流Buck-Boostでは、通常3つの動作モードに分類され、それぞれ異なる伝達関数を持ちます:

  1. Buckモード:最小位相系であり、LCの2次極点と出力コンデンサのESRゼロ点を持つ。
  2. Boostモード / Buck-Boostモード:非最小位相系であり、LC極点とESRゼロ点に加え、右半平面ゼロ点(RHPZ) を持つ。
    • RHPZは位相遅れを増加させると同時にゲインを上昇させるため、システムの不安定化を引き起こしやすくなります。
    • RHPZの周波数は一般的に次の式で表されます:
      f_{RHPZ} = \frac{R_{load} \cdot (1-D)^2}{2 \pi L}

重要なポイント:ループのクロスオーバー周波数(帯域幅)$f_c$ は、最悪ケースにおけるRHPZ周波数の 1/51/3 以下に設定し、十分な位相余裕を確保しなければなりません。


第2ステップ:アナログ補償器の設計(s領域)

G_{vd}(s) を特定した後、目標クロスオーバー周波数 f_c (通常、スイッチング周波数 f_{sw}1/10 程度)と位相余裕(通常 45^\circ ~ $60^\circ$)を設定します。

  • 電圧モード制御 (VMC):LC共振による 180^\circ の位相遅れを補償するために、通常 Type III 補償器(PID相当、2極点+2ゼロ点)が必要です。
  • ピーク電流モード / 平均電流モード (CMC):電流ループによりインダクタが1次系として扱われるため、外側の電圧ループには通常 Type II 補償器(PI相当)で十分です。

ここではPI制御器を使用すると仮定し、そのs領域伝達関数は:

G_c(s) = K_p + \frac{K_i}{s}

第3ステップ:離散化変換(s領域 → z領域)

マイコンはs領域の式を直接処理できないため、これをz領域へ離散化する必要があります。よく使われる方法は双一次変換(Tustin変換) であり、周波数特性を良好に保持できます。

Tustin変換の公式:

s \approx \frac{2}{T_s} \frac{1 - z^{-1}}{1 + z^{-1}}

(ここで T_s は制御ループのサンプリング周期)

この式を G_c(s) に代入することで、デジタル補償器の伝達関数 G_c(z) を得ることができます。


第4ステップ:差分方程式の導出(C言語実装)

G_c(z) を時系列の差分方程式に変換します。これがSTM32G474上で実際に実行されるコードの論理になります。標準的なインクリメンタルPI制御の場合、導出された差分方程式は以下の通りです:

\Delta u[n] = K_p \cdot (e[n] - e[n-1]) + K_i \cdot T_s \cdot e[n]
u[n] = u[n-1] + \Delta u[n]
  • e[n]:現在のADCサンプリング電圧と基準電圧との誤差
  • e[n-1]:前回の誤差
  • u[n]:現在計算された制御量(HRTIMのデューティ比比較値)
  • u[n-1]:前回の制御量

第5ステップ:STM32G474 ハードウェア利得のキャリブレーション

デジタルシステムでは、アナログ設計で求めた K_pK_i をそのまま使用することはできず、ADC量子化利得PWM変換利得を考慮に入れる必要があります。

  1. ADC利得 (K_{ADC}):たとえば12ビットADCを使用し、リファレンス電圧が3.3V、フィードバック分圧比が K_{div} であれば、ADC値と実際の出力電圧の関係は:
    K_{ADC} = \frac{2^{12} - 1}{3.3} \cdot K_{div}
  2. PWM利得 (K_{PWM}):G474のHRTIMは非常に高い分解能(約170ps)を持ちます。HRTIMの周期レジスタ値を PER とすると、デューティ比と制御量の関係は:
    K_{PWM} = \frac{PER}{1.0}

最終的にMCUに書き込むパラメータ K_{p\_digital} および K_{i\_digital} は、全体システム利得に基づいて等比縮尺する必要があります:

K_{digital} = \frac{K_{analog}}{K_{ADC} \cdot K_{PWM}}

STM32G474 プログラミングの最適化アドバイス

  • 固定小数点演算:高速応答のために、float 型の使用は極力避けてください(G474にFPUがあっても同様)。Q15Q31 形式の固定小数点を使用し、CMSIS-DSPライブラリの arm_pid_q31 関数を活用するか、G474の FMAC(フィルタ数学アクセラレータ) を使ってPIやType III補償をハードウェアで自動計算させるのが望ましいです。
  • ADCトリガ機構:HRTIMの特定イベント(通常はPWM周期の中点)を用いてADCサンプリングをハードウェアトリガすることにより、スイッチングノイズを回避できます。これは「ブラッキング(消灯)」または平均電流サンプリングと呼ばれます。

ありがとう大先生、なるほどですね

大先生、この電流検出の2つの入力端子がなぜこのように接続されているのですか?こう接続すると出力電圧が負になるのではないでしょうか?おそらく入力電流と出力電流の流れの方向が異なるためですか?出力電流を正と定義すれば、入力電流は負になりますか?また、同相入力端子(5番ピン)から見ると、この100Ω抵抗と6.2kΩ抵抗は並列接続のように見えますが、どのように理解すればよいでしょうか。ご教授いただきありがとうございます。

  1. 自分で電流がシャント抵抗を通過する際に発生する電圧の極性を再度よく確認してください。
  2. オペアンプの差動増幅回路の原理と計算方法について自分で調べてみてください(アナログ電子回路の基礎)。

私が間違えていないと思うのですが、1. 電流の流れはVOUT+ → 負荷 → VOUT- → GND → VIN- → VIN+ ですよね。2. ダイファレンシャルアンプにおいてR47=R39、R43=R41のとき、出力はVout = (R47/R43) × (0-VIN-) になりますよね。そしてR41とR39をまとめると、単なる反転増幅になっています。

兄弟、外部電流ループの理解がちょっと逆になっていますよ。電源はVINから供給されており、電流はVIN+から流入し、回路を経由してGNDに到達した後、R13を通ってGNDからVIN-に戻り、最終的に外部電源のマイナス極へ戻らなければなりません。電流の向きはGND → VIN- なので、GND(0V)を基準にすると、VIN- の電圧は実は負電圧になるのです!

つまり、入力信号が負電圧であるため、オペアンプには反転増幅接続が用いられており、出力は V_{out} = -62 \\times (\\text{負電圧}) となります。負×負で正になるので、ADCがサンプリングする電圧は正電圧になるわけです。

また、5番ピンの並列抵抗に気づいた点については、とても細かく観察していますね!これは、反転端子(6ピン)側から見た等価抵抗が100Ωと6.2kΩの並列になっているため、オペアンプの入力バイアス電流による誤差を打ち消すために、同相端子(5ピン)側にも同じ値の等価抵抗をGNDに接続しているのです。この技術はアナログ回路でバランス抵抗と呼ばれ、サンプリング精度を高めるための標準的な手法です。

でも、そうすると5番ピンから見るとこの2つの抵抗は並列になっているように見えますし、並列接続された後の合成抵抗が実際に5番ピンに接続される抵抗のはずです。

アナログ電子技術の基礎は勉強しましたか?
ケルビン配線も調べてみましょう。

突然、わかりました!入力側のシャント抵抗を流れる電流はGNDから出てVIN-に向かって流れるため、VIN-は負の電圧(マイナス電圧)になります。そのため、非反転入力端子はGND(0V)に接続され、反転入力端子はVIN-に接続されます。上の6.2kΩ抵抗は差動増幅の標準的な接続方法ですが、見た目上はこの2つの抵抗がどちらもGNDに接続されているように見え、R41とR39は並列接続のように見えるため、反転増幅として扱っても特に問題なさそうです。

あのう、質問なんですが、この製品の電源供給方法というのは2種類あるんですよね。一種はType-Cポートによる給電で、もう一種はDCポートによる給電です。また、電圧ディスカバリ(誘騙)チップが搭載されており、3つの設定用ピンはすべてフローティング(非接続)状態にされていて、デフォルトでは20Vにディスカバリ設定されています。つまり、このボードへの電源供給は、20V/5A対応の100W充電器か、あるいは12V以上のDCポート付き電源アダプターのいずれかを使用しなければならないということでしょうか?

最大で20Vまで誘導可能であり、20Vに限定されるわけではありません。充電器が20Vをサポートしていない場合は、15Vや12Vなど低い電圧にダウングレードされます。

つまり、誘導チップは最大20Vの電圧まで対応していますが、20Vより低い電圧でも動作可能です。ただし、12Vを下回ってはいけません。そうでなければ、最初段のBuckチップで12Vを降圧できず、ハーフブリッジドライバーや小型ファンへの給電ができなくなってしまいます。

はい

ねえ、このプロジェクトをやるとき、大きなデバッグ上の問題はありましたか?いくつか挙げてもらえますか?特に重大な、あるいはよく発生するようなデバッグ上の問題について教えてください。

(投稿は作者によって削除されました)

なぜbuckpwmはperiod-buckなのですか?
boostはboostなのでしょうか?
180度の位相シフトを行う必要があるのでしょうか?
すでにdpseekに尋ねましたが、確定しておらず、解法を求めております。