やっつけな日常(51) 許せん、オーバーシュート、アンダーシュートが酷い、なんとかせよと。

Joseph Halfmoon

別件シリーズでESP32 DevKit-Cの出力端子から取り出した信号が汚いです。ロジック動作としてはOKなんだけれども、こんなオーバーシュート、アンダーシュートが酷い信号をのさばらせておいてはイケないと唐突に決心。対策をば打ってみました。やれば出来るのか、やりすぎなのか、接続する相手次第ぞなもし。

※「やっつけな日常」投稿順 Index はこちら

問題になった別件シリーズは以下です。

MicroPython的午睡(107) ESP32版、RMT、どこの端子が使えるの?

ESP32 DevKit-Cボード上で、ESP32独特のペリフェラルであるRMTというものをMicroPythonで制御して信号を作りだしてます。もっと速い制御も可能なのですが、計算しやすいということで、信号のレゾリューションは100nsec(10MHz)単位の制御でMHz程度の信号をハードウエアで生成して出力してます。ハイの幅、ロウの幅という具合にプログラムしていけばその通りの任意波形が出力されるペリフェラルです。

ESP32はデータシートみると、IO端子の流し出し、引き込み能力が強力です。ハイのときに最大40mAも流せるみたい。ちょっと頑張りすぎじゃないかと思わないでもないです。

そのせいか、RMTで発生した信号を観察するとこんな感じ。

OrgWave

オーバーシュート、アンダーシュートがガツンと出てます。再びデータシートを参照するとESP32の入力端子の場合、VIHのMAXは3.6V(VDD=3.3Vのとき)、VILのMINは-0.3Vです。自分のスペックすら割れてるじゃん!

このとき観察している端子の様子が以下です(というほどでもないか。)

CircuitORG

闇雲対策は効かなかった

ESP32のスペック、VDD=3.3Vで、VOH>2.64VでIOH40mAを流し出せるという強力な駆動能力から推定すると、出力端子のオン抵抗は16.5Ωと(計算大丈夫か?)インピーダンス整合を考えるのであれば同じ大きさの抵抗を外づけしてプルダウンすれば良い筈。でも、そんな小さな値の抵抗を取り付けたら流れる電流が半端ありません。飛んでもねーずら。

といことで控えめの抵抗を闇雲に取り付けてみました。

CircuitBAD1

その時の波形が以下に。全然対策になってないっす。

330Only

それに悪いことはそれだけではありませぬ。出力電圧レベル(ハイ)が3Vまで下がってます。出力MOSトランジスタのインピーダンスと外付け抵抗の分圧でそこまで下がってしまうわけね。330Ωでこのくらいで済んでいるけど、もっと小さい抵抗つけたらレベルは壊滅的。

それに「プルダウン抵抗」には直流的に10mAくらいもの電流が流れ続けているはず。こんなんじゃダメだ。

ということで第2の闇雲対策が以下に。抵抗R2に直列にコンデンサを入れました。これで一種のハイパス・フィルタとなる筈。カットオフ周波数は22MHz?(再び計算大丈夫か?)、DC的に電流が流れるパスは塞いだ、と。

CircuitBAD2

このときの波形が以下に。なんか余計に悪くなってないか?330_22p

DCパスは切れたので、ハイのときのレベルは3.3Vに回復しました。そしてDC的に10mAも流れつつけるということは無くなった筈。しかし、なんだかCとRで共振でもしている?ドツボにハマった感じです。

落ち着いた波形を得た対策

落ち着いた、静かな波形を得た対策が以下に。闇雲対策と似てはいるけれども違うもの。やりすぎ?ResultCircuit

そのときの波形が以下に。オーバーシュート、アンダーシュートなどどこ吹く風。ホントか?ResultWave0

また、R2に流れる電流をCH2の青色でみてみました。電圧値でだいたい500mVくらいの変動なので、スイッチング時に瞬間的に流れる電流は1.5mA程度の筈。それ以外のときは電流は流れませぬ。ResultWave

まあ、今回は「落ち着いた」けれども、大丈夫か、やっつけで。

やっつけな日常(50) a transitional dummy packageって何? へ戻る

やっつけな日常(52) 1ウエファのチップ数、Dies per wafer 電卓の復活。 へ進む