Arduino UNO R4互換:RA4M1コアボードで周波数カウンタ
32bitの汎用PWMタイマ「GPT1」を使って、
インプットキャプチャによる周波数カウンタを
試してみました。
計測値の出力はシリアルで
クロック入力 :D2 P105 GPT1A
キャプチャ入力:D3 P104 GPT1B
1Hzパルス出力 :D5 P102 GPT2B
D2がクロック入力で、ここに入れたパルスの↓エッジ
を32bitでカウントアップします。
D5の1Hzパルス出力をD3のキャプチャ入力とつないで、
この↓エッジでGPT1のカウント値をキャプチャします。
つまり物理的な1秒ゲートになるわけです。
キャプチャタイミング(1秒ごと)に、前回のキャプチャ値
との差を計算すれば、それが1秒間のパルス数で、
すなわち周波数となるわけです。
ここで問題。
内蔵クロック発振器か水晶発振(PLL)を使うかで
安定度が変わります。
※カウントの精度は別問題
カウントしたクロック源は
2025年1月28日:パルスジェネレータをI2C液晶で動かす
これで8MHz(最大周波数)を出してます。
まず、内蔵クロック発振器(PLLなし)の場合。
8000.143kHz 1秒ごとに周波数が出てきます
8000.164kHz
8000.155kHz
8000.150kHz
8000.165kHz
8000.160kHz
8000.150kHz
8000.161kHz
8000.162kHz
8000.154kHz
これだけ変動します。
それが、PLLを働かせると、
8000.024kHz
8000.024kHz
8000.023kHz
8000.024kHz
8000.024kHz
8000.024kHz
8000.023kHz
8000.024kHz
8000.023kHz
8000.024kHz
8000.024kHz
8000.023kHz
と、1カウントの変動に。
どこまでカウントできるのかは適当な
発振器がないのでまだ試していません。
とりあえず、わたりの電線(D3とD5)を一本つなぐ
だけで周波数カウンタができるということで。
UNO R4応用のサンプルになりますかな。
■制御スケッチ
・ダウンロード - gpt1_cap01.txt
(.inoではなくテキストファイルにしています)
※どこまでカウントできるか
手持ちの発振素子で試したところ、
10.24MHzはOK。 でも、12MHZだとアウト。
クロック入力となる「D2 P105 GPT1A」ポート、
upカウント「GTETRG」入力として使っています。
これが「POEGモジュール」を介してカウンタに
つながります。
「ノイズフィルタ」として「PCLKBで3回サンプリング」と
なっているので、これでカウントの上限が決まってしまいます。
1秒ゲートだと、カウンタが16bitだと32kHzが最大
カウントになるところ、タイマー1が32bitなんで、計数が
ラクチン。
※参考
・2019年12月20日:Arduino UNOで周波数カウンタ
・2021年5月1日:Arduino UNOで周波数カウンタ:アナデバの電力計用ICのために
ATmega328pだと1秒ゲートを作るのがたいそう
※追実験
「POEGモジュール」を通さず、GTIOCAをカウントアップの
直接入力にした周波数カウンタを試してみました。
GTIOCAとGTIOCBは2相パルスu/dカウントの
入力で使われます。
片相(B側入力)をHに固定してupカウントのみにしました。
キャプチャは1秒ゲートを作っているタイマ2のオーバーフロー。
これをELC(イベントリンクコントローラ)で取り込んで、
カウンタ1カウント値のキャプチャにしました。
すると・・・カウントの上限速度がアップ。
24MHzはダメですが、20MHzを数えられるようになりました。
■制御スケッチ #2
・ダウンロード - gpt1_cap02.txt
カウントしたいパルスをD2に入れるだけ。
D3はオープンで(プルアップでHレベル)
D5に1Hzは出てるけどゲート信号の接続は不要。
| 固定リンク
「Arduino UNO R4」カテゴリの記事
- Arduino UNO R4 minimaに12MHz水晶を(2025.06.09)
- Arduino UNO R4で2つの1Hz信号の位相変化を見る(2025.06.06)
- UNO R4はanalogWrite(n,128)でデュティー50%の方形波が出るぞ(2025.06.03)
- Arduino UNO R4 minima 電源供給方法でクロックが変わる#6(2025.06.02)
- Arduino UNO R4 minima 電源供給方法でクロックが変わる#5(2025.06.01)
コメント
Arduino UNO R4の周波数カウンタを探していました。ありがとうございます。
早速ライブラリ風にアレンジさせていただきました。
自作Arduino UNO R4のオシロスコープに組み込もうと思っています。
https://ss1.xrea.com/harahore.g2.xrea.com/R4/R4_counter.html
投稿: siliconvalley4066 | 2025年5月11日 (日) 20時22分