2010年4月25日日曜日

タコメーターの製作

モーターの回転数を知りたくて、タコメーターを作ることにした。

PIC16F468Aを使い、レシプロカル方式でカウントする。周波数カウンタの応用で、その表示をRPMにしたもの。
最低57RPMから最高85万RPMまでカウントできる。

レシプロカル方式というのは、入力信号の周期を測定して周波数(ここでは回転数)に変換し表示するもの。
通常の周波数カウンタは、1秒や0.1秒の時間内のパルス数をカウントする方式が使われている。これは高周波の計測には便利だが、低周波になると計測時間が長くなるという欠点をもつ。一方、レシプロカル方式だと、周期を測定するので、低周波でも、最低1周期だけ計測すれば良くなるので、計測時間のロスが少なくなる。反対に高周波の計測は難しいという欠点をもつ。

小型のDCモーターの回転数は、数百~数万RPM。周波数にすると、大体1Hz~1000Hz程度なので、レシプロカル形式の方が都合が良い。

回転センサーには、こわれた古いマウスについているフォトインタラプタを利用することにした。








フォトインタラプターを取り出したところ。

このフォトインタラプターだけだと信号が弱すぎるため、アンプで信号を増幅した後、PICに入れることにする。

今回は、以前作った周波数カウンターで使った2石アンプが実績があるのでこれにした。

この2石アンプは、初段が2SK941、2段目が2SC1815のエミッタ接地。
初段のFETで高入力抵抗にしている。

当初、オペアンプで作ろうとしたのだが、経験不足もあって信号がうまくとりだせなかった。
フォトインタラプターにつなぐ抵抗が大きいほど信号の振幅が大きくなるという特性があったため、1Mオームの出力抵抗となっている。それに対応するため、初段の入力抵抗も1Mオームとなっている。このフォトトランジスタは大きな電流を流せないのかも知れない。

テストのために、パルスジェネレーターで100msec周期の信号を入れたところ。これはパルスジェネレーターで設定できる最大値。
599RPM=9.983RPS
1/RPS = 0.100166944sec
本当なら600RPMになるはずが、周期を回転数に変換する際に割り算を使うため、多少の誤差が出ているようだ。

今度は、80usec周期。これ以上短い周期、たとえば50usecだと、最上位の桁が表示されないことになるので、ほぼこれが上限近くの値。

周期から回転数に変換する際に端数が出ない場合は、画像のように綺麗な値が出る。
750000RPM=12500RPS
1/RPS = 0.00008sec

回路図

ちなみに、この回路はA/D変換の実験をするためにボリュームがついている。これはタコメーターの機能には必要ないものである。





アセンブラソースコードと回路図はこちら

0 件のコメント:

コメントを投稿