JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

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

2019-11-16 12:10:08 | micro:bit

 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を使えば、こんなこともできるのでは、と思って作ってみました。



最新の画像もっと見る

コメントを投稿