« Arduino PWM波形のデューティー比測定 妥協点 | トップページ | パナソニックeneloopスタンダード単3、JIS C8708:2019充放電テスト720サイクル目 »

2020年8月24日 (月)

Arduino PWM波形のデューティー比測定 これで完成形か?

とりあえず「シリアル出力」するデューティーサイクル
測定回路、これで完成形にしておきます。

・プログラム  ダウンロード - duty_checker4.c
  ※ファイルタイプを「.c」にしています。
   「.ino」だとArduinoのIDEが立ち上がっちゃうんで。

※改善点

・タイマー1のインプットキャプチャーでのカウント
 を16bitに。
 オーバーフロー割り込みとの衝突が無くなったので
 短パルスのミスが改善。 2μsのパルスも安定。

・しかし、16bitカウントにすると、低い周波数だとオーバー
 フローしてしまい、測定できなくなる。
   ※これを避けるために32bitカウントにしてた。
 そこでタイマー1のクロック(↑↓エッジでこれを数える)
 を16MHzだけでなく、外部からクロックを供給するように
 した。
 このクロックを下げると、低い周波数でもデューティーの
 測定ができる。
 
・Arduino UNOのD5とD11をつなぐ
      D5 PD5 T1    クロック入力
      D11 PB3 OC2A   8MHz~100kHzクロック出力

  タイマー1:インプットキャプチャー ICP1入力
   16MHz内部クロックあるいはT1外部クロック入力を切替

  タイマー2 :1/1でCTCモード OC2Aで方形波発生
   これをT1に接続 この出力クロック周波数を切替

Pp1

・周波数の選択はシリアル入力で。
 「0~7」の数字を入力すると切り替え。
   0 : 16MHz
   1 :  8MHz
   2 :  4MHz
   3 :  2MHz
   4 :  1MHz
   5 : 500kHz
   6 : 200kHz
   7 : 100kHz
 この8種類。 1Hz程度でもカウント可能。

・測定例 9600bpsでシリアル出力
  Duty cyc checker (2020-08-24) ←起動メッセージ
  CLK=16MHz            ←初期値
   12.50%  0.250kHz  8000 56004
   12.50%  0.250kHz  8000 56004 ←1秒ごとに表示
   12.50%  0.250kHz  8000 56003
  CLK=8MHz            ←1 数字入力
   12.50%  0.250kHz  4000 28002
  CLK=4MHz            ←2
   12.50%  0.250kHz  2000 14001
  CLK=2MHz            ←3
   12.50%  0.250kHz  1000 7001
  CLK=1MHz            ←4
   12.50%  0.250kHz  500 3500
  CLK=500kHz           ←5
   12.50%  0.250kHz  250 1750
  CLK=200kHz           ←6
   12.50%  0.250kHz  100  700
  CLK=100kHz           ←7
   12.50%  0.250kHz   50  350
  CLK=16MHz           ←0
   12.50%  0.250kHz  8001 56003
    |    |   |  +-- L区間パルス数
    |    |   H区間パルス数
  デューティ比 周波数

  Overflow pulse  ↑↓エッジ間に2回以上の
           タイマー1のオーバーフロー
           が起こった。
  No pulse     1秒内に入力パルスが無い。

※その他
 ・ICP1以外の割り込みは禁止。
 ・システムタイマーのタイマー0の割り込みも止めてるんで、
  一部のタイマー関数は使えない。
 ・シリアル送受信も独自のもので。
    serial.printは割り込みを使うんで。


※関連
Arduino PWM波形のデューティー比測定 妥協点
Arduino UNOのPWM出力を(ちょっと精密に)確かめる
Arduinoから「タイマー0」を取り上げる(ユーザーが使う)


|

« Arduino PWM波形のデューティー比測定 妥協点 | トップページ | パナソニックeneloopスタンダード単3、JIS C8708:2019充放電テスト720サイクル目 »

ツール」カテゴリの記事

Arduino」カテゴリの記事

コメント

 今日は、時々よらせて貰っています。今回は、ラジオペンチさんの「GPSとArduinoでRTCの誤差(確度)を精密測定」のページに居酒屋ガレージ店主(JH3DBO)さんがコメントした「タイマー1のインプットキャプチャ機能で誤差を測定する」に興味を持って飛んできました。コメント欄に寄稿したゲート信号の回路案を使い、このページの測定プログラムを使えばより詳しく誤差を調べられるのか?と興味を持っています。
 目的は、GPSと基準周波数の比較なのですが、1ppsで比較するか、100K、10Mで比較するかなど何かアドバイスを頂ければ幸いです。

投稿: papa | 2020年11月10日 (火) 16時31分

これも参考になるでしょうか。
http://igarage.cocolog-nifty.com/blog/2019/12/post-8ded09.html
2019年12月20日:Arduino UNOで周波数カウンタ


投稿: 居酒屋ガレージ店主(JH3DBO) | 2020年11月11日 (水) 08時27分

 早々のご返事有り難うございます。「Arduino UNOで周波数カウンタ」も含めて勉強します。

投稿: papa | 2020年11月11日 (水) 10時37分

コメントを書く



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




« Arduino PWM波形のデューティー比測定 妥協点 | トップページ | パナソニックeneloopスタンダード単3、JIS C8708:2019充放電テスト720サイクル目 »