ゼロクロスSSR用の電力制御ライブラリを作ってみた。

最近のPCBは表面実装が主になっていてスルーホール部品の入手性が日増しに悪くなっていることを感じることがある。特に新製品についてはほぼ全てが表面実装と言ってもいいくらいだ。なのでいつかは表面実装に移行しないといけないと以前より思ってはいたもののリフローをどうするかを決めかねている。専用機は高すぎるし、ググッてみると、トースター、オーブン、ホットプレート、ヒートガンなど様々な方法があるようだ。どの方法を使うかに関わらず温度制御が一番重要なのとゼロクロスSSRの手持ちがあったのでまずはゼロクロスSSRでヒーター温度を制御するための電力制御ライブラリを考えてみた。

ゼロクロスSSRは0V付近でスイッチングするデバイスなので最短の制御間隔は電源周波数の半周期。50Hzの地域なら10ms間隔となる。しかし、そもそも半周期だけ使うのって問題ないのか少し疑問に思ったので調べてみたが一般家庭内のコンセントで使える電力程度なら特に問題はなさそうだ。

電力制御サイクルは「電源周波数の半周期x分解能」となるため、分解能を256、周波数50Hzとしたとき「10msx256=2560ms」なので電力制御1サイクルに2.56秒かかることになる。なのでより高い分解能は現実的ではなさそうだ。

制御方法については0~分解能の範囲で電力レベルを指定するものとしたとき、分解能が256の場合、電力制御1サイクルあたり

電力レベル0=半周期オンx0回(完全オフ)
電力レベル1=半周期オンx1回
電力レベル2=半周期オンx2回

電力レベル254=半周期オンx254回
電力レベル255=半周期オンx255回(完全オン)

のように電力レベル回数分だけ半周期オンする仕様で考えてみた。また、オン~オンまでの間隔は出来るだけ均等にする必要もある。

次は分解能16のときのオンオフ・パターンの例。参考まで。

実装については、オンオフ・パターンをテーブル化する方法、計算により求める方法などが考えられるが、テーブル化はコード/データ領域とも浪費してしまうため非力なMPUにも対応できるよう計算により求める方法を選択。整数演算では精度が足りずうまく計算できないが浮動小数点は計算負荷が高いので必要な精度を確保でき計算負荷も低い256倍した計算値を使うことで対処している。

このライブラリは電源周波数とは非同期で動作する。そのためタイミングズレにより半周期分の制御をミスるときがあることに注意しよう。ヒーター制御としては問題ないとは思うが、正確な制御が必要ならゼロクロス検出回路を追加しゼロクロスに同期したタイマー割り込みによりオンオフ制御すべし。かな。

同様な制御方法は、連続比例型ゼロクロス、最適サイクル制御などとメーカーにより異なる呼び方がされているようだ。

【実際の制御波形】

※↑左から2番目のLOWパルス部分に注目。タイミングズレにより制御に失敗している。

【ライブラリ概要】

電源周波数(FREQUENCY)と解像度(RESOLUTION)を指定しクラス・インスタンスを生成する。電源周波数は、50 or 60。解像度は、0-255までを指定する。ZCPINにはゼロクロス検出ピンを指定する。ZCPIN未指定時(-1)は非同期モードで制御する。

電源周波数の半周期をマイクロ秒で取得する。

電力レベルを0-解像度(RESOLUTION)の範囲で指定する。

次の半周期のオンオフを取得する。

半周期経過後に次の半周期のオンオフを取得する。

【サンプル・スケッチ】

【更新履歴】
2020-12-13
ゼロクロス点に同期し正確な制御が行えるようゼロクロス検出回路からの入力ピン(ZCPIN)を指定できるように改良してみた。
ゼロクロス検出回路は半波毎に単純にオン・オフを繰り返す次のようなシンプルな回路を想定している。ゼロクロス点から500-600usほどズレてしまっているが制御的には全く問題なし。

AC入力とフォトカプラ出力

フォトカプラ出力と制御タイミング

【ライブラリ】