アフィリエイト広告
アフィリエイト広告

ヒーター温度のPID制御 – 速度型制御アルゴリズム

今回のヒーター温度 PID 制御では「速度型制御アルゴリズム」を利用しました。
速度型制御アルゴリズムは、コンピュータのような一定周期でサンプリングする場合に適している計算方法だとされています。

速度型制御アルゴリズムとは

速度型制御アルゴリズムでの計算式は、今回の操作量を MVn 、前回の操作量を MVn-1 、今回の変化量を dMVn とすると、

MVn = MVn-1 + dMVn

今回の偏差を en 、前回の偏差を en-1 、前々回の偏差を en-2 とすると、

dMVn = Kp*(en - en-1) + Ki*en + Kd*((en - en-1) - (en-1 - en-2))

のように表されます。
Kp 、Ki 、Kd はそれぞれ比例ゲイン、積分ゲイン、微分ゲインといわれるパラメータです。

以下、俺自身がこの計算式を理解するための備忘録的な解説です。内容が正しいかどうかについては保証できませんので、あしからず m(_ _;)m

P (比例) 制御

速度型制御アルゴリズムの P 制御の計算式は、

dMVn = Kp * (en - en-1)

です。

P (比例) 制御

今回の偏差 en と前回の偏差 en-1 の差 (en – en-1) とは、左図の濃いグレー部分にあたります。

前回 n-1 とは、今回 n の一つ前のサンプリング値ということ。
ヒーター温度制御のスケッチではサンプリング間隔を 5 秒にしていますので、Δt は 5 秒。en-1 とは 5 秒前の偏差を示します。

P 制御では、この濃いグレー部分 (偏差の変化量) に比例した量だけ、操作量を変化させます。そのときのパラメータが比例ゲイン Kp です。

出力された操作の変化量 dMVn は、偏差の変化量をゼロにするように働きます。

比例ゲイン Kp を決める

下のグラフは、ヒーター温度制御のスケッチで Kp=2.0 、Ki=0 、Kd=0 としたとき、つまり P 制御のみとしたときの目標値 SV (青) 、計測値 PV (赤) 、操作量 MV (緑) を Arduino IDE のシリアルプロッタで出力したものです。

P (比例) 制御 目標値 SV (青) 計測値 PV (赤) 操作量 MV (緑)

目標値 SV をステップ状に増減させたとき、操作量 MV はその 2 倍 ( = Kp) ほどの大きさで増減していることがわかります。この増減の量が dMVn です。
MV が変化することで計測値 PV が変化し、PV が SV に近づくにつれて偏差の変化量 (en – en-1) も小さくなっていきます。そして、PV が定常状態になると偏差の変化がなくなりますから、MV も変化しなくなります。

比例ゲイン Kp の値を 1.0 にすると、PV が SV の増減にあまり追随せず、オフセットも大きくなります。Kp=10 にすると MV が振動するようになりました。
Kp=2.0 で、PV はかなりうまく追随しオフセットも小さくできましたので、この値を Kp にしました。

I (積分) 制御

P 制御では原理的にオフセットが発生します。オフセットを除去するために、I (積分) 制御を組み合わせた PI 制御を行なうのが一般的です。

速度型制御アルゴリズムの I 制御の計算式は、

dMVn = Ki * en

です。

I (積分) 制御

今回の偏差 en とは左図の濃いグレー部分に相当し、過去の偏差の変化量を積み上げた値とみることができます。

I 制御では、この積み上げられた偏差の変化量の合計値 en に比例した量だけ、操作量を変化させます。
このときのパラメータが積分ゲイン Ki です。

出力された操作の変化量 dMVn は、今回の偏差 en をゼロにするように働き、オフセットを除去します。

積分ゲイン Ki を決める

下のグラフは、ヒーター温度制御のスケッチで Kp=2.0 、Ki=0.22 、Kd=0 としたとき、つまり PI 制御としたときのものです。

PI (比例積分) 制御 目標値 SV (青) 計測値 PV (赤) 操作量 MV (緑)

SV をステップ状に増減させたとき、P 制御ではオフセットが発生していましたが、I 制御を組み合わせたことでオフセットはゼロになり、PV は SV にぴったり合うようになりました。

Ki を小さくすると、オフセットがなくなるまでに時間がかかったり、いつまでもオフセットが除去できなかったりします。Ki を大きくしていくとオフセットはなくなりますが、SV を越えてまた戻ってくるオーバーシュートが大きくなり振動するようになってしまいます。
今回のヒーター温度制御では、Ki=0.22 で、少しオーバーシュートしますがオフセットもきれいに除去できるようになりましたので、この値を Ki としました。

なお、X軸の 3705~3805 付近で SV に到達していないのは、ヒーター温度が飽和しているためです。

D (微分) 制御

速度型制御アルゴリズムの D 制御の計算式は、

dMVn = Kd * ((en - en-1) - (en-1 - en-2))

です。

D 制御は、過去と現在の値から、未来の偏差の変化量を推測するという制御です。
(en – en-1) とは現在の偏差の変化量、(en-1 – en-2) は過去の偏差の変化量です。その差 ((en – en-1) – (en-1 – en-2)) は変化量の増分で、今後もこの変化が継続すると推測されます。

D (微分) 制御

偏差の変化量の増分は、左図の濃いグレー部分です。

D 制御では、この増分に比例した量だけ、操作量を変化させます。
このときのパラメータが微分ゲイン Kd です。

出力された操作の変化量 dMVn は、この増分をゼロにするように働き、偏差の変化にすばやく反応することができます。

微分ゲイン Kd を決める

下のグラフは、ヒーター温度制御のスケッチで Kp=2.0 、Ki=0.22 、Kd=1.4 としたとき、つまり PID 制御としたときのものです。

PID (比例積分微分) 制御 目標値 SV (青) 計測値 PV (赤) 操作量 MV (緑)

D 制御を組み合わせたことで、SV を増減させたとき、偏差の増大に応じてするどく操作量が変化しています。その後、P 制御と I 制御が働いて、PV を SV に一致させていることがわかります。PI 制御で生じていたオーバーシュートを抑えているのも D 制御の働きです。

Kd を小さくすると、偏差の変化に対する応答が小さくなります。Kd を大きくすると反応は早くなりますが、MV が振動するようになってしまいます。グラフでも MV が細かく動いていますが、PV の小さな変動に D 制御が反応しているためです。
Kd=1.4 としたときの反応が最も良さげな雰囲気だったので、この値を Kd に決めました。

PID制御の理論と速度型制御アルゴリズム

PID 制御の解説をさまざま読んでいると、速度型制御アルゴリズムとはずいぶん違っているような気がしていました。それがこのアルゴリズムを理解する妨げになっていたように感じます。

一般に PID 制御は、制御を開始した時点からの操作量を考えます。ちゃんと確かめてはいないのですが、位置型制御アルゴリズムはそういう方法ではないかと思います。
対して速度型制御アルゴリズムは、プロセスの値をサンプリングした「今回」を基準に考えられています。そのことに気がつけば、速度型制御アルゴリズムの計算式が理解しやすくなるのではないでしょうか。

最初にも書きましたが、これは俺の備忘録的解説です。いい加減な部分や間違っていることもあると思います。そんなところはどうぞ、嗤ってやって下さいませ。

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