製作した温度センサーの動作確認および出荷検査のため、実際の温度を印加する治具で、目標温度は-5℃~65℃です。初代の機器「初代PID制御温度センサー確認治具」がお役を終えたので新たに製作しました。
CPUクーラーを利用しよう
ペルチェ素子は熱交換能力に加え消費する電力がそのまま熱になるので、排熱が難しい。たとえば今回使用した素子(TES1-12739:秋月)は吸熱量46Wですが、フルパワーで駆動すると16V×4.6A≒73Wも電力を消費するため吸熱量を上回る。
作り替えのためにと、CPUクーラーを買っておいたのが右の写真。なかなかカッコ良い!
コントロールにはmbed
制御マイコンはmbed。ボードは相補PWMが使え開発も容易な「Nucleo-F303K8」にした。というわけで、回路図。ペルチェの駆動はパルス駆動ではなく、LCで平滑した素子に優しいアナログ駆動とする。
接着中 ステップ応答確認 背面の回路
PID制御の確認はXCOS
本音は、この機会に「現代制御」を取り入れたい。でも、制御対象がシンプル過ぎるので、ついつい楽な古典制御で実装してしまう。
- ステップ応答を見る
ゼロ~100%(PWMデューティ80%で駆動)
上図より、一次遅れの時定数をわりだす。
- 無駄時間 L=5(秒)
- 時定数(63%に達するまでの時間) T=100(秒)
CHR法で20%オーバーシュートの定数Kp,Ki,Kdを決定しXCOSで制御確認
画像クリックでScilab6.02用ファイルをダウンロード
実測ステップ応答はモデルのステップ応答とほぼ一致する。冷却側の確認だけでとりあえず定数を決める。標準形PIDでまずはためしてみることにする。
連続時間モデルで大丈夫か?
ソフトウェアはdt=50msのループを予定しており、 制御対象時定数≫dtなので、連続時間でシミュレーションでもある程度結果が一致すると考える。これが、制御対象時定数>dt、たとえばdt=10秒などの場合は、差分方程式やz変数モデルで確認したほうが良いと思われる。
XCOSでz変換モデルは、次の機会にやってみようと思う
ファームウェアの実装
Mbedワークスペース開発環境を使う。Nucleo-F303K8はFlashが少なく1号機で使ったrtosは今回は不採用。ループが50msなので制御の後の空き時間で十分にLCD表示可能。表示関数はベタにループ内に入れる。
PWMはデッドタイム処理で相補PWMにするため、Mbed標準PwmOutを宣言し初期化をMbed-libに任せてから、レジスタを操作。PWMはTIM1を使用しており、それぞれ、
- UH:TIM_CH1
- UL:TIM_CH1N
- VH:TIM_CH2
- VL:TIM_CH2N
詳しくはPeripheralPins.cを参照のこと。TIM_CH3,CH3Nを使えば三相信号も出せる。
ソースファイルはここ
秋月LCD用のライブラリ「AQM0802A.lib」は、別途DLして使う。
デッドバンドなし
ペルチェ素子が正逆駆動が可能な素子なので、制御出力は1チャンネルのみ。要するにモーター正逆回転の位置制御と同じ仕組みです。
加熱と冷却の境目にデッドバンドやヒステリシスを設けていないので、オーバーシュートが生じ積分を使い果たすと加熱/冷却が即入れ替わる。これではペルチェ素子に負担がかかると思われる。将来的には対策したい。
とりあえず動作させ、データをとってみる
ペルチェ素子を加熱・冷却両方に使うため、加熱側の時定数は小さくなるはずで、二系統の定数で行うところを、まずは冷却のみでためす。
室温18℃、加熱も冷却も制御している
やはり加熱でオーバーシュートでる
と、見出しで書いたものの、実は自分の予想よりオーバーシュート少ない!、のでひとまずこれでよしとする。たまに引っ張り出してファームウェアを書き換えてみよう。このくらいの制御なら、いろいろいじれておもしろい。
以上