MATLAB,Python,Scilab,Julia比較 その76【PID制御⑤】

MATLAB,Python,Scilab,Julia比較 その76【PID制御⑤】 数値計算
MATLAB,Python,Scilab,Julia比較 その76【PID制御⑤】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-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

前回のPID制御の離散化

太郎くん
太郎くん

前回は・・・PID制御の離散化をしたが、
数式的にはとんでもないことになったな・・・。

フクさん
フクさん

一応、必要な式を再掲しておこう。

\(
\displaystyle\int x(t)dt=\sum x(t-\Delta T)+x(t)\frac{\Delta T}{T_1}
\)

\(
\eqalign{
u(t)&=&\int\{K_p \dot{e}(t) + K_i e(t)dt + K_d \ddot{e}(t)\}dt\cr
&=&\int\{\color{red}{\{K_p\frac{T_1}{\Delta T}\{e(t)-e(t-\Delta T)\}}\color{black}+K_ie(t)\cr
&+&K_d\frac{T_1}{\Delta T}\{\color{blue}{\{\frac{T_1}{\Delta T}\{e(t)-e(t-\Delta T)\}}\cr
&-&\color{blue}{\frac{T_1}{\Delta T}\{e(t-\Delta T)-e(t-2\Delta T)\}}\color{black}\}\}dt
}
\)

太郎くん
太郎くん

一応、色分けした部分があって、その部分は共通化はできるようだけど、
カオスさが減るイメージはないんだよな。

フクさん
フクさん

まぁここは実際にブロック線図を見てから、再度感想を聞こうか。

ブロック線図

フクさん
フクさん

そして、上記数式に合わせて起こしたブロック線図が以下。

PID制御器(変形式)ブロック線図、目標値、実値、1/zは前回値保持の意、Ki、Kp、Kd、T1、ΔT、e(t)、u(t)
太郎くん
太郎くん

あれ?!
思ったよりもあっさりになったぞ!

太郎くん
太郎くん

そうか。
同じ数式のところはブロック線図としては同一の信号線を参照すれば良いからいい感じに最適化されるのか。

フクさん
フクさん

そうそう。
これで処理のイメージは湧きやすくなったと思う。

PID制御器を加味した構成図

フクさん
フクさん

そしてPID制御器を加味した構成図が以下となる。
ちなみに、PID制御器内部はおおよそ-1~1の範囲で値が動くよう
フィードバック側は1/60にしている。

PID制御器を加味した構成図、指令器0~1の範囲で出力、指令器、制御器、PID制御器、DCモータ、状態空間モデル、target(t)、actual(t)、E(t)、u(t)、ω(t)
太郎くん
太郎くん

1/60?
どこから来た数値?

フクさん
フクさん

\(E(t)=1\)とした際に、角速度\(\omega(t)\)はおおよそ\(60[rad/sec]\)に収束してたんだよね。
PID制御器の内部信号の動作範囲を-1~1としたい場合は1/60するとちょうど良い感じになるはずだ。

太郎くん
太郎くん

なるほど。
いわゆる正規化ってやつだね。

フクさん
フクさん

そうそう。
こうすることでPID制御器は割と純粋な数学の世界で動作するから挙動が読みやすくなる。

そして次は

太郎くん
太郎くん

じゃー、これでPID制御は完了!

フクさん
フクさん

いや?まだだよ?

太郎くん
太郎くん

わかってるよー。
シミュレーションするんでしょー?

フクさん
フクさん

そうそう。
ブロック線図からコードに落とし込んで、
以前作成したDCモータの状態空間モデルと接続する感じだな。

太郎くん
太郎くん

そう考えると結構めんどそうだな。

フクさん
フクさん

構成図、ブロック線図、ソースコードの3点セットで見ればわかりやすいかもね。

太郎くん
太郎くん

じゃー次回からそんな感じでコードを起こしていく回になるわけか。

まとめ

フクさん
フクさん

まとめだよ。

  • PID制御離散化式からブロック線図を作成。
    • 同一の数式が埋まっている箇所は同一の信号線を参照できる。
      • よって、比較的にシンプルになる。
  • 正しさの証明はやはりシミュレーション。
    • 構成図、ブロック線図、ソースコードの3点セットで見て行けばそれほど混乱はしない。(たぶん)

バックナンバーはこちら。

コメント

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