ZCD(ゼロクロス検出)の使い方 


【ゼロクロス検出とは】

 ゼロクロス検出 ZCDは最新の8ビットファミリに実装された周辺モジュールで、
AC100VからAC240Vを抵抗1本経由するだけで直接入力し、交流のゼロボルトを横切る
タイミングを検出できるモジュールです。
トライアック駆動や周波数カウンタなどに便利に使えます。

【ZCDの内部構成と動作】

ZCDモジュールの内部構成は下図のようになっています。

外部からの交流電圧は直列抵抗を経由してZCDxINピンに接続されます。

そしてこのピンがリファレンス電圧(0.75V)以上になると内蔵電流源からマイナス側の電流が追加されます。
逆に、リファレンス電圧以下になると内蔵電流源からプラス側の電流が追加されます。
こうしてピンの電圧が一定になるように制御されます。これによりピンの保護ダイオードが動作しないようにしています。

この内蔵電流源の切り替えタイミングがZCDの出力となってゼロクロス検出信号となります。
この検出により割り込みが発生します。また外部へデジタル信号として出力することもできます。
さらに他の内蔵モジュールへの入力として使うこともできます。

直列抵抗の値は下記計算式で求められます。つまり電流源からの電流が±300μA以下になるようにする
必要がありますので、交流電圧の最大値(Vpeak)のとき300μAになるような抵抗を求めることになります。
この電流値は±600μAが最大定格となっていますので、多少の誤差は構いません。

  R = Vpeak ÷( 3×10-4 ) (Ω)




【ZCD制御レジスタ】

ZCDモジュールに関連するレジスタは下図となります。
ZCDを使うときの手順は下記のようにします。

@ コンフィギュレーションでZCDを有効化する
  コンフィギュレーションで有効化すると常時有効となりZCDxCONレジスタのZCDxENビット
  による制御は無効となります。

  #pragma config nZCD = ON // Zero Cross Detect Disable Bit (ZCD always enabled)

AZCDxCONレジスタで外部出力の有効/無効を設定

B割り込みを使う場合
 ・ZCDxCONレジスタで立ち上がり、立下りを指定
 ・PIE1レジスタのZCDIEビットを1にして割り込み許可
 ・INTCONレジスタのPEIE、GIEビットを1にして割り込み許可

CZCDxCONレジスタのZCDxENビットを1にして動作開始



【使用例】

実際の使用例です。商用AC100Vの周波数を計測する例題です。
最新デバイスのPIC16F1613を使っています。

ZCDと信号計測タイマ(Signal Measurement Timer(SMT))を使っていて、回路は下図のようにしています。
AC100Vを330kΩの抵抗を経由して直接PICのピンに接続しています。
この抵抗値は計算では470kΩ程度になるのですが、安定に動作する値に変更しています。
このZCDの出力を内部でSMTモジュールへの入力としています。

この周期をSMTの24ビットタイマでカウントします。カウントクロックはFsocの32MHzになりますから
周期を31.25nsec単位で計測することになります。32MHz÷50Hz=640000 カウントということになりますが
24ビットカウンタなら余裕でカウントできます。。





完成したボードの外観が下図となります。PIC16F1613を32MHzで動作させていますので、
50Hzを50.0000と小数点4ケタまで表示できます。
SMTが24ビットのカウンタですので、この桁数でも十分対応できます。




【プログラムダウンロード】

上記例題商用周波数カウンタのプログラムは下記からダウンロードできます。

 
  ★★★ 商用電源周波数カウンタのプロジェクト1式 ダウンロード ★★★