Micro:bit MicroPython urimeを使ったレシプロカル式周波数カウンタ

2019.11.16 JH7UBC


MicroPythonのutimeモジュールには、現在の時刻の取得、時間間隔の測定、遅延などの関数があります。
詳細は、ドキュメンテーションを見ていただくとして、この関数を利用して、周波数カウンタを試作してみます。
タイトルのレシプロカル式とは「逆数式」のことで、信号の周期を測定して、f=1/Tの関係から、周期の逆数を計算して周波数を求める方式です。
pin0のデジタル入力を利用し、その前に簡単なアンプをつけました。
pin0の電圧が1から0に変化する時の時刻(start_timeとend_time)を測定して、時刻の差をとれば、1周期の時間を測定できます。
周期をus単位で測定し、f(Hz)=1000000/T(us)で計算すると周波数f(Hz)を測定することができます。

スクリプトです。

呼び出した時点でのmicro:bitの稼働時間をusで返す関数が、utime.ticks_us()です。
1周期は、start_timeとend_timeを測定し、utime.ticks_diff(end_time, start_time)関数で、その時間差(周期)を計算します。
計算したperiod(周期)は、小数点がついていますので、int()で整数化してからスクロール表示します。
自作SGから100Hzの信号を出して、micro:bitで実測してみました。

97Hz〜103Hz程度(誤差3%)の値を表示しました。
周波数がほぼ、正しく表示されるのは、10Hz〜200Hz程度で、500Hz程度までは、それらしい数値を表示します。
この周波数カウンタは、実用になるものではありませんが、utimeを使えば、こんなこともできるのでは、と思って作ってみました。

inserted by FC2 system