目次>5章 第2ステップ(色々な実験)> (20)簡易A/D変換(積分回路の応用)

簡易A/D変換
− 積分回路の応用 −

更新日2008.9.7

当HPで扱っているPICの内、PIC16F84AだけはA/D変換機能を持っていません。
(A/D変換:電圧などのアナログ値をPICなどで扱えるデジタルデータに変換する事)

そこで、積分回路を使った簡易的なA/D変換の実験を行います。
ここでの目的は、電圧を正確に測定するのでは無く、可変抵抗のつまみの回し加減をPICで判定できるようにする事です。 これができれば、84Aでもジョイスティックでサーボモータをコントロールするような事が可能になります。

微分回路と積分回路
A/D変換に入る前に、微分回路と積分回路の動きを見てみます。

微分回路

回路図の点線で囲んだ部分が微分回路です。
コンデンサと抵抗だけの単純な回路です。

それでは、この微分回路に矩形波を与えて見ましょう。
緑はRA0(微分回路の入力),黄色はout(微分回路の出力)の波形です。

入力の矩形波の立ち上がりに合わせて微分回路の出力も立ち上がりますが、5Vまで行った後一気に0Vに戻ります。
また、入力の矩形波の立ち下がりに合わせて微分回路の出力は、一旦−5Vまで行った後一気に0Vに戻っています。

0Vに戻る時間は、
コンデンサの容量×抵抗値
により変わります。

積分回路

次は積分回路です。微分回路の抵抗とコンデンサを入れ替えた回路になっています。

この積分回路に矩形波を与えて見ます。
緑はRA0(積分回路の入力),黄色はout(積分回路の出力)の波形です。

入力の矩形波の立ち上がりに合わせて積分回路の出力も立ち上がりますが、やや遅れて立ち上がります。
また、入力の矩形波の立ち下がりに合わせて積分回路の出力も立ち下がりますが、同様にやや遅れて立ち下がっています。

積分回路の抵抗を5KΩに変更すると下のようになります。
1KΩの場合よりも、遅れが大きくなっています。

積分回路の出力の遅れは、コンデンサの容量×抵抗値により変わります。
今回の簡易A/D変換は、この遅れ具合を使います。

回路図

前書きが長くなりましたが、いよいよ簡易A/D変換の実験に入ります。

今回の実験回路です。
PICの左側が積分回路、右側はLCDを使った表示回路です。

RA3から矩形波を出力し、左の積分回路を通し、結果をRB0/INT割込みで検出します。
LCDはSD1602を使いましたが、SC1602でもピン配置が異なるだけで使用可能です。

 OSC1/OSC2には20MHzのレゾネータを接続します。

ブレッドボードに組んだ状態。

プログラムの考え方

積分回路の波形をイメージ的に現したものが以下の図です。特に立ち上がりに注目しています。

図の中に、閾値4Vとありますが、RB0をINT割込みで使う場合、シュミットトリガ入力となり4Vで割込みが発生します。(立ち上がりで割り込む設定の場合)

RA3から出力する矩形波
RA3に1をセットしてから、(1)の時間経過後にINT割込みが発生します。
抵抗値を大きくすると、(2)のようにINT割込み発生までの時間が長くなります。

プログラム

今回のプログラムはこちらです。

INT割込みを有効にし、RA3に1をセットした直後から「AD_counter」をカウントアップし続けます。
そして、INT割込みが発生したら、カウントアップを中止し、「AD_counter」の内容を16進数でLCDに表示します。

可変抵抗のつまみを回すと、LCDに表示される値が変わると思いますがどうでしたか。

感想など

正確に電圧を測定すると言った目的でなければ、A/D変換機能を持たないPIC16F84Aでも簡単にA/D変換ができます。

ある程度正確に電圧を測定(0.02V程度)するのであれば、基準電圧ICD/A変換,コンパレータを組み合わせれば可能です。 ですが、わざわざ難しい回路を組むよりも、PIC16F84A以外のPICを使った方がより簡単にできます。

それはさておき、この実験回路とプログラムは後で応用する可能性が大ですので、実際に動きを確認しておいて下さい。 どこで使うかは内緒です。(想像つくかも知れませんが)