以下の資料が非常にわかりやすかったので自分の理解をメモに残しておく。 http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/
http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-sample-time/
サンプリング間隔を固定とすることで計算負荷を低減することができる。 具体的には
- Kiにサンプリング間隔を乗じる
- Kdをサンプリング間隔で割る
http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-derivative-kick/
目標値が変化したときに、微分項が大きくなってしまう現象。 目標値を定数とみなすと、残差の微分は入力の微分にマイナスをかけたものになる。
http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-tuning-changes/
積分項の計算においてKpを出力時に乗ずる場合、その値が途中で変化するとその分だけ積分項が変化してしまう。 したがって、Kpを乗じた値を積算する。
http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-reset-windup/
PID出力が出力範囲を超えた場合、値をクリップする。この処理を出力値のみに適用すると積算値はクリップ前の値で積算され続けるため、誤差が大きくなり変化の追従性が悪化する。 そこで、積算値もクリップする。
http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-onoff/
PID出力をOFFにする場合、積算処理も停止する。
http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-initialization/
PID処理を有効化するタイミングは初期化を行う。 初期化処理では、積算に直近の入力値を設定する。
http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-direction/
PIDの出力が内部制御値に対して正負どちらを向くかを決める。 内部制御値が大きくなるほど出力が大きくなる場合は正、小さくなるほど出力が大きくなる場合は負とする。 こられの処理はKp, Ki, Kdの符号を変えることで実現できる。