前回、温度制御の基本となる、色々な温度センサを調べました。
今回は、温度制御の心臓部となる PID/PWW による制御方法です。
これで、ペルチェ素子をコントロールするための基礎が分かった(はず)です。
PID 制御
目的の値に調整しようとする場合、一番簡単なのは規定値になったらスイッチをオフにして、値が下がりすぎたらオンにする方法です。
しかし、この方法ではスムーズな値の変化は出来ません。電車のモータをオン・オフ制御などしたら、急停止して乗客が車内で立っていられずに吹っ飛びそうです。
(以下のグラフは、フリーハンドで描いたイメージです。)

PID(Proportional Integral Derivative)制御とは、比例・積分・微分の3要素を使用してスムーズに制御する方法です。
比例(P)制御
まず、比例(P)制御だけを考えます。
比例(P)制御とは、現在の値と調整したい値との差に比例して調整量を決定します。
なだらかな調整になるのでオン・オフ制御と比較するとスムーズですが、調整後の値が目標値を中心に前後するので「ガクガク」した動きになります。
イメージ的には、バネが付いていてビヨーンビヨーンと動く感じです。

比例積分(PI)制御
比例制御だけでは行ったり来たりしたので、調整量の計算に積分を加えることで目標値に近づくと減速させることが出来ます。
イメージ的には、空気が入った先の閉じた注射器を押し込む感じでしょうか。
最初は早く移動しますが目標値の近くではゆっくりと移動することでガクガクをなくします。

比例積分微分(PID)制御
最後に微分の計算を加えます。
通常なら上の PI 制御でスムーズな制御が出来そうですが、自然界では色々な力が加わります。
また、PI 制御だけでは目標値に落ち着くまでに時間がかかります。
これらを解決するために微分の計算を追加します。
電車の速度を PI 制御で一定にコントロールしている時に、坂道に差し掛かったり風で押されたりすると、電車は急に加速してしまいます。
そこで、前回と今回の調整量を微分することで外的要因でガクガクする事を抑えることが出来ます。

要約すると、
・比例(P)制御で、調整結果をなだらかにする。
・比例積分(PI)制御で、大きな調整の後にはブレーキをかける。
・比例積分微分(PID)制御で、毎回の調整量を比較してコントロールする。
これで、スムーズで素早い制御が可能となります。
PWM 制御
PWM(Pulse Width Modulation)制御とは、LED の明るさ、モータの回転数、電圧レギュレータなどのアナログ量をデジタル制御する方法です。
例えば LED の明るさを制御する場合には、アナログ的には流す電流量を増減させると明るくしたり暗くすることが出来ます。
しかし、これをデジタル回路で実現するには D/A コンバータでデジタル量をアナログ化して電流を調整する回路を通す必要があり、途中の回路で発熱することで効率も低下します。
ところが、LED の明るさの制御なら、電圧は一定で高速にオン・オフすることで実現できます。
これならデジタルパルスをトランジスタのスイッチ回路につなぐだけで簡単に実現できます。
基本的な原理
グラフで見てみましょう。
出力を半分にするために電圧を 50% にしたものです。
これを実現するには、例えば回路の途中に抵抗を挿入して出力電圧を半分にします。
この場合、使われなかった半分の電力は熱になって消費されます。

次に電圧を 100% にして時間を半分にしました。この下の四角形は上の四角形の面積と同じです。(0.5 X 1 = 1 X 0.5)
この場合は抵抗などで電圧を下げる必要がないので、電力を 100% 活用できます。

さらに、高速に切り替えても同じ面積(出力量)にすることが出来ます。
高速に切り替えて短い時間間隔にすることで、出力量を細かく制御することが出来ます。(100個に分割すると 1% 刻みで制御できます。)
これが PWM 制御の基礎的な考え方です。

実際の駆動回路
最近のマイコン(MCU)なら、PWM 制御信号を出力することは簡単に出来ます。
しかし、実際にモータの回転や今回の目標であるペルチェ素子の温度制御などでは、MCU の端子にこれらの高負荷な部品を直接に接続することは出来ません。
これは、Arduino の場合、各端子に流せる最大電流が 20 mA なのに対して実際の部品の駆動には数 A と 100 倍ぐらいの差がある為です。
そこで、LED などなら電流制限抵抗を、 100 mA 程度の負荷ならトランジスタを、数 A が見込まれる場合や MCU 動作電圧以上の電圧を制御するにはパワー MOSFET でオン・オフします。
LED の点灯
MCU で LED 等を駆動する場合は、電流制限抵抗を付けるだけで点灯させることが出来ます。
Arduino UNO のように電源電圧が 5 V の場合、LED に 1 mA 流すなら 3.3 kΩ 程度の抵抗を接続します。
最近の LED なら、1 mA で実験に十分な明るさが得られるはずです。(Arduino UNO なら1端子で 20 mA、UNO R4 なら 4 mA 以上流してはいけません。)

モータの駆動
200 mA 程度で動作する小型モータや小型ファンを動作させるには、トランジスタを接続します。
定番の 2SC1815 はコレクタ電流(Ic)の絶対最大定格値が 150 mA なので、モータ類の駆動には使えませんね。
余裕をもって 500 mA 程度のコレクタ電流が流せるトランジスタを使いましょう。
例えば秋月電子なら、2SC2120-Y はコレクタ電流が 800 mA まで流せて20個入りで150円です。(1個8円以下)
MCU でモータの回転を制御するには、MCU の出力端子とトランジスタのベース間にコレクタ電流調整用の抵抗を接続する必要があります。
抵抗値は、データシートのコレクタ電流・コレクタ・エミッタ間電圧のグラフから計算できます。

モータの駆動電圧が 5 V、動作電流が 200 mA とすると、このグラフからベース電流(IB)は 1.5 mA 程度です。
抵抗値 = 電圧 ÷ 電流なので、5/0.0015 = 3.4 kΩ となります。
しかし、モータは回転し始める時に大きな電流が必要となるので、Arduino UNO R4 でも対応可能な 3mA まで許容すると 1.7 kΩ の抵抗値です。
これで、コレクタ側にモータ/ファンを接続すると MCU から制御することが出来ます。

ペルチェ素子の駆動
大きな負荷を制御するには、パワー MOSFET(Metal Oxide Semiconductor:金属酸化膜半導体、Filed Effect Transistor:電界効果型トランジスタ)を使います。
さらに、ペルチェ素子やモータなど電流の向きの制御も必要な場合には「フルブリッジ PWM」を使います。(Hブリッジとも言います。)
フルブリッジ PWM は、P チャンネルの FET 2つと N チャンネルの FET 2つをブリッジ型に組み合わせることで、数 A の高電流の制御だけではなく正負の電圧制御も行えます。
また、この部分(図では VDD)だけ別電源にすると、MCU より高電圧の制御も行えます。
具体例です。
図では分かりやすくモータの回転で表しています。
(下の図は簡略化しているので、FET 以外の部品は省略しています。)
FET のゲートには Arduino の出力端子をつなぎます。
そして、オン・オフ制御だけではなく、上で解説した PID 制御を行えばスムーズなコントロールが行えます。
正回転:左上・右下 FET ON
逆回転:右上・左下 FET ON
ブレーキ:下2つ FET ON
停止:全ての FET OFF

図ではモータをつなぎましたが、ここにペルチェ素子を接続してゲートから MCU で制御すると、加熱したり冷却することが出来ます。
注意書きの追加
上の回路は模式図なので、好きな組み合わせでスイッチ(FET)をオンに出来ます。
しかし、左上と左下又は、右上と右下の組み合わせでオンにすると、電源を短絡することになり故障します。
必ず中央の負荷を使用する設定(上の4種類)で使ってください。
次回の予定
これで、目標だったペルチェ素子を、ソフトウエアで「PID 制御」する場合の動作と「PWM 制御」するためのハードウエアの基礎が分かりました。
次回は、いよいよラジオペンチさんが設計した「ペルチェ温度コントローラー」を製作します。


コメント