超音波距離計 Ver2
【概要】
標準的な構成の超音波距離計ですが、オペアンプ内蔵のPIC16F785を使いましたので、
非常に簡単な構成となり、小型化できました。
再製作して小型化し、ケースに実装しました。外観は下記のようになっています。
PICだけで構成されていますので
すっきりとした構成です。
超音波センサ部はケースの外側
に実装しています。
電池には薄型のリチウムイオンバッテリを
使っています。
実際に測定中の画面は下図のようになります。結構安定に表示されます。
小数点以下は無意味なので
表示していません。
これで実測で4mまでは計測できました。
【全体構成】
全体構成は下図のようになっていますが、超音波の送信パルス生成
受信アンプ回路をすべてPICで実行していますので、他のICとしては
電源回路部だけとなっています。
まず、電源はリチウムイオンバッテリを前提としましたので、DC/DC
コンバータ用ICを使って5Vを生成し、全ての電源をまかなっています。
超音波の送信用に必要な40kHzのパルスは、PIC内蔵の2フェーズPWM
を使って相補形式のパルスを出力し、それで超音波センサをプッシュプル
構成で駆動することによりピークピークで10Vの駆動パルスとしています。
超音波受信センサの出力は数mVというわずかの電圧ですので、アンプ
で増幅します。40kHzのパルスの増幅ですので、2段の交流アンプ構成とし、
1段目で30倍、2段目で15倍の構成にして合計450倍の増幅をしています。
アンプの出力をコンパレータに入力し、そのコンパレータのスレッショルドを
PIC内蔵の電圧リファレンスで設定できるようにしています。
これで、ノイズなどが多い場合にはスレッショルド電圧を上げて避けることが
可能となります。
あとは、送信から反射波の受信までの時間を計測すれば、相手の距離が
測定できることになります。
距離測定には、インプットキャプチャを使うことができますが、タイマでカウント
させるだけでソフトウェエでタイマの開始停止を制御することでもできます。
【回路構成】
以上の全体構成を元に作成した回路図が下図となります。PIC周りに抵抗や
コンデンサが多くなっただけで、簡単な構成となっています。
DC/DCコンバータには、最近多用しているマイクロチップのチャージポンプの
MCP1253を使っています。小さなフラットパッケージですので、はんだ面の
余ったスペースに実装できるので便利なチップです。
プログラム書き込み用のICSP用コネクタにはPICkit2用のコネクタの方が背が
低くでき、スペースも少なくできますのでこちらを使いました。
液晶表示器には、余ったピンしか接続できませんので、ばらばらなピンとなって
しまいますが、これはプログラムの方で対応させることにしました。
内蔵オペアンプ部分の回路部分を取り出すと下図のような構成となっています。
標準的な交流アンプの2段構成で450倍のゲインを稼ぎ、出力をダイオードで
検波整流して直流としています。
できるだけ低い電圧から検波整流したいので1N60というゲルマニウムダイオードを
使っていますが、ここは、ショットキバリアダイオードでもOKです。
検波整流後の出力をアナログコンパレータに接続して受信検知出力としています。
このコンパレータの正側には、内蔵電圧リファレンスの出力を一定のスレッショルド
電圧として加えていますが、オペアンプで十分のゲインが得られましたので、2.5V
という結構高めのスレッショルド電圧としています。
これでノイズによる誤動作を避けて安定な動作となるようにしています。
【外観】
PICだけしかありませんので
すっきりした構成になりました。
電源用のDC/DCコンバータは
ハンダ面側に実装しています。
最近は電池から電源を供給する場合の
定番のICとして使っています。
【プログラム概要】
超音波距離計のプログラムはすべてCCSのC言語で作成しました。
距離への変換の計算など浮動小数を扱うのが楽だからです。
多くの内蔵モジュールを使いましたので初期化には注意が必要です。
今回は割り込みを使わずすべてメインループ内で繰り返し実行する構成としています。
注意が必要なことは、超音波センサの応答が返って来なかった場合の無応答の処理を
タイムアウトで検出する必要があることです。
そうしないと永久待ちとなってしまって次の処理に進むことができなくなってしまいます。
このメインループ内の概略フローは下図となっています。
次に液晶表示器の制御ですが、ここでは、DB4からDB7も含めて任意のピン
と接続しても大丈夫なように、全ピン独立の制御ができるようにしました。
これで、ばらばらなピンに液晶表示器を接続しても、定義さえすれば正常に
制御できます。定義は下記のように、ピンを指定するだけです。
この液晶表示器制御用の関数をまとめて独立のソースとしましたので
下記のようにインクルードする必要があります。
/**** 液晶表示用設定 *****/
#define DB7 PIN_A0
#define DB6 PIN_A2
#define DB5 PIN_B6
#define DB4 PIN_A5
#define RS PIN_C5
#define STB PIN_A4
#include <lcd_lib.c>
★★★ 超音波距離計 ver2のプログラム一式