The Negligible Lab

Drowning in the sea of electrical and electronic circuits. Lost in the forest of computers and programs. 独立独歩を是とする。

LTspiceによる電流制御のシミュレーション

はじめに

電圧形インバータを用いてモータを制御したり,系統連系したりする場合,電流制御*1が必須となります。 昨今はオペアンプ等でアナログ制御*2することは稀で, 制御ハードウェアとしてはマイコンDSP (digital signal processor),FPGA (field-programmable gate array)が選ばれると思います。 この場合,サンプリング周期毎に制御演算のルーチンが実行される(タイマ割り込みで定期的に呼ばれる関数など)離散時間制御となります。 サンプリング周期Tの分だけむだ時間が生じるため,安定性を確保するための制御ゲイン設計が問題となります。 さらに,インバータではPWM (pulse-width modulation)にて出力電圧指令値と平均値の一致するパルス列に変換します。

筆者は電力変換器の回路方式や制御方式について学んできましたが,電流制御そのものについては実は理解が曖昧なところがありました。 そこで本稿では,LTspice XVIIと自作制御ライブラリContrailleを用いて:

  • 連続時間(アナログ)制御 vs. 離散時間(ディジタル)制御
  • 任意電圧出力 vs. PWM

を比較してみることにしました。 対象としては単純なRL回路を想定します。

f:id:s-inoue2010:20200702023510p:plain:w200
図1: 対象とするRL回路

電流i(t)が所望の値・波形となるように,電圧v(t)を調整します。 この場合,制御量はi(t)であり,電圧v(t)の方は「操作量」と呼ばれますが,「操作量」なる語はあまり浸透していない気がしています💦 念のためですが,tは時刻になります。電流i(t),電圧v(t)ともに時刻tに依存する関数となります。

DISCLAIMER!!: 本記事には技術的な誤りが含まれている可能性もありますので,予めご了承ください💦

聞きかじったこと

よく言われている(?)ことですが,R = 0~\Omegaであり,サンプリング周期がTである場合,電流制御の比例ゲインK_{P}

K_{P} \leq \displaystyle \frac{L}{4 T} \tag{1}

に設定すれば,電流i(t)にオーバーシュートを生じない,ということがあります。 これについては,例えば文献*3や 文献*4に記載がありますが, やはり理解するには自分で手を動かさないとダメだとの思いから,ブロック図と数式をいじってみることにします。

まずはシミュレーション例を

LTspice XVIIと自作制御ライブラリContrailleを用いて図2のようなモデルを組み立てました。 制御系は連続時間と離散時間の2つを並列で用意しており,マルチプレクサで選択できるようにしています。 さらに,選択した出力をそのまま電圧制御電圧源E1に入力するか,PWMしてからE1に入力するかも,もう1つのマルチプレクサで選択できるようにしています。

f:id:s-inoue2010:20200702175010p:plain
図2: LTspiceモデル図

単なる一例ですが,回路・制御定数は以下の通りです。

表1: 回路・制御定数

パラメータ
抵抗器R20~\mathrm{m}\Omega
インダクタL5~\mathrm{mH}
サンプリング周期T100~\mu \mathrm{s}
比例ゲインK_{P}K \displaystyle \frac{L}{4 T}~[ \mathrm{V/A} ]
積分ゲインK_{I}K_{P} \displaystyle  \frac{R}{L}~[ \mathrm{V/As} ]

パラメータKLTspiceの.stepコマンドでK = 0.6, 1.0, 1.4, 1.8に変化させています。 K = 1の場合が上記の比例ゲインK_{P} = L / (4 T)の場合です。

f:id:s-inoue2010:20200702175120p:plain
図3: 離散時間制御 + PWM

図3に示す通り,K = 1の場合にはオーバーシュートが出ていないことが判りますね。

連続時間での単純なブロック図

PI制御を適用するとして,むだ時間等を考えない最も単純なブロック図をs領域で描けば下図となります。

f:id:s-inoue2010:20200702030157p:plain:w450
図4: 連続時間での単純な制御ブロック図
この場合,開ループ伝達関数G_{o}(s)は次式となります。

G_{o}(s) = \displaystyle \left (K_{P} + \frac{K_{I}}{s} \right ) \frac{1}{s L + R} = \frac{K_{P}}{s L} \frac{s + \frac{K_{I}}{K_{P}}}{s + \frac{R}{L}} \tag{2}

ここで,

\displaystyle \frac{K_{I}}{K_{P}} = \frac{R}{L} \tag{3}

を満たすように比例ゲインK _ {P}積分ゲインK _ {I}を設定できれば,極零相殺されて

G_{o}(s) =\displaystyle \frac{K_{P}}{s L} \tag{4}

となります。 この場合,閉ループ伝達関数G_{c}(s)

G_{c}(s) = \displaystyle \frac{\frac{K_{P}}{L}}{s + \frac{K_{P}}{L}} \tag{4}

となり,\omega _ {n} = K _ {P} / Lの1次遅れ系となります。 ここで,比例ゲインK_{P}をいくつに設定すればよいかが問題ですが,上述の通り,オーバーシュートの生じない境界条件としてK _ {P} = L / (4 T)とすれば,

G_{c}(s) = \displaystyle \frac{\frac{1}{4 T}}{s + \frac{1}{4 T}} \tag{5}

となります。 すなわち,\omega _ {n} = 1 / (4 T)の1次遅れ系です。 例えばT = 100~\mu \mathrm{s}であった場合,\omega _ {n} = 2,500~\mathrm{rad/s}となります。 実際には,PWMに伴うむだ時間や電流センサの周波数特性などがありますので, ゲイン余裕,位相余裕をよく確認する必要があると思います(これについてはまた別記事で考えてみようと思います)。

離散時間制御でのブロック図

各種教科書を見ていると,離散時間(ディジタル)制御をまずは連続時間のs領域で表すことを試みるようです。 まずはR = 0~\OmegaK_{I} = 0として,考えます。

f:id:s-inoue2010:20200702142954p:plain:w600
図5: 離散時間(ディジタル)制御をs領域で表現したブロック図

図3において,e^{-s T}はディジタル演算に伴う1サンプリング遅れ,(1 - e^{-s T}) / sサンプル & ホールド0次ホールドの伝達関数です。 図3より,開ループ伝達関数G_{o}(s)は,

G_{o}(s) = \displaystyle \frac{(K_{P} / L) (e^{-s T} - e^{-2 s T})}{s^{2}} \tag{8}

となります。

これをz領域に変換すると,

G_{o}(z) = \mathcal{Z} [G_{o}(s) ] = \displaystyle \frac{(K_{P} T / L) z (z^{-1} - z^{-2})}{(z - 1)^{2}} = \frac{K_{P} T / L}{z (z - 1)} = \frac{K_{P} T / L}{z^{2} - z} \tag{8}

となって,閉ループ伝達関数G_{c}(z)は,

G_{c}(z) = \displaystyle \frac{G_{o}(z)}{1 + G_{o}(z)} = \frac{K_{P} T / L}{z^{2} - z + K_{P} T / L} \tag{9}

として得られます。 G_{c}(s)の特性根は

z = \displaystyle \frac{1}{2} \pm \sqrt{\frac{1}{4} - \frac{K_{P} T}{L}} \tag{10}

となります。 オーバーシュートを生じない場合,特性根が実根である必要があるため,(10)式の根号の中が正でなければなりません。 この場合,

K_{P} < \displaystyle \frac{L}{4 T} \tag{11}

となり,上述の「聞きかじったこと」を理論的に追うことができました💦

(注:何故そうなるのかは理解していない😂)

シミュレーション結果

他のシミュレーション結果を示します。

f:id:s-inoue2010:20200702182326p:plain
図6: 連続時間制御 + PWMなし

f:id:s-inoue2010:20200702182423p:plain
図7: 連続時間制御 + PWMあり

f:id:s-inoue2010:20200702182523p:plain
図8: 離散時間制御 + PWMなし

自作制御ライブラリContraille…早く準備を整えて世に問うぞ~🎵

《追記》連続時間制御の電流検出信号に移動平均を施す

さて,図2のLTspiceモデルでは,連続時間(アナログ)制御のブロックで電流検出信号(フィードバック信号)をそのまま指令値と比較していました。 一方,離散時間(ディジタル)制御では,電流i(t)の検出の後にサンプル & ホールドする必要があります。 図3,図6 ~ 8でオーバーシュートなどの様相が連続時間制御と離散時間制御で異なる理由はこれではないかと考えました。

ディジタル制御やz変換の教科書では,サンプル & ホールドの伝達関数G_{\mathrm{SH}}(s)が近似的に

G_{\mathrm{SH}}(s) = \displaystyle \frac{1 - e^{-s T}}{s T} \tag{12}

と書けることが記載されており,移動平均フィルタの伝達関数とまったく同じであることが分かります。 そこで,連続時間制御の電流i(t)のフィードバック信号に移動平均フィルタを追加し,離散時間制御と比較してみようと思います。

f:id:s-inoue2010:20200703013146p:plain
図9: 連続時間制御のフィードバック信号に移動平均フィルタを追加

電流制御の比例ゲインK _ {P} = 1.4 \times L / (4 T)としてオーバーシュートが発生する条件にしてみた状態で, 連続時間制御と離散時間制御を比べてみると──。

f:id:s-inoue2010:20200703013448p:plain
図10: 移動平均フィルタを追加した連続時間制御と離散時間制御(PWMなし)

f:id:s-inoue2010:20200703013542p:plain
図11: 移動平均フィルタを追加した連続時間制御と離散時間制御(PWMあり)

連続時間制御と離散時間制御がほぼ重なりました❗ 図3,図6 ~ 8では比例ゲインK_{P}が等しくてもオーバーシュートなどの様相が異なりましたが,連続時間制御に位相平均フィルタを追加すると,ほとんど重なってしまいます。 逆に言えば,離散時間(ディジタル)制御では入力信号を当然の如くサンプル & ホールドしているだけで,移動平均フィルタが掛かってしまっているということなんですね…。 また,PWMの有無に関わらず,連続時間制御と離散時間制御はほとんど一致するようです。

いやぁ…このあたりも自分で手を動かしてやってみないと,自分の中に「直観」として落とし込めななかったですね…。

*1:よくACR (automatic current regulator)と呼ばれますが,恐らく日本語でしょう…。

*2:早川:「初めての自立移動ロボット制御シミュレーション」,トランジスタ技術,2020年7月号,pp. 71-86

*3:田原・藤田・赤木:「FPGAによる高速電流制御を適用したPWM整流器の動作特性」,電気学会半導体電力変換研究会資料SPC-05-14,pp. 33-38,2005年1月,大阪

*4:H. Akagi, E. H. Watanabe, and M. Aredes, Instantaneous Power Theory and Applications to Power Conditioning, Wiley, 2007

© 2019-2021 @RR_Inyo