« Arduino インプットキャプチャー割り込みを「ISR_NAKED」で (デューティー比測定) | トップページ | Arduino PWM波形のデューティー比測定 これで完成形か? »

2020年8月21日 (金)

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 インプットキャプチャー割り込みを「ISR_NAKED」で (デューティー比測定) | トップページ | Arduino PWM波形のデューティー比測定 これで完成形か? »

Arduino」カテゴリの記事

コメント

コメントを書く



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




« Arduino インプットキャプチャー割り込みを「ISR_NAKED」で (デューティー比測定) | トップページ | Arduino PWM波形のデューティー比測定 これで完成形か? »