【上流検証】最小構成のモデルベース開発事例 その21【可変周期PID】

【上流検証】最小構成のモデルベース開発事例 その21【可変周期PID】 事例

バックナンバーはこちら
https://www.simulationroom999.com/blog/model-based-of-minimum-backnumber/

はじめに

前回はプラントモデルのリアルさをちょっと追求し
それに伴うPIDの各ゲインの調整を行った。

今回は横道にそれて、ちょっとした実験を行うことにした。

登場人物

博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

可変にする対象は?

太郎くん
太郎くん

前回、不穏なことを言ってたけど、
それの話になるのかな?

フクさん
フクさん

(別に不穏なことを言ったわけでは・・・。)

フクさん
フクさん

前回、積分単位時間という時間パラメータを調整したと思うんだけど、
もう一個、時間のパラメータがあったよね?

太郎くん
太郎くん

あー、\(Δt\)こと制御周期のこと?

フクさん
フクさん

今回はこれを可変にする。

太郎くん
太郎くん

え?そんなことして良いの?
制御周期って固定じゃないとまずいと思うんだけど・・・。

フクさん
フクさん

うん。
仕様としては周期は固定が望ましい。
しかし、折角パラメータとして存在しているので
その特性、性質を知っておくと後々便利な使い道が思いつくかもしれない。

太郎くん
太郎くん

(すごい。なんか伏線っぽいの張ってきた。)

フクさん
フクさん

(・・・。どうしよう。

この伏線はちゃんと回収できるのだろうか・・・。)

可変駆動周期を作る

フクさん
フクさん

まず駆動周期を作るため、
無理やり変動性があるクロックを生成する。

太郎くん
太郎くん

具体的にはどんな感じ?

フクさん
フクさん

適当な角速度の波形を作って、
それを積分して、
sin()に入れた波形をクロックにする。
以下の感じ。

角速度とsin波
フクさん
フクさん

sin(x)は入力角位置\([rad]\)に依存して値が決定する。
よって、角速度\([rad/sec]\)の増減が周波数の増減となる。

太郎くん
太郎くん

細かいところはよう分らんが、

これで可変周期というものが出来たわけだ。

そのままPIDを駆動してみる。

フクさん
フクさん

そのまま前項のクロックでPIDを駆動させてみたのが以下。

可変周期PID制御シミュレーション結果。
太郎くん
太郎くん

んー、なんともダメな感じだねー。

フクさん
フクさん

案の定と言えば案の定だが、追従しきれていない。
本来であれば、PIDの各ゲインを再調整ということになるが、
クロックが一定ではない以上、

定数というわけにもいかない

太郎くん
太郎くん

うん。それは分かる。

PID制御器見直し

フクさん
フクさん

ここでPID制御器を見直してみよう。

PID Simulinkモデルを可変PIDに修正するための修正箇所
フクさん
フクさん

前回同様にPIDの各ゲイン以外の数学的に出てきたパラメータの、
積分単位時間\(T1\)と制御周期\(T_c\)に着目。
まさに制御周期\(T_c\)を可変にしてしまえば解決するはず。たぶん

太郎くん
太郎くん

「たぶん」って何?!
しっかりしてよ!

フクさん
フクさん

まぁ実は私も実際にやるのは初めてで。
でも理屈上は問題無いんで。

PID制御器修正

フクさん
フクさん

んで、PID制御器を修正してみた。

PID制御器修正
太郎くん
太郎くん

そうか。
定数から変数にしたんで、Gainブロックじゃ都合悪いんだね。

新型PID動作確認

フクさん
フクさん

そして、

実際に動作させたのがこちら。

可変PIDシミュレーション結果
太郎くん
太郎くん

少しガタついてる部分はあるけど、
制御としては従来と変わらないね。

フクさん
フクさん

うん。

どうやら理屈通りうまくいったようだ。

フクさん
フクさん

周期を可変にした分、\(Δt\)も可変にしたんで、
数学的には同一なはずなんだ。
まぁ実際には離散化した時の誤差があるんで、
完全一致にはならないけど。

太郎くん
太郎くん

完全一致ではないだろうけど、
これはこれで十分な性能だね。

各ゲイン

太郎くん
太郎くん

\(Δt\)を可変にしたわけなんだけど、
一般的なPIDに解釈しなおすとどうなるのかな?

フクさん
フクさん

こうなるよ。

可変PIDにした場合のKd,Kiの変化度合い
フクさん
フクさん

ちなみに\(K_p\)は変化しない。

太郎くん
太郎くん

\(K_d\)が角速度に比例して、
\(K_i\)が角速度に反比例する感じか。

フクさん
フクさん

その通り。

太郎くん
太郎くん

今回も中々楽しめた。
(あとは、伏線回収を待つばかりか)

フクさん
フクさん

(伏線回収どうしよう)

まとめ

フクさん
フクさん

まとめだよ。

  • \(Δt\)をパラメータとして扱うことができる。
    • これにより、PIDの駆動周期が可変でも対応可能。
  • \(Δt\)と駆動周期が同時に変化するので、数学的には通常のPIDと同一と言える。
    • 総和法、差分法による誤差分があるため完全一致とはいかないが、ほとんどの制御では問題なく動作する。

バックナンバーはこちら

コメント

タイトルとURLをコピーしました