失敗は成功の元といいましょうか、一発目での成功はなかなかありませんね。
マイコンPI制御のいろいろをデータログとって見ると気がついたことが。目標値と現在地の差分、ヒーター出力が直線にのってるんじゃないかと。それってただのP制御じゃ・・・・
係数をあまりにも適当に決めたのが原因だったようだ。ちょっと考えて、係数を決めてみたらある程度ヒステリがでるので、積分項が動いているのだろうということがわかった。
今は積分項の時定数が大きすぎて収束が遅い→また変更。
ヒーターの上に布をかけたり、はずしたり、また布をかけて夜の間放置してみたり。とりあえず温度は一定値になっているようです。ちっとオーバーシュートおおきい。
制御初期の状態を見てみると・・・
先の比較とは違うが、温度とヒーター出力のグラフをとってみると、直線ではないので、ちゃんとI制御が入っていることがわかる。
赤い線は大体この辺に落ち着くだろうという温度。30度を目標にしたのだが、ArduinoのADCがずれているのかオペアンプがずれているのか、まあ、多少誤差はあるだろう。
温度がノイジーな箇所があるが、P制御が0か1かばたついたとき、制御に対しては差分の3倍の制御量を入れているので、PWMが3/255(=1%)変動するの原因だろうかと思ってPの制御が0になる範囲をある程度広げてもいいのかなって。
横軸入力で縦軸出力だとこんな感じで。
100Vの電熱線をSSRで制御させたんですけど、
そのためON/OFF制御となりました。
スイッチ動作のため、比例制御ができなかったので
考え方はPID制御と少し違うかもしれませんが
温度安定度が±0.5°程度でよかったので
何とかなりました。
ヒーター容量が大きいと熱容量も大きく、感知のタイムラグ(過渡時間)が長いので特性を取りました。
まずヒーターをONにして目標温度に達したところで、
センサーが温度ピークになるまでのオーバーシュート
温度と時間を計りました。
かなりのオーバーシュートと秒単位のタイムラグがあったので、
ONN/OFF制御をタイムラグの半分ほどの周期で行いました。
最初に電源が入ったときは、目標温度からオーバーシュート温度を引いた温度になるまではONのまま立ち上げ、目標温度に近づいてから秒単位のPWMでON/OFF比例制御をさせました。