ラジオペンチさんからのコメント(2023年2月12日13時09分)
件の記事(2023年3月号p.155)を読んで、図8の
「ラズパイpicoの疑似DAC特性」が気になったので
ごそごそしていました。
で、昨夕は手持ちのラズピコにちゃんとスケッチを書き込
めたんですが(Arduino IDE環境)、今朝、ゴソゴソしたら
エラーが出てしまって書き込めません。
昨夕、最後に書いた、シリアル入力値でPWMを設定するという
スケッチは動いていてUSBを通してのシリアル送受はできてい
るのです。
ところが、スケッチのアップロードは失敗。
BOOT SWを押しながらUSBコネクタを挿しても、普通なら現れる
はずのドライブが出てきません。
どこか何かがおかしくなったようです。
Arduino UNOのPWMは、
Arduino、analogWriteは捨てちゃえ。ちゃんとしたPWMを使おう
で記してますように、「途中で1/256狂って」います。
で、ピコのPWMにも違和感。
記事には最大1.4mV未満と測定結果が記されますが、
PWMによるDAC、少々リップルが乗ってもこんな
誤差は生じないはずです。
3.3V/255で1bit変化で12.9mV。 (あえて1/255で表記)
10%ほどがプラスに積み重なって、128あたりで最大に
なってます。
8bitのPWMそのものに何かがあるんじゃないかと感じました。
2020年11月12日:Arduino UNOでデューティー比測定回路 ケースに入れて完成

PWM=128にした時のデューティ、周波数と
H区間クロック数、L区間、計測クロック(MHz)
これで、ピコが出すPWM波のディーティを調べてみようとした
のです。
とりあえず手入力した0~255の値でPWMを設定という
スケッチ、これは昨夕にピコに書けたのですが、
今朝になってこれを更新しようとしたらアウトっとい
う状態になってしまったのです。
で、1~254の値を手入力してちょっと調べてみました。
ピコもUNOと同じように、設定値0で出力L固定、255でH固定
となっています。
ピコでの1~4までのH区間とL区間を見てみます。
デューティチェッカーのクロックは16MHz。
PWM H L
1 96 31937
2 224 31809
3 352 31681
4 480 31553
1と2、2と3、3と4の差は128クロック。
つまり125kHz=8μs。
しかし、1のH区間が96で6μsしかありません。
オシロでも確認したんで、デューティ比チェッカの
ミスじゃありません。
L区間がちょこっと出る253と254はこんな値。
PWM H L
253 31777 256
254 31905 128
これで、1~254の端っこを見たわけですが、1の時の
96を考慮したら、253の時のはH区間は「32352」に
なって欲しいところ。
252 * 128 + 96=32352
ところが31777。 なんか小さい。
254も「32480」が妥当じゃないのかと。
※ピコのスケッチを、手入力じゃなく自動で順にPWM値を
変化させて、デューティ比をチェックできればと
考えたのですが、アップロードできなくなってし
まったのです。
どこかでおかしくなっているようなのですが、手での
入力と目で見ての確認はちょっとつらい。
気を取り直して、まず1に近いところから順におかしく
なっている場所を探してみました。
すると12~16でこんな変化が。
PWM 期待値 実値H 実値L
12 1504 1504 30529
13 1632 1632 30400
14 1760 1728 30305
15 1888 1856 30177
実値Hの13と14の間が「96」になってます。
そして、14と15の間は「128」に復帰。
ピコのPWM、何かが潜んでいそうですぞ。
※単調性がどこかで狂ってる?
しかし、ピコへのスケッチ書き込み失敗、困りました。
なんとかしなくちゃ。
デューティ比チェッカ、自動記録用にシリアル出力が
いりますなぁ。
最近のコメント