動かないQY20の調査をするときに、パルスがでているのか、知りたい時が時々あります。そういう場合は安物ロジアナを使いますが、準備と操作が面倒でした。昔買った安物テスターに周波数カウンタがあり、それを使うほうが便利なのですが、精度がかなり悪いです。
ということで、疑似的な周波数カウンタを作ることにしました。疑似的というのは、パルス長やduty比などを測ることはできず、単に一定間隔でのパルス数を出すだけです。
以前作成した、汎用のセンサー表示回路を流用します。センサー入力部分を信号入力に変更し、立ち上がりを割り込み検知、カウントします。回路作成、プログラム変更含め、2時間位でできました。
CPUは、PICで32MHz(PICは4サイクル処理なので、実質8MHz)のため、割込み処理に40ステップかかるとしても、200kHzまでしか測れません。そのため、パルスを分周するカウンタ回路(2,16,32,64,128,256,512,1024,2048,4096分周)を、信号入力の前段に接続するようにしました。
2バイト(0xFFFF)までカウント、ボタンで表示桁切替、HEX表示、1/10単位のカウントとしています。実際には表示処理含め、12kHz程度が限界のようです。
分周する前段回路で、4096倍までカウントできるので、50MHz程度まではカウントできそうですが、分周に使ってるカウンタ回路の限界が、66MHz前後なので、そのあたりが限界ですね。
QY20のLCD表示用の制御信号を計測してみました。(1/10s計測なので、10倍した値)
- FLM信号(約70Hz):0x07~0x08(70Hz~80Hz)
- CP1信号(約4484Hz):0x01F2~0x01F3(4980Hz~4990Hz)
- CP2信号(変則で約2.4MHz):0x2EA4~0x2EA9(約1.9MHz)分周は2^4
CP2信号が、かなりズレています。カウントと表示を並行しているため、カウントクリアのタイミングがバグってると思われます。要修正ですが、QY20での断線チェックには使えそうです。
<追記>
プログラム修正しても、CP2は、0x2EC9程度で、誤差は0x20カウント程度でした。よくよく考えると、分周しているため、カウントの切り捨てが発生しています。なので1.9MHzから3.8MHzの間ということになります。4分周、8分周できれば、精度が上がったと思います。