SSブログ

PWM+ローパスで擬似D/A - その3 [Pi Pico]

PWMの波形を工夫してローパスの半田付けを怠けようという話の続き。コメントでもらったジッタを与えるアルゴリズムは面白くて有効そうなんだけど、案外難しい。その前に何がしたかったか、をもういっぺんまとめると例えばの話、この絵のように
1106pwmduty.png
普通のPWMのデューティ比50%、というかつまり時間に沿った方向に対する1の出現確率が50%だと上の赤線のような信号波形になる。しかしその下の緑線のようにクロックごとに反転してやるとクロック周波数の半分の成分以下はなくなって、原理的に基本波成分は0である。デューティ比25%でも図の下のようにしてやれば最低の周波数成分はクロックの1/4、もとの基本波の4倍になる。

wrapの値をちょうど割り切るようなディユーティ比の場合、例えばwrapの値が16だと、2と4の場合に基本波成分は原理的に0になるけど、それ以外は基本波成分は必ず残る。それでもできればなるべく基本波成分が少ないほうがいい。

1周期の中になるべくたくさんの反転を入れてやれば同じデューティ比で(同じ0と1の比率で)基本波成分を減らすことができて、基本波より高い(クロックに近い)方へ高調波のエネルギーを寄せることができる。そしてローパスの半田付けは楽になる(1次で済ます)はずである、という話。前回は整理するための記号を作って終わってしまったのでそれを使ってどういうパターンがあり得るか考える....

続きを読む


nice!(0)  コメント(6) 

PWM+ローパスで擬似D/A - その2 [Pi Pico]

PWMの波形を工夫してローパスの半田付けを怠けられないか、という話の続き。前回のコメントで面白い話を入れてもらった。ダイナミックなアルゴリズムで低い周波数成分がかなり減らせて余分な成分を高い周波数に持っていけそう、という雰囲気はわかったんだけど、周波数成分を計算しようと思うと結構難しくてあまり進んでいない。

それとは別に僕が最初考えてたごくごぐ誰でも考えそうなアプローチを先に進めてみる。考え方はスタティックなのでわりと簡単なんだけど、どのくらい効果があるかというと難しいところ。

どうでもいいけどMathJaxって\hdotsを解釈してくれないのね。\hdotsってAMSじゃなかったっけ?

続きを読む


nice!(0)  コメント(0) 

PWM+ローパスで擬似D/A [Pi Pico]

Pi PicoのPWM信号をローパスに通して擬似的なD/A変換に使っている。ところがローパスの半田付けが面倒なので次数の低いローパス、つまり1次のローパスにしていると、結構な分量の基本波成分の漏れがある。1次ではローパスのカットオフをPWMの基本波の一桁下にすると基本波成分は1/10だけ漏れることになる。

これが気になってきた。つまり単純なPWMではなくて、なにかビットパターンを考えて基本波成分を減らす工夫はないか、と考えてみた...

続きを読む


nice!(0)  コメント(7) 

macOSからPi Picoを使う - その34 [Pi Pico]

とりあえずいまのところPi Pico側は2コアでも休み休み動かす、macOS側はlibusbの同期転送を専用threadで回すか、非同期転送をNSTimerで頻繁に呼ぶか、というなんとも中途半端なworkaroundだけど、なんとか使えるようになった。

いずれはPi Picoは2コアをぶん回せるようにして、macOS側はlibusbからIOUSBHostに移行したい。とはいうもののいつになることやら。

ということで集中的にPi Picoの話を続けてきたけど今日でひと段落。最後はuniversal binary版のlibusbが欲しい、という話...

続きを読む


nice!(0)  コメント(0) 

M1Pro/Max MacBook ProのHDMI [日常のあれやこれや]

こんな記事を読んだ。macBook Proに返り咲いたHDMIポートが最新の2.1ではなくて2.0だ、という話。Appleが最新規格より古いのを使うっていうの、すごく珍しい気がする。というか初めてじゃない?なんかあったっけ?

でも、「だからがっかり」というのはそれはそれですごいな。MacBook Proを何に使うつもりなんだろう。

結局そういうのは単なるスペックフェチという気もする。でもまあ、そういう人たちがたくさんいるのは知っている。何でも「大トロ」を要求する人たち。仕事でもよく悩まされている。そういう人に限って赤身を「大トロです」と言って出しても区別つかないことがよくある。鱈の切り身でもわからなかったりする。

いや、電気製品の話ですよ。
nice!(1)  コメント(0) 

M1ProとM1Maxだって [日常のあれやこれや]

新しいMacbookProの発表があった。CPUとGPUのコアがちょっと増えて、バスの帯域も増えて、M1でちょっと弱いな、と思っていたthunderboltチャンネルが増えた。がんじがらめの拡張性ゼロで最適化する、という方針に変わりはないらしい。

僕はCPUコアが16を超えないと買う気にはならないなあ、なんて思ってたけど、今使ってる買ったばかりのMacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)にはUSB-Cしかなくて、会議でプロジェクタに繋ぐためにUSB-C→HDMIドングルを買ったりしないといけなかったけど、これだとそれがいらないのがいいなあ。それにやっぱりMagSafeのほうがいいなあ。ケーブルを引っ掛けたときにUSB-Cだと本体のメス側が心配になる。

でも高っけえなあ。最小構成で24万かよ。僕だったらこの14インチがこのまま16コアのCPUで10万円台前半になったら買うんだけど。ってそりゃそうか。でも2年後ぐらいにはそうなってほしいなあ。
nice!(0)  コメント(2) 

macOSからPi Picoを使う - その33 [Pi Pico]

僕の場合、とりあえずmacOS側はlibusbの同期転送でPi Picoとのやりとりはできている。core1がcore0とほとんど独立に動いているにもかかわらず、core0で動いているTinyUSBがデータを取りこぼす現象は治ってないけど、適度にお休みを入れるというworkaroundでやり過ごしている。大きな声で人に言えないけど。

libusbもだいたいわかってきた。動作が軽くてよくできている。非同期転送の標準的な使い方のサンプルコードでも用意してくれるとありがたいけど。

というわけでそのlibusbでの非同期転送のやりかた。前回つぎのlibusb_handle_events()呼び出しまでの時間を知ることがなぜか僕の環境でできなかったので、その代わりをどうするか考える....

続きを読む


nice!(0)  コメント(0) 

macOSからPi Picoを使う - その32 [Pi Pico]

まだこれを引きずってる。core0とcore1はちょっと大きめのqueueふたつをpipeとして共有しているだけで他の接点はないのに、core1が忙しくなるとcore0がUSBのデータを取りこぼす。queueにロックがあるのでそこでストールするのかと思ってデバガで見てもそんな様子はない。不思議だ。よくわからん。ってどっか間違ってるんだろうけど。

それはいいとして、前回の続きでlibusbの非同期転送について。前回は別threadで呼ぶなら非同期転送でなくてもいいんじゃね?だったけど、今回はmain threadでlibusbに非同期転送のための作業時間をどうやって割り当てるか....

続きを読む


nice!(0)  コメント(0) 

Pi Picoのデバグが難しい [Pi Pico]

こないだからPi Picoのプログラムをしている。会社の工場で使う第1号にしようと思っている。Raspberry Piがたくさん増えてそれぞれがホストとWi-Fi経由で通信するせいで、貧弱なWi-Fi環境を圧迫するようになってきてしまった。Raspberry PiをPicoにしてネットワーク経由からUSB経由にすることでネットワークトラフィックを減らそう、という考えである。

その第1号機は、内蔵A/Dでアナログ信号を読み取ったり、GPIOでモータのOn/Offや状態監視をして、そのデータをmacOSで動くアプリにフィードバックするという簡単なもの。ホストから見るとvendor specific deviceとして見えて、ふたつのcoreのうち、core0でホストとやりとりをして、core1がA/DやらGPIOやらを制御するように書いている。前見た時はA/Dのデータが怪しかったのでPWMをローパスに通す回路を外付けして、その信号をA/Dで読んで自分自身で校正するようにした。これでどこまでINLが良くできるかはよくわからない。それはいいとして、そのPi Pico本体のデバグがなかなか進まない....

続きを読む


nice!(0)  コメント(0) 

macOSからPi Picoを使う - その31 [Pi Pico]

非同期転送のイベント処理に前回の専用threadを使うのが簡単そうなんだけど、そもそもlibusb_handle_events()の専用threadを起こすなら、そのthreadでずっと簡単な同期転送をすればいいような気がする。その話...

続きを読む


nice!(0)  コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。