SyntaxHigh

Friday, October 18, 2013

TLC5940 Flickering: 問題解決

TLC5940 を Daisy Chain した時の点滅に対し,今度こそかなり安定した解決策.オシロがまだ来ないので信号の様子はまた後日載せます.



手法:
  1. シグナルライン (VPRG,GSCLK,BLANK,XLAT,SCLK,SIN) に 100Ωの抵抗を入れる.またはローパスフィルタを挟む.
  2. いくつかのモジュールごとに,74LS04 等でバッファする.その際も,出力側に100Ωの抵抗を入れる.
一般回路を作ったことのある経験者から見れば当たり前なんだけど,実際複雑な回路を作るのは初めてだったのでここにたどり着くのに相当時間がかかった.
#誰か先生がいればよかったんだけど.

理由1:

SPI の Ringing について
http://e2e.ti.com/support/data_converters/precision_data_converters/f/73/t/74798.aspx

SPI で信号を伝える場合に,終端がちゃんとされていないと,高周波成分が反射して ringing という現象が起こるらしい.

理想的なデジタル信号は無限に高い周波数成分を含むので,配線長が少しでも長くなると ringing が無視できなくなる.

一番簡単には,ソース側に抵抗を入れる( Source Termination ) 事.これによりインピーダンス整合が行われ,ringing が小さくなるらしい.この抵抗は,コンデンサを入れてローパスフィルタにしても良い.ローパスフィルタの場合,SPI の信号を邪魔しないように十分小さなコンデンサを使うことになる.

抵抗が 100 Ωなのは,何かあった時に IC の保護の意味もある.これ以上大きくするとコンデンサが小さくなるのでよくない,小さくすると電流が流れすぎるので良くない,ということらしい.もちろん通常なら Input 側は Hi-Z 状態になっているので,電流が流れすぎることはない.

ただ,TLC5940 の場合,input 側から電流が流れ込んで ATMega328 もろとも死ぬということがあったので,100Ωは妥当な値だと思う.

理由2:

Termination を行っても,伝送路が長くなるといろんなノイズが載ってしまう.74xx04, 07 や 251 などを使って一旦バッファすると,そこで伝送路は一旦切れるため,綺麗な信号があとに続くことになる.


参考: (SPI Ringing,SPI Termination などで検索すると類似の結果は多数)
http://www.vagrearg.org/content/noloop
http://e2e.ti.com/support/data_converters/precision_data_converters/f/73/t/74798.aspx

No comments:

Post a Comment