SPIバス終端の考慮事項


22

そこで、前回の質問で、ボード間通信のために短距離でSPIバスを使用することについて質問しました。終端抵抗を試すことをお勧めしました。目的地の近くに抵抗器を配置し(正確にはありませんが、1 cmの距離があります)、接地しました[これは終端抵抗器のフットプリントのないボードなので、即興で作らなければなりませんでした。TQFPであり、繊細なピンがあるため、抵抗をデバイスにはんだ付けできませんでした。]

いくつかの基本的なテストから、1Kの抵抗でオーバーシュートがほとんど減少しないことがわかりました。470オームと180オームの方がうまく機能しました。低いほど、うまくいきました。180オームでは、オーバーシュートは約1ボルトまたはそれより少し低くなりました。残念ながら、現在のMCUはMCUが処理できる量を超えているため、それ以上のことはできません。ボードの現在のリビジョンで、330オームの抵抗を直列に使用することで問題を修正しました。これにより、オーバーシュートは3.7 Vになり、立ち上がり時間は10または11 nsでした。しかし、私は次のリビジョンで「適切な」ソリューションが本当に欲しいです。私の周波数要件は同じままです:2 MHzですが、4 MHzを好むでしょう。

だから私はここで尋ねるべきだと感じました:ボードの次の改訂では、ラインに強烈なバッファを置くべきですか?バッファを見つけることは実際には問題ではありませんが、消費電流は大幅に増加します。SPIには終端が必要な8つのデバイスがあり、常にアクティブな3つのラインがそれぞれに行きます。たとえば、SCKは8つのデバイスすべてに送信されます。各デバイスには、たとえば100オームの終端抵抗があります。つまり、12 * 3.3 / 100 = 390 mAの電流が流れます!

それで、ここで最高の頼み事は何ですか?ショットキーダイオードをクランプとして使用して「アクティブターミネーション」を行う必要がありますか?

編集:ラインインピーダンスについて:前述したように、意図は4つの外部ボードを接続することです。パッド間の距離はすべて同じです(12インチ)。ただし、MCUと同じボード上にもデバイスがありますが、これらは終端を必要としません-長さは約1インチ(またはそれ以下)であり、オーバーシュートはほとんどありません(300またはmV)。外部ボードに向かうトレースは、同じ長さと幅の粗いものです。ボードの2番目のレイヤーは、切れ目のないグランドプレーンです。


一般的な方法は、ラインインピーダンスに一致する直列抵抗を配置することです。50Ωのシリアル終端のようなものを試してください。トレースと接続をある程度固定インピーダンスになるように設計すると役立ちます。しかし、より低いシリアル終端を試してみて、見つけたものを確認してください。彼は、32Ωの接地終端を提案しました。実際には、電源レールに64Ωを、接地レールに64Ωを接続することにより、このはるかに低い電力、3 dB少ない電力を実現できます。
コルトゥク

@Kortuk残念ながら、32オームの抵抗はオーバーシュートを大幅に削減しませんでした。ただし、フットプリントもソースではなく間違った場所にあり(ターミネーターになることを意図していませんでした)、それが原因かもしれません。ラインインピーダンスについては、すべてのラインの長さと幅はほぼ同じです。それらはすべて、2番目の層にある平面の完全な地面を走ります。
サアド

1
直列終端はソースにあり、負荷に配置しても何もしません。ソースに直列に50Ωを配置して、影響を確認してください。
Kortuk

あなたはそれが記述されたstevenvhと考えることができます、あなたがそれを集中モデルと考えるならば、コンデンサとして機能するライン全体があり、低抵抗のために抵抗がそれとしてRとして機能します。伝送線路モデルを見ると、そこに整合した抵抗があるということは、振幅波の半分の移動距離があり、反対側の端に到達して反射して完全な値になったことを意味します。
Kortuk

回答:


32

信号の終端について話すことは、ワームの缶を開けるようなものです。これは、ほんの数百語で要約するのが難しい巨大なテーマです。したがって、私はしません。この回答から膨大な量を除外します。しかし、大きな警告もします。ネット上の終端抵抗器に関する多くの誤った情報があります。実際、ネット上で見つかったもののほとんどは間違っているか誤解を招くものだと思います。いつか、何か大きなものを書いてブログに投稿しますが、今日は投稿しません。

最初に注意することは、終端に使用する抵抗値はトレースインピーダンスに関連している必要があるということです。ほとんどの場合、抵抗値はトレースインピーダンスと同じです。トレースのインピーダンスがわからない場合は、把握する必要があります。多くのオンラインインピーダンス計算機が利用可能です。Google検索ではさらに何十も表示されます。

ほとんどのPCBトレースのインピーダンスは40〜120オームであるため、1kの終端抵抗はほとんど機能せず、100Ωの抵抗がはるかに優れていることがわかりました。

終了には多くの種類がありますが、大まかに言えば、ソースと終了の2つのカテゴリに分類できます。ソースの終端はドライバー側にあり、エンドの終端は遠端にあります。各カテゴリ内には、多くの種類の終了があります。各タイプは異なる用途に最適であり、すべてに適したタイプはありません。

あなたの終端、遠端での接地への単一の抵抗は、実際にはあまり良くありません。実際、それは間違っています。人々はそれをしますが、それは理想的ではありません。理想的には、その抵抗は電源レールの半分で別の電源レールに接続されます。したがって、I / O電圧が3.3vの場合、その抵抗はGNDに接続されず、3.3vの半分(1.65vとも呼ばれる)の別の電源レールに接続されます。このレールの電圧レギュレータは、ほとんどのレギュレータが電流のみをソースする電流をソースおよびシンクする必要があるため、特別でなければなりません。この用途で機能する規制当局は、データシートの最初のページで終了について言及しています。

ほとんどの終端処理の大きな問題は、多くの電流を消費することです。これには理由がありますが、それには入りません。低電流で使用する場合は、ソース終端を調べる必要があります。ソース終端の最も簡単で一般的な形式は、ドライバの出力での単純な直列抵抗です。この抵抗の値は、トレースのインピーダンスと同じです。

ソース終了は、終了終了とは異なりますが、最終的な効果は同じです。そもそも反射を防ぐのではなく、信号の反射を制御することで機能します。このため、ドライバー出力が単一の負荷に給電している場合にのみ機能します。複数の負荷がある場合は、別の処理を行う必要があります(エンドターミネーションまたは複数のソースターミネーション抵抗を使用するなど)。 ソースターミネーションの大きな利点は、エンドターミネーションのようにドライバーをロードダウンしないことです。

ソース終端用の直列抵抗はドライバーに配置する必要があり、トレースインピーダンスと同じ値でなければならないことを前に述べました。それは単純化しすぎでした。これについて知っておくべき重要な詳細が1つあります。ほとんどのドライバーには、出力にある程度の抵抗があります。その抵抗は通常10〜30オームの範囲です。出力抵抗と抵抗の合計は、トレースインピーダンスと等しくなければなりません。トレースが50オームで、ドライバーに20オームがあるとします。この場合、30 + 20 = 50なので、抵抗は30オームになります。データシートにドライバーの出力インピーダンス/抵抗が記載されていない場合は、20オームと想定できます。PCBの信号を見て、調整が必要かどうかを確認します。

別の重要なこと:これらの信号をOスコープで見るとき、受信機でプローブしなければなりません。他の場所を調べると、歪んだ波形が得られ、物事が実際よりも悪いと考えるようになります。また、接地クリップができる限り短いことを確認してください。

結論:33〜50オームの抵抗でソース終端に切り替えれば、問題ないはずです。通常の警告が適用されます。


デビッド、徹底的な回答をありがとうございました。すべてが完全に理にかなっていますが、システムにはもう1つの複雑な問題があると思います-SPIラインはボード間を行き来します。そのため、ラインインピーダンスの推定は困難な場合があります。信号はメインボード上で約3インチ通過し、6インチリボンケーブルを通過し、目的地に到達するまで3インチトレースに沿って再度移動します。 。地面(SCK、GND、MOSI、GNDなどのように)あなた30-20オームの勧告はまだ立っていますか?
サアド

@Saadそのようなケースで私がやったこと(そしてこれをたくさんやったこと)は、ドライバーで単一の抵抗器を使用し、プロトタイプが構築されたらその値を微調整することです。これは妥協点ですが、機能します。私は現在、各PCBに3〜6インチのトレースを持つ1フィートのケーブルでSPIを実行するいくつかのシステムを実際に持っています。それらのいくつかは30 MHzで動作しています!はい、33または47オームから始めて、そこから微調整します。

3
すでに+1ですが、ソース終端を接続する方法を示す図(つまり、ラインからグランドではなく、直列)は非常に役立ちます。
光子

16

あなたは近距離に行くので、終端抵抗は良いアイデアだとは思いません。あなたが見つけたように、彼らは仕事をするために非常に低くなければならず、同じインピーダンスでラインを駆動する場合、ラインは多くの電流を引き込み、電圧は2だけ減衰されます。

クロックレートがそれほど高くないため、4 MHzビットレートをサポートするために必要な周波数が問題の原因ではありません。問題は、ラインを駆動する高速エッジがあることです。これには、数百MHzの高調波があり、トラブルの原因になります。希望の周波数では、伝送ラインではなく集中システムがあります。これにより、作業がかなり簡単になります。

したがって、解決策は、本当に必要ではないが、問題を引き起こす高周波を減衰させることです。これは、ラインを駆動するものの直後に、単純なRCローパスフィルターを使用して実行できます。これは、330Ω抵抗器が現在行っていることの一部です。これらは、ラインの寄生容量とともにローパスフィルタを形成します。どうやらそれは十分ではなく、および/または十分に予測可能ではありません。これは、各ラインにある程度の意図的な容量を持たせることで修正できます。

4 MHzでバスを実行する必要があるため、サポートする必要がある最速の信号は4 MHzの方形波です。つまり、各レベルの長さは125 nsです。それを少なくとも4つの時定数にしたいとしましょう。これは、98%の整定時間を意味します。つまり、許可する最大時定数は31 nsです。31ns /330Ω= 94 pF これは、31 nsの時定数を得るために必要な330Ω直列抵抗の合計負荷です。予測できない寄生容量が常に存在するため、47 pFでどのように見えるかを確認します。これにより、最大許容時定数を超えない範囲で、10〜20 pFの隠れた静電容量を確保できます。

直列抵抗は、バスを駆動するすべてのピンにできるだけ近づける必要があります。これは、バス上の他のすべてのピンが1つを駆動しているときにCMOS入力になることを前提としています。単一のピンでのみ駆動されるライン(マスターによってのみ駆動されるクロックラインなど)の場合、抵抗の後にできる限り47 pFを近づけます。異なる時間に異なるピンで駆動できるラインの場合(MISOなど)、すべてのドライバーの中央付近に47 pFを配置します。各ラインには、ドライバーの数に関係なく47 pFのコンデンサーが1つしかありませんが、ドライバーごとに1つの抵抗があります。

上記の計算は、最初の良いガイドとなることを目的としています。一部のパラメーターは不明であるため、事前に説明する必要があります。330Ωの直列接続と47 pFのグランドから始めますが、実際の観測結果に基づいて物事を変更することを恐れないでください。


2

終端がない場合、信号が非常に低いインピーダンスのソースから非常に高いインピーダンスのレシーバーに送信されると、信号は繰り返し往復します。信号の位相は、各ラウンドトリップで180度反転します。

宛先に到達したときに信号を反射させたくない場合は、終端を使用できます。これにより、信号は宛先で反射されることなくきれいに吸収されますが、多くの一般的な実装では、ソースで大きなDC負荷が発生します。

多くの場合、代わりに信号源に直列抵抗を挿入すると、実用的に有用な結果を得ることができます。回線の遠端にレシーバーがない場合、信号はそこに到達すると反射されますが、そのような反射は再反射されるのではなく、ソースによって吸収されます。また、ソース終端は、ラインを駆動するデバイスにDC負荷をかけないことに注意してください。

終端がない場合、ラインが低インピーダンスで駆動され、高インピーダンスで受信されると、受信デバイスには駆動電圧より高い電圧が表示される場合があります(理論的には、ソース駆動インピーダンスがゼロであり、受信インピーダンスは無限です)。ソースまたはレシーバーが適切に終端されている場合、受信電圧は駆動電圧にほぼ等しくなります(ゼロインピーダンスのソースが適切なインピーダンスのレシーバーを駆動している場合、または適切なインピーダンスのソースが無限インピーダンスのレシーバーを駆動している場合、受信電圧は駆動電圧に等しくなります)。両方が適切に終端されている場合、受信電圧は駆動電圧の半分になります。

シミュレーションは、ここにこれを示しています。約49回/秒のパルスチェーンを生成するパルスジェネレーター、直列の2つの5ms遅延ライン(往復時間1/50秒)、および両端に切り替え可能な終端抵抗が含まれています。

回路には3つのSPDTスイッチが含まれています。いずれかをクリックして、状態を変更します。下の2つのスイッチは、送信元と宛先の終端を制御します。これらの場合、「アップ」は正常終了を表し、「ダウン」は不良を表します。上部のスイッチは、ラインを自動パルスジェネレーターで駆動するか、手動ロジック入力で駆動するかを制御します。パルスを手動でラインに送信するには、上部のスイッチを「down」に切り替えて、その隣の「L」をクロックします。

送信元または送信先のいずれかが適切に終端されている場合、送信先に到達する信号はクリーンになります。両方が適切に終端されている場合、受信信号電圧は駆動電圧の半分になります。一方が適切に終端されているが、もう一方が終端されていない場合、受信電圧は駆動電圧の約91%になります(「不良」抵抗は10分の1で「間違っている」ため、約(10/11)エネルギーの)。どちらも終端されていない場合、受信電圧は最初は駆動電圧の約1.656倍になりますが、20msごとに奇妙な反射が現れます。


1

AC終端(たとえば、110オームの抵抗と直列の470 pFコンデンサ)を試し、この直列の組み合わせをSPIクロックの出力先からグランドに接続します。終端は、簡単にできるエッジ時間の長さで約30 mAを消費しますが、そうでない場合は電流をゼロにします。双方向データラインでは、もう少し注意が必要です。SPIデータラインのマスターエンドとスレーブエンドの両方に470 pF、220オームのAC終端を配置しました。

これに関するコメントを歓迎します。


0

前の投稿が頭に釘を打ったので、あまり深く掘り下げてはいけません。これは、SPIが不均衡なラインであることに帰着します。クロック周波数が低い場合でも、nsクロックの高速エッジを尊重する必要があります。私の場合、マスター側のSPI CLKラインと直列に470オームの抵抗器が見つかりました。その抵抗を削除し、ラティスからの不平衡ラインに推奨されるソリューションと上記の提案を実装します(スレーブ側からソリューションの半分しか実装できず、それに応じてフィルターキャップを微調整しました)SPIリボン通信ケーブルの長さを延長することができました通信エラーなしで10cmから160cm:

シリアルインターフェイスのノイズ耐性の向上:ラティスセミコンダクターホワイトペーパー(2014年7月)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.