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に接続 この出力クロック周波数を切替
・周波数の選択はシリアル入力で。
「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」を取り上げる(ユーザーが使う)
| 固定リンク
「ツール」カテゴリの記事
- マイコン型導通チェッカーの部品(2025.02.21)
- ピンセット、危うし!(2025.01.09)
- EEPROMを使ったシリアル受信バッファ 512kバイトに増設(2024.12.26)
- 充電器用AC100V電源電流モニター回路(2024.12.13)
- DDS方式の2相パルス発生回路、周波数スキャン機能を付ける(2024.10.05)
「Arduino」カテゴリの記事
- UNO R4はanalogWrite(n,128)でデュティー50%の方形波が出るぞ(2025.06.03)
- DDS IC「AD9833」の出力にバッファアンプを(2025.05.27)
- DDS IC「AD9833」をArduino UNO R3で制御(2025.05.25)
- DDS IC「AD9833」の周波数レジスタ書き込みで(2025.05.23)
- Arduino UNO R3で周波数を計る(2025.05.16)
コメント
今日は、時々よらせて貰っています。今回は、ラジオペンチさんの「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分