バックナンバーはこちら
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(x)は入力角位置\([rad]\)に依存して値が決定する。
よって、角速度\([rad/sec]\)の増減が周波数の増減となる。

細かいところはよう分らんが、
これで可変周期というものが出来たわけだ。
そのままPIDを駆動してみる。

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


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

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

うん。それは分かる。
PID制御器見直し

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


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

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

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

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


そうか。
定数から変数にしたんで、Gainブロックじゃ都合悪いんだね。
新型PID動作確認

そして、
実際に動作させたのがこちら。


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

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

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

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

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

こうなるよ。


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

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

その通り。

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

(伏線回収どうしよう)
まとめ

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