« リョービ製ブロワー BL-3500の銘板 | トップページ | 充電式エボルタお手軽モデル BK-3LLB 充放電800サイクル目通過 »

2021年5月 1日 (土)

Arduino UNOで周波数カウンタ:アナデバの電力計用ICのために

2021年1月15日:アナデバの電力計用IC、arduinoで周波数(周期)を計る
この続きです。
2019年12月20日:Arduino UNOで周波数カウンタ
これ↑ではゲート(タイマー1のインプットキャプチャ)の周波数を
1kHz」としていました。
今回はそれを「1Hz」、つまり「1秒ゲート」にして周波数を計ります。

↑の1月15日の実験では、周波数を計るために(有効電力値が
周波数で出てくる)パルス間の周期を計って周波数を求めて
ました。
ICの仕様では最高周波数が2.8kHzあたり。
これが最大電力となるように、電流検出抵抗の値や
電圧測定の分圧回路を選びます。
1Hzまで計ったとしておよそ11bitの分解能。

前のように周期を計る方が良いか、それとも、ゲート時間を1秒
くらいにして周波数を計る方が良いか・・・
そんな実験のために「1秒ゲート」をこしらえてみました。

こんな回路で実験。
F1

ATmega328Pには3つのタイマーがあって、タイマー1が16bit
タイマー0とタイマー2が8bit
そして、タイマー0がArduinoのシステムで使われていて、
1.024ms周期で割り込みを発生させています。

さらに・・・タイマー0には外部クロック端子がありますが、
タイマー2にはありません。
タイマー2は内部クロックしかカウントできないのです。

「1秒ゲート」を作るためには、こんな回路接続になります。
 ・タイマー2で500Hz方形波を作り、それをタイマー0のクロック
  入力端子T0に接続。

 ・タイマー0はそれを1/250して2Hzを得、OC0Aをトグル出力
  (つまり1/2)して1Hzを作ります。

 ・これをICP1端子に入れて、エッジでキャプチャします。

 ・T1端子に周波数測定するパルスを入れます。

ブロック図で描くとこんな感じ。
F2

システムで使っているタイマー0を横取りしているので、
スケッチではmillis()やmicros()、delay()は使えません
PWM出力もできません。

※参考
2020年1月28日:Arduinoから「タイマー0」を取り上げる(ユーザーが使う)

タイマー2で1ms割り込みを発生させているので、必要な計時処理は
この中に実装しします。

動作確認のためのスケッチを示しておきます。
  ・ダウンロード - pwrmon2.txt
    (ファイルタイプを.inoに変えてくださいな)

液晶に表示するだけでなくシリアルにも出力していますので
簡単に確認できるかと。

皆さんがよく参考にしている
  ・Arduino Frequency Counter Library
これの場合、ソフトウェアでゲート時間を作っているので、
計測処理中に割り込み処理が入ると、カウントが狂って
しまいます。
  ※システムで使っているタイマー0割り込みは
   止めていますが、計測中のシリアル通信はちょい危険。
     送受とも割り込み処理されるんで。
  ※ゲート終了間際に割り込みが入ると、ゲート時間が
   延ばされるので、補正しているカウント値が狂います。
   ですので、割り込み処理は止めて、ゲートの終了をひたすら
   待ち続けるというふうにしておかなくてはなりません。
   つまり、ゲートを動かしている間は何もしない・・・できない・・・

今回のサンプルは、ICP1に入る1Hzパルスのエッジが
ハードウェア的なゲート信号になるので、ソフト的な
遅れの補正は不要です。
カウントが始まれば、勝手に周波数データが上がってき
ます。
新たなキャプチャ完了フラグをチェックしてから(1秒ごと)
 ・いったん割り込み禁止にして
 ・ロングワードの周波数データを読む
 ・割り込み有効に戻す
これで、その時々の新しい周波数データを読み出せます。

なお、Arduino-UNOのクロック周波数(16MHz)でT1クロック入力を
刻んでいるようなので、計測できる最高周波数は実測7.5MHzあたり
で頭打ちになります。
1秒ごとのカウント値として7500000が出てきます。

試作実験中の回路。

F21

※追加実験
2021年5月4日:Arduino周波数カウンタ:FreqCounter Libraryを使った時のカウント異常を再現

|

« リョービ製ブロワー BL-3500の銘板 | トップページ | 充電式エボルタお手軽モデル BK-3LLB 充放電800サイクル目通過 »

電子工作」カテゴリの記事

ツール」カテゴリの記事

Arduino」カテゴリの記事

電力計測」カテゴリの記事

コメント

コメントを書く



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




« リョービ製ブロワー BL-3500の銘板 | トップページ | 充電式エボルタお手軽モデル BK-3LLB 充放電800サイクル目通過 »