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」を取り上げる(ユーザーが使う)
| 固定リンク
「ツール」カテゴリの記事
- 「アラルダイト」が無い!(2023.12.05)
- HAKKOダッシュがやってきた:細いコテ先も来たけれど(2023.11.13)
- HAKKOダッシュがやってきた:コテ先の様子(2023.11.08)
- 新ハンダゴテ、HAKKOダッシュがやってきた(2023.11.07)
- 愛用のハンダゴテ・・・コテ先が取れないゾ!(2023.10.27)
「Arduino」カテゴリの記事
- Arduinoで「ボコスカハンマー」 あれれれれっ?!(2023.12.07)
- Arduino UNO R3で±19.9V表示電圧計(2023.10.14)
- 「御詠歌プレーヤー」の製作 (MP3-TF-16Pモジュールの使用例)(2023.08.10)
- Arduino UNO R3のソケット・・思えば違和感がぁ(2023.07.07)
- 初めて買ったArduino UNO・・・今は(2023.05.25)
コメント
今日は、時々よらせて貰っています。今回は、ラジオペンチさんの「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分