LEDを全点灯し、サーボに負荷をかけた状態で3つモジュールを駆動すると、3つ目でサーボのみ位置決めがおかしくなる。
LEDにはフリッカーは生じないので、ICが落ちているわけではない。
最初電源電力の不足による電圧降下を疑って、12V の ATX 電源の代わりに 24V の安定化電源を使ってみた。だがモジュール4つ目で問題が起こる。
電圧を変えて問題が少しマシになったということは、消費電力による電圧降下かGNDへのノイズがトリガーになっていることは間違いない。
しかし、オシロでサーボ一つ動かした時にGNDに乗るノイズを調べたところ、1つあたり3mV程度である。根本的な問題は別にありそうだ。
いろいろ試した挙句、TLC5940 の OUTPUT 側の出力を見てみると、信号が PWM のタイミングでアンダーシュートしている。アンダーシュートはかなり大きく、400mV 以上になることもある。
(こんな場所の信号は見たことがなかった!)
これに消費電力が上がった時のノイズか加わって、サーボの位置決め信号がおかしくなっている可能性が高い。
400mV 近くアンダーシュートしている。50Hz なので、PWM と同じ周波数。 TLC5940 の新品でもこれが起こる。 LM2596 のモジュールのせいか、何なのかわからない。 LED にも同様にアンダーシュートがあるが、認識できない。 |
GND と TLC5940 の OUT 側に 0.1uF (104) パスコンを挟む。
綺麗になった。これなら問題は起こらないだろう。 105 だと遅くなりすぎてPWMのバンドが変わってしまうのでダメだった。 103 か 473 程度が一番よいかもしれない。 |
もし不具合の原因がアンダーシュートならばこれで解決する。
GND のノイズは、サーボ1つあたり3mV 程度なので、20個つけても100mV までは行かない。
教訓としては、とりあえずいろんな状況でいろんな場所の信号を見るべき、ということだろうか。そのためには設計の段階でテストがしやすいようなものを作らないといけない。
追記:アンダーシュートはサーボの信号に20mA以上流そうとするときつくなってくる。これは Dot Correction で調整する。ただし電流が小さすぎると電圧降下が十分でなくなり、LOW でも100mA 以上になるのでトレードオフ。とりあえず 10mA 程度で落ち着いた。
ReplyDelete10mA 以上電流を流してもアンダーシュートがきつくなるだけになる。後述のように、USBの延長ケーブルの先に電源付きのハブをつけるとうまくいったので、Logitec のリピーターケーブルが安物だったということになる。安物のチップを使っているのだろう。