Arduino UNO R3で周波数を計る
UNO R3での周波数計測回路、過去、あれこれ作ってきました。
その応用で、トランジスタ技術2025年6月号 に
「VCO回路V-f特性の自動スイープ測定器」というタイトルで、
VCOの制御電圧を変えながら出てくる周波数を計るという
回路を載せてもらいました。
これの発端が、
・2019年12月20日:Arduino UNOで周波数カウンタ
・2021年5月1日:Arduino UNOで周波数カウンタ:アナデバの電力計用ICのために
今回のトラ技記事でも、タイマー1(16bit)のインプットキャプチャ
機能で周波数カウント用のゲートを作っています。
しかし、そのキャプチャ周期を1msとして、前回値との差分で
出したカウント値を積み重ねて、周波数としています。
10ms(100Hz)ゲートなら1msを10回。
0.5秒(2Hz)ゲートなら1msを500回。
ゲート時間の基本単位が1msで、好きな周期で周波数が
得られます。
※低周波なら周期計測のほうが良いのですが
それはまた別問題。
アナデバの電力計では、ハードウェアで1秒のゲートパルス
を作りましたが、今回のは1ms=1kHzというATmega328Pでも
出しやすい周波数です。
タイマー1個で作れる
無符号で加算すれば、タイマーカウンタのオーバーフローを
無視して積算することができます。
こんな具合です。
これで、1ms=1kHzのゲート時間を作っておけば、その整数倍で
いくらでも好きなカウント時間に拡張できます。
インプットキャプチャで得られた総パルスから周波数を
求められるので、0.1秒(10Hz)周期で得たカウント値を
この場合は10Hzが最小桁
10回の移動平均しながら処理すれば、1秒ゲートと同じ
最小桁1Hzの周波数が0.1秒ごとにえられます。
周波数の変化を見るとき、1秒待たなくても0.1秒ごとに
動きが分かります。
電力計では1秒のを10回移動平均して、
0.1Hzを読んでます。
| 固定リンク
「Arduino」カテゴリの記事
- tinyAVRのシリアル出力(だけ)を割り込みでというライブラリ(2026.03.22)
- ATtiny1614:タイマレジスタの初期設定を見る(2026.01.06)
- ラジオペンチさんの「ダイソーのゆらゆらLEDキャンドルライト」#2(2025.09.15)
- ラジオペンチさんの「ダイソーのゆらゆらLEDキャンドルライト」(2025.09.11)
- ATtiny402サンプル:"Wire.h"を使わずI2Cで液晶表示 AQM1602だと(2025.09.09)
「トランジスタ技術」カテゴリの記事
- トラ技の次号予告に「741」(2026.06.07)
- オペアンプの特集じゃなかった:トラ技、通巻741号(2026.05.09)
- トランジスタ技術付録「エンジニア手帳2026」(2026.03.10)
- トランジスタ技術2026年3月号(2026.02.06)
- 備忘録:1Hzパルス発生回路(2026.02.01)


コメント