冷却ファンの回転数を検出し、PID制御する回路を作ります。
前回までに、冷却ファンを PWM駆動し、回転数をフィードバックして、Arduino で PID制御することができました。
いい感じに動いてます。
が、じつは、どんなのがいい感じなのか、よくわかりませんのですケド (;´Д`)
冷却ファンの制御の状況
目標値 SV (青)、計測値 PV (赤)、操作量 MVn (緑) の値を、Arduino IDE のシリアルプロッタに出力したグラフをみてみます。
縦軸は回転数パルスの周期 (μs) です。上へいくほど低速回転、下は高速回転になります。横軸はサンプリング回数です。100ms ごとにサンプリングしていますので、10 で 1秒です。
加速時の制御状況
図1 は、フィードバック制御をおこなわないときのようすです。
段階的に SV を変化させて、ファンを加速していきました。MVn は SV と同じです。
PV は SV を追いかけてはいますが、SV にはなりません。
図2 が、回転数をフィードバックし、PID制御したときの動きです。
PV は SV に一致しています。
SV を段階的に加速していったときも、PV がしっかり追従していることがわかりますね。MVn は、偏差に応じて変化していきます。
なお、MVn が 23000 あたりで振動していますが、ファンの特性の影響じゃないかと思ってます。
減速時の制御状況
減速時のようすをみてみましょう。
図3 は、SV を段階的に減速したときのようすです。
加速時とおなじように、しっかり追従しています。
減速するとき、MVn が一時大きく変化します。ブレーキがかかるわけではないので、MVn を大きく動かして減速を促しているようです。
SV をもう少し急に変化させると、微分制御されるようすもよくわかります。
外乱発生時の制御状況
次に、外乱が発生したときの制御のようすをみてみます。
外乱とは、回転数を変動させるような外部要因です。ここでは、ファンの出口をふさぎ、負荷を変動させてみました。
図4 は、フィードバック制御なしのばあいです。
外乱にともなって、回転数が上下に変動しています。
図5 は、PID制御しているばあいです。
外乱が発生すると、一時的に回転数は変動しますが、すぐに MVn が変化し、回転数を SV に戻すように制御されています。
PV が SV にもどるまでに 5 秒間ほどかかっていますが、これはファンの特性によるものと思います。
制御係数をもっと大きくすることで短くできるかと思ったのですが、あまり効果はありませんでした。逆に不安定になるだけです。このあたりが、もっとも安定しているんじゃないでしょうか。
製作後記
冷却ファンの回転数を PID制御してみました。
過去にヒーター温度のPID制御をやってみたことがあります。日付をみると、ああ、もう 2年も前になりますねぇ。当時は、PID制御というものは知っていましたが、じっさいに自分で制御系を作ってみるのは初めてでした。ほとんどが手探り。
でも、そのおかげか、今回はわりと簡単にできたように思います。
ヒーター温度の制御と異なる点は、応答時間が短くなったことでしょうか。温度変化よりも回転数の変化のほうが速いです。といっても、目標値に達するには 5秒間ほどかかっています。
と、こうなると、もっと応答の速い系での制御もやってみたくなりますねぇ。行き着く先は倒立振り子?
まぁそこまでやるかどうか、何をやるかは、気分で考えます。いつかこの製作が役にたつかもしれません。