SyntaxHigh

Tuesday, April 8, 2014

Ground Bounce がひどい: Strong Ground Bounce


LED を72個全点灯、更にサーボを 16個同時に動かすと コントローラのGNDと3つ目のモジュールのGND に600mV 以上の電位差が出る。TLC5940 モジュール間は 1.2 mm^2 のある程度太い線でつないでおり、モジュール間の距離は20cm程度。

Strong ground bounce, over 600mV, occurs when lighting 72 LEDs and moving 16 servos. The measure point is the ground of the controller and the ground of the end of the serial line. The line distance is about 100cm.

Ground Bounce という言葉は知っていたが、今までこんなに大量の消費電力を使わなかったので遭遇したことが無かった。共通インピーダンスによる電圧降下、という事もできる。

I haven't encountered such a harsh bounce probably because I haven't built such an energy-consuming system. According to the Internet, this stems from impedance in the long and/or thing ground line.

テストの時と違ってサーボにはギヤの摩擦や駆動部の運動エネルギーによる負荷がかかっている。LM2596 のモジュールは出力に3Aまで流すことが可能で、出力は6Vに設定してある。サーボはロードのない状態では 200mA 程度だが、外側のギアが引っ掛かったりすると消費電力が跳ね上がるので、力率を 80% として一つのモジュールで最大 12Vで1.8A ぐらいの電流が流れることになる。

I have succeeded in controlling the same number of LEDs and servos, but without no load on the servo motors. Now the servo motors were loaded by the friction and moving a certain amount of mass. This raised the energy consumption. At no load, the servo uses only around 200mA even on the fastest sweep (0.6sec to move left to right), but maybe it consumes up to 700 mA  as some Internet source says.

(この辺り、ポリスイッチで制約をかけることも可能だが、回路が複雑になるので実装しなかった。なので、ギアが詰まった場合は全体の電源を切るしか今の所ない。)

This overload causes melting of the body and burn of the circuit in the servo motors, so in practice, polyswitch can be installed to avoid over loading. I have some of the device, but didn't installed just because I didn't want the circuit more complicated.

20msec なので、多分サーボの電流が平滑されていないことが原因か?

ノイズは結構綺麗というか、PWMに同期して 50Hz の周期になっている。

The figure shows the noise on the maximum load of LEDs and servo motors. The frequency is 50 Hz, which is identical to that of the PWM of servo controller.

ここ2,3日で色々試していたが、結局このバウンスにより正常動作ギリギリになっていたところで、いろんな微小な原因でグリッチが起こっていたと考えられる。
  • USB の電源をとるとうまくいった -> コントローラのGNDが安定したから。
  • コンデンサをつけると少しましになった -> バウンスがちょっとマシになった。(数十 mV)
In fact, I did some tries and errors the last few days, and some workaround lessen the problem and some did not work. The major reason of this glitch was the ground bounce.

このノイズは反射のように5Vの信号に乗っているわけではなく、グラウンド間、つまり電位がゼロであるべき場所にかかっているので、単純にコンデンサやローパスフィルタ、EMIフィルタではなんとかならない。解決策としては、もっとも単純にGNDのインピーダンスを下げることになる。ふつうの回路ならばアルミ板をフレームグラウンドにするが、今の回路の場合伝送路が長いので、アルミのフラットバーで代用することにする。

その前に、本当にGNDを安定化させられるかどうか、 GND ラインを 2.0 スケアの車用の電線でで補強してみた。こんな時のために余分にターミナルブロックを実装しておいた。すると、バウンスのピークは約半分になった(684mV->383mV)。

波形を見ると、周期の最後の方は平坦になっている。このノイズはおそらく電線インピーダンスに依存しないノイズで、
最初の方の山がインピーダンスの影響を受けている部分。
最後の方ならば 100mV 以内なので問題にはならない。
更に一本付け足すと、更に小さくなるのが確認できる(ピーク 257mV)。2本目で 1/2, 3本目で 大体 1/3 になるので、ほぼオームの法則に従って下がっている。フラットバーは太さ 2mm*30mm のアルミ製で、単純に考えると銅線の 2mm^2 の30倍の太さがあることになる。十分かどうか仕事が終わってからチェックしてみる。

アルミニウムに銅線を繋ぐ場合、はんだ付けは難しいのでドリルで穴をあけ、圧着端子をボルトでネジ留めする。こういう時のために真鍮製のM3のボルトとナットをセットで買ってある。

余談になるが、HANTEK のUSBオシロは、統計を簡単に出せるのでこういう定量的なチェックが瞬時にできて使いやすい。スタンドアロンのオシロを使ったことはないのだけど、安価なオシロはこんな計算はできない。PCが必要という制約はあるけど、立った$72でこれだけのことが分かるのだからもっと早く買っていればよかった。

今日はコントローラのGNDとモジュールのGNDをつなげてオシロスコープで観察してみる。

参考

  • http://d.hatena.ne.jp/kamiyan2/20090221 : 時々参考にさせてもらってるかみやんさんの技術者日記。最後のマトメが今回の僕の教訓と同じ。