UNO R4はanalogWrite(n,128)でデュティー50%の方形波が出るぞ
Arduino UNO R3のanalogWriteはちょいと欠陥品。
・2020年2月10日:ArduinoのanalogWrite 1/255なの?
D6ポートにデューティ50%の方形波を出すつもりで
analogWrite(6 ,128)
としても、デューティ50.4%くらいの方形波が出てきます。
きっちり50%にしたいのなら、
analogWrite(6,127)
としなくちゃなりません。
そして、D9,D10,D11,D3ポートへのPWMだと
analogWrite(3 ,127)
analogWrite(3 ,128)
これのどちらも50%にならないのです。
(D5,D6とは周波数も変わって2.040ms周期)
6つの50%デューティの方形波を得たいスケッチ
/* duty 50%の方形波を出すつもり */
void setup() {
analogWrite(6, 128); // OC0A
analogWrite(5, 128); // OC0B
analogWrite(9, 128); // OC1A
analogWrite(10,128); // OC1B
analogWrite(11,128); // OC2A
analogWrite(3, 128); // OC2B
}
void loop() { }
これだとUNO R3でもUNO R4、どちらでも動きます。
しかし、UNO R3だと前述のしがらみが残り、analogWriteと
呼ぶには誤差が大きすぎます。
UNO R4だとどうでしょか。
周波数は6つとも同じで490Hz(ほど)になってます。
例のジッタで下位桁が変動
そしてデューティは、128できっちり50%。
さて、他の数値は・・・
0だとLに張り付き
1だと8μsだけHのパルス。
254で16μsだけL。
255で8μsだけL。
256でHに張り付き。
エエ感じで「val/256」のanalogWriteしてます。
ただ気になったのが、6つのPWM出力ポートに出てくる
周波数が「3つ・3つ」で微妙に違うのです。
D6=D11=D3
D5=D9=D10
この組みになっていて、例えばD5とD6の出力波形を
オシロで観察すると、ゆっくりと波形が流れるのです。
1分ちょいで一周します。
クロックの大もとは同じですし、使ってるタイマの
分周比が微妙に異なっているのかと推測しています。
※UNO R4での微妙な周波数差
黄色がD6ポートのPWM。緑がD5ポート。
16秒経過↓で1/4サイクルほどのズレが発生。
緑が左へズレて行きます。
※参
・Arduino、analogWriteは捨てちゃえ。ちゃんとしたPWMの例
・ラズピコ analogWriteの誤差
| 固定リンク
「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)
「Arduino UNO R4」カテゴリの記事
- Arduino UNO R4 minimaに12MHz水晶を(2025.06.09)
- Arduino UNO R4で2つの1Hz信号の位相変化を見る(2025.06.06)
- UNO R4はanalogWrite(n,128)でデュティー50%の方形波が出るぞ(2025.06.03)
- Arduino UNO R4 minima 電源供給方法でクロックが変わる#6(2025.06.02)
- Arduino UNO R4 minima 電源供給方法でクロックが変わる#5(2025.06.01)
コメント