Arduino PWM波形のデューティー比測定 妥協点
あれこれ試してきましたが・・・
仕様的な妥協点を。
・最低測定周波数を下げる。
現在は16MHzクロックを32bitのカウンタで
数えています。
本来、ATmega328Pのタイマー1は16bit。
これを拡幅するために、オーバーフロー割り
込みで32bitの上位桁をカウントアップしてる
わけです。
この処理がインプットキャプチャー割り込み
の応答を遅らせています。
ということは、16bitカウンタだけにして
オーバーフロー割り込みを無くせば、
短パルス測定時のじゃまが無くなります。
その場合、16MHz/65536で約244Hzが1周期。
タイマー1,2のanalogWriteのPWM周期、約490Hz
もカウントできるかっと。
・低い周波数を計りたい時は
インプットキャプチャーしているタイマー1の
クロック周波数を下げれば対応できます。
16bit分解能は同じ。
TCCR1Bのプリスケーラ選択で、
1/1 1/8 1/64 1/256 1/1024
が選べますが、ちょいと飛びすぎ
T1入力を外部クロックにできますんで、ここに
タイマー2のアウトプットコンペア出力をつないで
おけば、
内部で1/1=16MHz 1/8=2MHz
外から8MHz 1MHz 100kHz
などとして、カウントクロックを選べます。
まぁ。こんなところでしょうか。
ArduinoのanalogWriteが出すデューティを計るということで、
あれこれ試しました。
しかしこの実験、もう一つ別の目的があるのです。
旭化成のAK7401 という磁気センサー。
(360度グルグル回ります)
このIC、周波数1kHzのPWM出力で回転角を出力するのです。
その検証用ジグの試作に絡むのです。
2019年9月29日:360度グルグル回したろ
↑は3線デジタルでしたが、PWMでも出ているのです。
・PWMの良い所・・・フォトカプラで絶縁できる。
※関連
・ インプットキャプチャー割り込みを「ISR_NAKED」で (デューティー比測定)
・Arduino デューティー計測のためのインプットキャプチャータイミング
・Arduino UNOのPWM出力を(ちょっと精密に)確かめる
・14pinのAVRマイコン、ATtiny24が動かん!
↑ これはPWM出力
※豆知識
Arduino、「analogWrite」のPWM周波数、
タイマー0が約980Hz。
タイマー1と2が約490Hz。
と、記されています。
なぜこの周波数か・・・もうちょい桁を増やして・・・
タイマー0は 16MHz÷64÷256で976.5625Hz
タイマー1と2は 16MHz÷64÷255÷2で490.1960784Hz
これそのままだと中途半端な周波数と感じますでしょう。
でも、逆数をとって「周期」にしてみると・・・
タイマー0は1.024mS。タイマー1と2が2.04ms。
むちゃすっきりした数字になるのです。
※このこと、皆さんあまり言ってないような・・・
| 固定リンク
「Arduino」カテゴリの記事
- 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)
- 液晶表示コントローラ HD44780で迎撃(2023.05.16)
コメント