Maker Faire Tokyo 2023 がもうすぐです。そんな中、久しぶりにマイコンで何かを作ろうと思い、インターネットで検索していたところ、YouTube で面白い周波数カウンターの製作動画を見つけました。手持ちのパーツで簡単にできそうだったので、早速、ブレッドボードで試作してみました。
この周波数カウンターは、STM32 マイコンを中心に動作します。驚くべきことに、主要なカウンターの機能はマイコンが全て担っており、STM32 マイコン以外に必要なパーツは、信号入力用のコンデンサ1個だけです。そのため、非常にシンプルな構成で、短時間での動作確認が可能です。
周波数範囲:0 ~ 30 MHz
入力信号:0.5 ~ 3 V
※ この回路では、入力信号に 3.1V 以上ないと反応しないので注意してください。
この rcl-radio のオリジナル回路を使った方がいいと思います。
STM32 マイコンは手持ちの STM32F103C8(@200円程度)を使いました。このマイコンのブートローダやプログラムの書き込みについては、当ブログの過去記事(2017/01/30)を参考にしてください。
ハードの接続は簡単ですが、この STM32F103C8 のプログラム書き込みまでが、少々面倒かもしれません。
done. が表示されれば、プログラムは正常に書き込まれています。
プログラムの動作概要
周波数カウンターの具体的な動作ですが、STM32 マイコンの3つのタイマー(TIMER1、TIMER2、TIMER3)を上手に活用しています。
1つ目のタイマー(TIMER2)で、入力信号の周期やパルス幅を計測して、2つ目のタイマー(TIMER3)で、特定の時間内にいくつのパルスが存在するかをカウントアップします。そして、3つ目のタイマー(TIMER1)で、一定の時間間隔でオーバーフローを発生させ、そのタイミングで TIMER3 の値を読み取り、リセットします。
周波数(Hz)は、TIMER3でカウントアップした数を、TIMER1 の時間間隔で割って計算し、最後に、結果を7セグメント LED に表示しています。
計測結果
1Hz から 30MHz までの信号を入力して、表示させてみました。入力する DDS 信号は JDS6600 を使用しました。
下は 44Hz から表示しました。
100Hz
1KHz
10KHz
100KHz(-3Hz)
1MHz(-32Hz)
10MHz(-326Hz)
30MHz(-1.4MHz)
測定周波数によって誤差が小さく校正できるように、プログラムを修正するといいと思います。
以上、何かの参考にしてください。