« Arduino UNO R4、GPTのレジスタ定義にミス発見 | トップページ | Arduino UNO R4備忘録 »

2025年5月 6日 (火)

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、GPTのレジスタ定義にミス発見 | トップページ | Arduino UNO R4備忘録 »

Arduino UNO R4」カテゴリの記事

コメント

Arduino UNO R4の周波数カウンタを探していました。ありがとうございます。
早速ライブラリ風にアレンジさせていただきました。
自作Arduino UNO R4のオシロスコープに組み込もうと思っています。

https://ss1.xrea.com/harahore.g2.xrea.com/R4/R4_counter.html

投稿: siliconvalley4066 | 2025年5月11日 (日) 20時22分

コメントを書く



(ウェブ上には掲載しません)




« Arduino UNO R4、GPTのレジスタ定義にミス発見 | トップページ | Arduino UNO R4備忘録 »