PID制御器のAnti-windup

目次

はじめに

PID制御器に代表される「積分器を内部に持つ制御器」では積分器のワインドアップ(飽和)が発生することが知られています.
積分器ワインドアップが発生すると,システムの速応性や安定性の劣化を引き起こします.

積分器ワインドアップは主にシステムの入力制約によって引き起こされます.
システムの入力制約とは,たとえばモータドライバ定格電圧(電圧リミット)などがあります.

具体的には,以下のようなブロック線図で表されるようなシステムです.
コントローラによって計算された操作量 \hat{u}に上下限の制約が課せられ,実際のシステムへの入力 uが制限されています.

 

f:id:blockahead:20190103003130p:plain

 

目標値 r 1としたとき,制約がない場合と比べて制御性能は下図のように劣化します.
上からシステムの出力 y,実際のシステムへの入力 u積分 e_{i}です.
また,灰の実線は入力制約がない場合,青の破線は入力制約がある場合です.

制約ありの結果では出力がオーバーシュートしており,入力制約によって制御性能が劣化していることがわかります.
操作量 uを見ると, t=5s r \lt yとなっているにもかかわらず, uが負方向へ変化せず,入力制約による飽和状態を維持しています.
この入力制約が支配的になるとシステムは不安定になり,持続的な振動を引き起こすこともあります.

f:id:blockahead:20190103015312p:plain

このようなシステムを制御する場合,コントローラのゲインを下げることでオーバーシュートの発生を回避することができますが,入力制約の影響しない範囲では単純にゲインを下げることになるため制御性能は劣化します.
また,PIDコントローラのゲイン決定手法としてChien-Hrones-Reswickの方法などがありますが,これらの手法が利用できなくなることも課題のひとつです.

 このような積分器ワインドアップによる制御性能の劣化を補償する方法全般をアンチワインドアップ(Anti-Windup)と呼びます.

現実のシステムは必ず何らかの入力制約を有するため,これらを解消する手段を知る重要性は高いと言えます.

以下では解析的な議論はせず,主要な実装についてのみ紹介します.
また,SISOシステムを対象とします.

 

主にこちらの文献を参考にしています.

www.amazon.co.jp

 

参考までに,解析的な議論については以下の文献があるようです.
後者の文献は@gohomenow7898さんからの紹介です. 

www.jstage.jst.go.jplink.springer.com 

PID制御器のAnti-windup

Anti-windup補償器の構造

Anti-windupの手法にはさまざまなものがありますが,以下の3つがよく利用される手法と思います.

いずれの手法もコントローラの出力 \hat{u}と実際のシステムへの入力 uが異なる場合に積分動作を停止する方向に作用します.

シミュレーションは次節でまとめて表示します.

積分動作の停止(固定)

この手法は比較的簡単なシステムで利用されることが多いように思います.
動作は単純で, \hat{u} \neq uのときに 積分器への入力=0とするだけです.

f:id:blockahead:20190106131704p:plain

特徴はなにより実装が簡単な点です.
私はざっくりとAnti-windupを施すことで制御性能が向上するかどうかを見積もるために使うことが多いです.
一方でこれといった決まった実装がなく,実装のゆらぎが起こりがちである点が課題と個人的に感じています.

最も簡単な実装は以下ですが,この実装では何らかの要因で積分値が見積もりよりも大きくなった際に積分値がクリップされてしまいます.

\begin{align}
e_{i}(T) = \int^{T}_{0} e(t) dt \\
\because e(t) = \left\{ \begin{array}{ll}
e(t) & (if \ \hat{u} = u) \\
0 & (if \ \hat{u} \neq u )
\end{array}
\right.
\end{align}

 

積分値のクリップについては積分値が十分大きくなり,必ず | \hat{u} | \gt Limitとなる場合を考えると良いかと思います.
 | e_{i}K_{i} | \gg Limitのような場合, | e_{p}K_{p} |または | e_{d}K_{d} |がある程度の大きさを持たない限り \hat{u} \neq uを維持し続けロック状態になります. 

MATLAB/SimulinkのPID Controllerに実装されているアンチワインドアップ手法「固定」はこのような方法を基としています.

jp.mathworks.com

自動整合

この手法はコントローラの出力 \hat{u}と実際のシステムへの入力 uの差分とゲイン(ここではシステム G_{pd}(s)の逆システム)の積を,積分器への入力から差し引くような実装です.

f:id:blockahead:20190103014459p:plain

私は上図のように積分器を除いたシステム G_{pd}(s)の逆システム G_{pd}^{-1}(s)をゲインとして利用しています.
MATLAB/SimulinkのPID Controllerでも「逆解析」として実装されており,ここではゲインは定数となっているようです.

この手法は学会誌EICA(須田)では自動整合,MathWorksのWebページでは逆解析(Back-Calculation),学会誌EICAの参照元であるAutomaticaの論文(R. Hanus, et al.)ではConditioned PI Controllerとされています.
Self-conditioned PI Controllerが別で定義されていますが,ここでは上記の形式を自動整合と呼びます.

 ヴェロシティフォーム

この手法は速度型PIDなどとも呼ばれています.
これと比較して,これまでのPID制御系はポジションフォーム位置型PIDなどと呼ぶようです.

f:id:blockahead:20190107134550p:plain

ヴェロシティフォームの最大の特徴は,偏差を1階微分することで制御器内部から積分器を排除している点です.
これによって積分器ワインドアップを特別な操作なしに防ぐことができます.
Anti-windup補償器の分類ではないかもしれませんが,よく利用される手法です.

通常のPID制御系は連続時間系で設計することが多いように思いますが,ヴェロシティフォームは離散時間系が基本となるため注意が必要です.
これによってパラメータの設計も連続時間での手法と異なります.

 

以下のブログでは,ヴェロシティフォームについて積分器ワインドアップのほか,メモリ節約や手動から自動へのバンプレスな切り替えについて紹介されています.

hi-ctrl.hatenablog.com

シミュレーション

対象とするシステム

シミュレーションの実行環境はMATLAB/Simulink R2015aです.
制御対象は連続時間系,コントローラは離散時間系で設計し,ソルバはDormand-Prince(Simulink標準)です.
ヴェロシティフォームが離散時間系であることから,他の2手法に関しても離散時間系(サンプリング周期 \Delta T = 0.001s)で設計しています.

対象とするシステム G(s)は時定数 T=10sの1次遅れ系です.

\begin{align}
G(s) = \frac{1}{10s+1}
\end{align}

PIDコントローラのパラメータはそれぞれ K_{p}=10 K_{i}=2 K_{d}=1です.
また,操作量の範囲は -3 \leq u \leq 3です.

シミュレーション結果(PI)

下図は目標値 r=1としたときの各Anti-windup手法におけるPI制御での結果です.
ただし, K_{d}=0としています.
上からシステムの出力 y,実際のシステムへの入力 u積分 e_{i}です.
ただし,ヴェロシティフォームでは積分器が存在しないため,積分ゲイン K_{i}への入力を便宜上 e_{i}としています.
また,赤の実線が自動整合,青の実線が積分動作の停止(固定),緑の実線がヴェロシティフォームです.

前述の結果と比較すると,Anti-windup補償を施すことでオーバーシュートが抑制されていることがわかります.
また,操作量 uにおいても r \lt yとなったタイミングで負方向に変化していることが確認できます.

f:id:blockahead:20190106002541p:plain

シミュレーション結果(PID)

下図は目標値 r=1としたときの各Anti-windup手法におけるPID制御での結果です.
図の詳細はPIでの結果と同様です.

PID制御においては,自動整合および積分器の停止(固定)ではPI制御の場合と同様,オーバーシュートが抑制され制御性能が向上していることが確認できる一方で,ヴェロシティフォームでは非最小位相系で見られるような逆応答が発生しています.
これは前述のR. Hanusらの論文でも言及されおり,偏差を微分することによる構造上の特性であると言えます.
このため,PIDコントローラをヴェロシティフォームで構成する際には注意が必要です.

f:id:blockahead:20190106002610p:plain

おわりに

積分器のワインドアップによる制御性能の劣化とその解消法であるAnti-windupについて考えてみました.
現実のシステムでは必ず何らかの入力制約があることから積分器のワインドアップは避けて通れない現象であると言え,Anti-windupに関する技術の重要性は大きいです.

今回紹介した手法の中で,最近ではヴェロシティフォームがよく利用されているようです.
背景としてはディジタル制御系が主流になったことから離散時間系としてコントローラを構成することが多くなったこと,それと同時に入力制約付近でシステムを動作させることが増えてきたことが考えられます.

しかし個人的には従来のPIDコントローラに補償器を加えるという構造の自動整合系を利用することが多いです.
(大企業ですと基本の構造を変えずに「いつでも取り外せる補償器」という形式で見通しよく構成されている方が安心できるという心理も作用しているのではないかと邪推していますが……)

 

また,近頃は制約付近を利用することでシステムの最大性能をうまく利用しようとする流れもあり,ここで述べたAnti-windup補償のほか,モデル予測制御(後退ホライズン制御)などの手法も開発されています.

モデル予測制御については以下の記事でも述べています.

hamachannel.hatenablog.com

 

このほか,有用な手法などありましたら教えていただけると嬉しく思います.