動作原理
PID 制御器は、目標値と測定値の誤差から出力を計算します。比例項は現在の誤差に、積分項は定常偏差の除去に、微分項は誤差の変化の速さに反応します。パワーエレクトロニクスでは、PI 制御器が電流ループと電圧ループの主力です。
このジェネレータは、固定サンプリング周期 dt に対する離散時間の実装コードを生成し、制御割り込みにそのまま組み込めるようにします。C(ISR や TI C2000 CLA 向けの直接アクセス形式を含む)、C++、Python、Arduino から選べ、アンチワインドアップ、フィードフォワード、入力と出力のリミットを有効にできます。
ここでのアンチワインドアップは積分の累積値を ±windup_limit に制限する方式で、出力が飽和している間も積分値が増え続けません。そのため飽和から抜けるときの大きなオーバーシュートを防げます。Ki × 制限値が出力範囲とほぼ同じになるよう制限値を決めてください。出力制限は指令値を PWM デューティ範囲などに制限します。
設計手順
- 1サンプリング周期 dt を実際の割り込み周期に固定し、一定に保ちます。
- 2まず PI 制御器から始めます。目標のクロスオーバー周波数に合わせて Kp を調整し、次に積分ゼロがクロスオーバーより下になるように Ki を加えます。
- 3出力制限をアクチュエータの物理的な範囲に設定します。たとえば PWM デューティなら 0〜1 です。
- 4アンチワインドアップを有効にし、Ki に制限値を掛けた値が出力範囲とほぼ一致するように積分制限を設定します。
- 5プラントが追加の位相進みを必要とする場合にだけ微分項を加え、微分はノイズを増幅するので、先に測定値をフィルタします。
計算式
- 連続時間 PID
- u(t) = Kp·e(t) + Ki·∫e dt + Kd·de/dt
- 離散積分(矩形則)
- I[k] = I[k−1] + e[k] · dt
- 離散微分
- D[k] = (e[k] − e[k−1]) / dt
- 出力
- u[k] = Kp·e[k] + Ki·I[k] + Kd·D[k]
計算例
20 kHz でサンプリングする電流ループなら、dt = 50 µs とし、PI を選んでアンチワインドアップを有効にし、出力をデューティ範囲 0〜1 に制限します。生成された関数は、PWM 割り込みごとに電流指令値と測定電流を渡して 1 回呼び出せば動作します。
よくある間違い
- 実際の割り込み周期と一致しない dt を使うこと。Ki と Kd のスケールが誤ってしまいます。
- 制御器の動作中に、積分状態を処理せずにゲインを変更すること。出力に段差が生じます。
- 微分を測定値ではなく誤差に適用すること。指令値が変わるたびにスパイクが生じます。
- 出力制限とアンチワインドアップを省くこと。飽和の後に大きなオーバーシュートが生じます。
よくある質問
PI と PID のどちらを使うべきですか?
電力変換器の電流ループと電圧ループのほとんどは PI を使います。微分項は測定ノイズやスイッチングリップルを増幅するため、プラントに追加の位相進みが必要な場合にだけ使います。
Kp と Ki はどう決めればよいですか?
プラントモデルと目標のクロスオーバー周波数から出発します。電流ループでは通常スイッチング周波数の 1/10 以下とし、ボード線図で位相余裕を確認してください。
サンプリング時間が重要なのはなぜですか?
離散積分と微分は dt でスケーリングされます。実際の割り込み周期と異なる dt を使うと、実効ゲインが変わってしまいます。
計算結果は工学的な推定値です。データシート、シミュレーション、実測で設計を確認してください。