Summary
- Succeeded in operating 15 TLC5940s: 15 servos and a lot of LEDs.
- Reflection could not be observed in my setting, or the pulse is slow enough to avoid reflection. The operation speed of Arduino SPI is not that fast.
- Putting 100-200 ohm resistors in series in the output lines can suppress many problems.
- The next step in my project is to implement the actual device. Using lots of energy may cause different problems.
- So far, it is good.
反射は手持ちのオシロでは見れない
自作の TLC5940 モジュールは、一つ辺りの伝送路が 17cm 程度になります。15 個つなぐと、全長は 2m 強になり、反射の影響が出てきます。Arduino Uno は, 立ち上がりが 20nsec 程度。2m の伝送路を立ち上がりの信号が行って帰ってくるまでに20nsecかかるので、この辺りの長さでちょうど反射の影響が出て来るはずです。しかし、手持ちのオシロスコープでは反射を見ることが出来ず、綺麗に立ち上がっているように見えます。オシロで見る限りは電圧も安定しているし、24MHzのロジアナでもタイミングが間違っているようには見えません。
色んな情報を見る限り、反射は絶対におこっているはずです。
TLC5940には入力にシュミットトリガがついていません。反射で電圧レベルがスレショルド付近になった時に別のノイズなどで High/Lowが激しく入れ替わるのだと思います。
この辺りの反省からか、後発の TLC5943 や、Texas Instruments ではないが、MBI5026, 5030 にはすべて入力にシュミットトリガがついています。
解決策
まずは終端ですが、ソースに抵抗を挟みます。抵抗値は33,47,120,200と試して、120ならうまくいきました。
このように分岐する際に抵抗も一緒に分岐する。 信号が1週するのに20nsec |
実は以前にもループバックは試していたのだけどその時は違う理由でフリッカーが起こっていたため、意味がないと思ってしまった。実際はレギュレータの電力が足りてなかっただけ。
TLC5940まとめ
ここ4か月苦労して以下のことが分かりました。壊したICは70個近く。
- SOUTとSCLKのタイミングがシビア。SOUTにローパスフィルタを入れて対応。SCLKはデータシートにある通り193個入れる。これで、SOUTが最初のArduinoの出力に比べ、半クロック前にずれる。これをローパスで遅らせると正しいタイミングが保証される。
- ICの消費電力はデータシートでは30mAだが、OUTをopenにしているところに無理やり電流を流そうとすると100mAを超える。小電流のレギュレータでは電力が足りなくなる。テストする時はopenのpinには電流を流さないようにしないといけない。
- 電力が足りなくならないように、レギュレータには47uFの比較的大きなキャパシタを入れる。オシロで確認。
- 信号線がHIGHの時に電源を入れると、破壊される。トランジスタですべてLOWにしてからICの電源を入れるような仕組みを作る。
- 逆電圧をかけると壊れるので、テストする際は絶縁に注意する。または逆電圧をかけるヒューマンエラーを防ぐような仕組み(極性のあるコネクタとか、ターミナルブロックに色を塗っておくとか、ケーブルは黒赤のものを使うとか)を作る。
- 長い伝送線の場合は、終端、もしくはローパスで鈍らせてリンギングを防止する。
- 信号線をループするようにするとなぜかうまくいく。
- PCBにパターンを掘る場合は、信号線の間をGNDパターンで囲む。信号線が長くなるほど放射ノイズの影響が大きくなる。数百mVのノイズは誤動作の原因になりうる。
- 波形はオシロスコープで見る。
MBI5030はTLC5940の上位互換のようになっていて、値段もそれほど変わらない。最初からちゃんと調べて、複数の種類で試してみるべきだったのかもしれません。オシロスコープも最初から買っておくべきでした。
No comments:
Post a Comment