ラズピコ analogWriteの誤差
ラズピコのanalogWriteで 1/255 ~ 254/255と
デューティ比を変えた時、出力されるH/Lパルス幅から
実測したデューティ比の差を示したのがこのグラフ。
設定値を1変化させた時の測定クロック数の差を書き
加えました。
16MHzのクロック数で128(8μs)が続いた後、、
13あるいは14カウントごとに96(6μs)が
出現しています。
この13と14がどこから来るのか・・・
その推測です。
ピコのクロックは125MHz。
analogWriteの周波数は500Hz。
PWMの分解能が255。
で、125e6 ÷ 500 ÷ 255 = 980.392
RP2040のPWM分周回路、最大が 1/255.9375。
m・n/16で設定できます。
980.392は256を越えるので1/256すると 3.82966
整数部が 3 で 小数部が 0.82966。
小数部は 1/16 単位なので
0.82966 × 16 = 13.2745
「13」と「14」の間。
こんな数字が出てきました。
元クロック周波数とPWM周波数、そして分解能から
求める分周比、そして最終的なパルス幅設定値の計算に
浮動小数点を使っているからかと推測できます。
ラズピコのPWM。やっぱしanalogWriteは捨てちゃえ #2
これ↑の手法、PWMの分解能とH/Lパルス数は整数と整数の
乗数で設定するので実パルスとの誤差は生じません。
その代わり、主クロックからPWMの周波数を計算するところで
誤差が生じます。
PWMでDACするなら(analogWriteを名乗るなら)、デューティ比
に誤差が出るのはあきません。
| 固定リンク
「ラズパイ・ピコ」カテゴリの記事
- トラ技2024年5月号に「3.3/65535」(2024.04.07)
- ラズピコだと1/65535が出現(2024.03.30)
- Help me! ラズピコ、Philhower版だとスケッチをアップロードできない(2023.04.12)
- Arduino IDEでのラズピコ開発環境 Philhower版が正解でしょう(2023.04.04)
- ラズピコのピン:自由になりそうだけど定義で固定されている(2023.04.03)
コメント