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」を取り上げる(ユーザーが使う)
| 固定リンク
「ツール」カテゴリの記事
- デジタルテスター「FLUKE 87IV」の赤外線通信(2022.06.29)
- 「UART←→IrDA」変換IC、MCP2122を検索すると(2022.06.27)
- DC-DCコンバータテスト回路の資料(2022.05.31)
- 工具に「ゴムコーティング」を(2022.05.30)
- 電卓の機能 知らなかった:「÷=」で「1/X」に(2022.03.29)
「Arduino」カテゴリの記事
- 「UART←→IrDA」変換IC、MCP2122のクロック供給(2022.06.20)
- 秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す) #2(2022.06.18)
- 秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す)(2022.06.17)
- 4046・VCO回路の直線性改善方法その2(2022.06.13)
- 「ダイソーの観覧車」を回せ! 回路図(2022.05.08)
コメント
今日は、時々よらせて貰っています。今回は、ラジオペンチさんの「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分