コンパレータの使い方 


【コンパレータとは】

2つのアナログ信号入力の大小によりデジタル出力をHigh/Lowにする機能を持つ
アナログアンプの1種です。
高速に変化するアナログ信号の変化に追従するように高速で動作することと、
非常にゆっくり変化するアナログ信号に対しても安定に動作することが求められます。

コンパレータはPIC16F1ファミリの多くのデバイスに実装されていますが、PIC16F17xx
ファミリに実装されているコンパレータが最も高機能ですので、このコンパレータの
使い方について解説します。

【コンパレータの内部構成】

 PIC16F17xxファミリに内蔵されているコンパレータの内部構成は下図のようになっています。
結構複雑な構成をしていて、特に入力信号には多くの種類が選択できるようになっています。






 このコンパレータの特徴は次のようになっています。

@ 豊富な種類の入力から選択できる
  コンパレータのプラス、マイナスいずれの入力も、いくつかの信号から選択ができるようになっています。
  外部ピンからの信号だけでなく、内蔵のD/Aコンバータ出力や、定電圧リファレンスも選択できるように
  なっていますので、コンパレータのリファレンスとして自由度の高い設定ができます。
  ファミリにより、選択肢が異なっていますので、データシートで確認して使う必要があります。

A 入出力ともRail to Rail
  入力電圧、出力電圧ともに、ほぼ0VからVDDまで使うことができます。

B 高速モードと低速モードの切り替えが可能
  レジスタ設定により、高速で標準電力のモードと、低速で低消費電力なモードが選択できます。
  高速モードでは最高60nsecで動作しますが、低速モードでは300nsec程度の動作速度となります。

C ヒステリシスの切り替えが可能
  ゆっくり変化する入力信号で出力が発振しないようスレッショルドにヒステリシスを設けることができます。
  ヒステリシスを有効にすると、標準で45mVの電圧差が設けられます。
  これで、例えばいったんHighになると、スレッショルドより45mV以上低くならないとLowにはならないように
  なっています。これで、非常に変化が緩やかな入力の場合でも、出力がバタつくことがないようになっています。

D 短時間パルスのフィルタによる抑制
  フィルタを有効にすることで、非常に短時間のパルス状の出力を抑制することができます。

E 出力の有効活用
  コンパレータの出力は外部ピンに出力できますが、それ以外に多くの内部モジュールと連携動作をさせる
  ために使うことができます。
   ・割り込み コンパレータ出力の立ち上がりか立下りを選択できる
   ・PSMCモジュールのフォルト信号とすることができる
   ・タイマ1のゲート信号として使うことができる



【コンパレータ制御レジスタ】

コンパレータを制御するために用意されているレジスタは下図のようになっています。
ここでxは1、2、3、4のいずれかとなります。
ただし、コンパレータの3と4は40ピンデバイスのみに実装されています。




これらのレジスタを使ってコンパレータを使うときには、次のように設定します。

 @入力信号を選択する。
   外部ピンまたは内部電圧リファレンスを選択します。
   外部ピンを使う場合には、ANSELxレジスタでアナログピンと設定し、
   TRISxレジスタで入力モードにする必要があります。

 A 出力極性を選択する。
   CxPOLと入力信号により上図の表のような出力になりますから適切な選択をします。

 B 出力の指定。
   コンパレータの出力を外部出力する場合には、CxOEビットをセットして有効とします。
   この場合にはTRISxレジスタで出力ピンとする必要があります。
   またデジタルピンに設定する必要もあります。

 C ヒステリシス、フィルタの設定。
   必要な場合にはこれらの設定を有効化します。

 D コンパレータを有効化する。
   最後にコンパレータ自身を有効化して動作を開始します。

 E 割り込みを使う場合
   立ち上がりか立下りかを選択します。さらに下図の割り込み許可ビットで
   割り込みを許可する必要があります。フラグのクリアも必要になります。




【プログラム例】

実際にコンパレータを使ったプログラム例は下記のようになります。
この例はPIC16F1783を使い下図のような構成で周波数カウンタを構成したときの
初期設定の例になります。

コンパレータ周りで設定が必要なのは、コンパレータ本体と、プラス側の基準入力に
定電圧モジュール(FVR)と8ビットD/Aコンバータの出力を使いましたのでこれらの
設定が必要になります。

これでマイナス側入力にコンデンサ経由で入力される交流入力に対し、D/Aコンバータ
のスレッショルド電圧でコンパレータが動作しデジタルパルスに変換します。
このパルスの数を1秒間だけTimer1でカウントして周波数を求めています。

これらの動作は初期設定で設定すれば、後はそのままプログラムに関係なく動作
を継続しますので、初期設定だけで済んでしまいます。



この場合のコンパレータ周囲の初期設定が下記となります。このデバイスでは、
COUTの出力ピンを選択できますのでAPFCONレジスタでピンを選択しています。