PICを使ったAC電力コントローラ(ソフト編)

 PICを使ったAC電力コントローラのプログラム編です。
 CCS社のC言語で作成しました。パソコンとシリアル通信で
 接続してパソコンからリモート制御をすることができます。


【概要】

 今回、PICのプログラムで実現した機能は単純なもので、テストを兼ねています。
本体のボリュームで0%から100%まで連続の電力制御が単体でできます。
さらにシリアル通信でパソコンと接続すれば、パソコン側にハイパーターミナル
を使ってコマンドをキーボードから入力することで、リモート制御で任意の割合の
値を入力し設定制御することができます。


【プログラム基本構成】

 本体のプログラムの全体構成は下図のようになっています。全体がメインと
割り込み処理の2つ流れで出来ていて、メインでは常時パソコンからのUSART
経由のデータ受信の有無をチェックしています。データ受信がある場合には
受信データを取り出し、コマンドチェックをしてそれぞれのコマンドの処理を実行
します。 実行が完了するとまたもとの流れに戻り繰り返します。

 その後では、リモートモードで無い場合には、ボリュームの位置をアナログ
データとして入力し、8ビットでA/D変換して値をdutyという変数に格納します。
これが、位相制御の割合を示すデータとなります。
 パソコンからのコマンドでリモートモードに設定された時は、このアナログ入力
の処理はスキップされ、パソコン側からのデータがduty変数にセットされそちらで
位相制御が実行されます。
このアナログデータの読込み値を常時液晶表示器に表示しています。実際の
表示例は下図のようになります。





 実際の位相制御は、ゼロクロスの割込み処理の中で実行されます。








【割込み処理プログラム】

 ゼロクロスパルスによる、RB0の外部割込みが、交流の半サイクル毎に発生
します。従って下図のように10msec毎に割り込みが入ることになります。

 この割込みが位相制御のスタート時点となります。まず、ゼロクロスパルスの
中央付近がちょうど交流の正弦波がゼロボルトを横切る時ですから、割込み
がパルスの立ち上がりで入るように設定したときには、パルス幅の1/2だけ
遅らせたところが位相制御の100%の位置となります。
 今回のユニットの実測値では、ゼロクロスパルスのパルス幅は約400μsec
でした。従って、割込みが入ってから200μsecだけ待っています。

 次にduty変数にセットされている値を元に、0%から100%の位相制御をします。
8ビットの変数で扱うこととすれば、半サイクルを256等分して扱うことになります。
つまりdutyが255の時が100%で、0の時が0%となります。
さらに半サイクル10msecを256等分しますから、10msec÷256=39μsec が
位相刻みの単位となります。

 これらからフォトトライアックのオン出力をする時点は、(255−duty)×39μsec
で求まることになります。フォトトライアックへのOn信号はパルスで良いので、幅が
100μsecの間だけオン信号を出力しています。

 ここで注意が必要なのは、この処理が終わるまでずっと割込み処理で動作して
いるので、割込み禁止のままだということです。
何らかの他の処理も並行して実行させたい場合には、この処理方法は変更する
必要があります。タイマ0のタイマ割込みなどによる方法が考えられます。









 ここで、ゼロクロスのパルス幅は素子によるバラつきや、温度、時間により
異なったり、変化したりしますので、0%と100%近辺は正確に位置が一致しない
可能性があります。
そこで、dutyの上限、下限部分については、わずかな分だけ強制的に0%と100%
にしています。これを図で表すと下図のようになります。








【パソコンからのリモコン】

 PICを活用したことで、USART経由のシリアル通信が可能になりますので、パソコン
からのリモコン制御が出来るようにしました。
リモコンの時のコマンドは下表のようになっています。
とりあえずのテスト用ですので、簡単なコマンドのみとなっています。

コマンド コマンド書式 機 能 備  考
r rCR リモートモード設定 「l」コマンドが来るまでリモートモードを保持する
この間はセンサの入力は中止
l lCR ローカルモード設定 リモートモードを解除してセンサ入力をする
d d 位相制御位置設定 このコマンドの後にDuty=とメッセージ出力
されます。
データ xxxCR 位相位置指定 実際の位相制御を行う割合を0から255の
値で入力します。

実際に制御した時のハイパーターミナルの出力は下記のようになります。






【プログラムリスト】

プログラムは全てCCS社のC言語で記述しています。
USARTの使い方や、A/D変換の使い方が簡単にできてしまいます。
下記がソースファイルですので、お使いください。
コントローラ本体と液晶表示器のライブラリと2つに分かれています。

今回の液晶表示器のライブラリは、これまでのものと少し変更を加えていて、
レディーチェックをせずループタイマによるディレイだけにしています。
これにより、液晶表示器が実際に接続されていなくても、これまでのように
レディーチェックで永久待ちになってしまうことなく、処理が継続されます。


★ PIC活用パワーコントローラソースファイル






   目次に戻る