題:
SPI總線端接注意事項
Saad
2012-06-06 18:37:14 UTC
view on stackexchange narkive permalink

因此,在我的上一個問題中,我詢問瞭如何在短距離內使用SPI總線進行闆對板通信。建議我嘗試使用終端電阻。我將電阻器放置在靠近目的地的位置(但不完全在那兒,距離為1厘米)並接地(因為這是一塊沒有終端電阻器佔用空間的電路板,所以我不得不即興創作。我無法將電阻器焊接到設備上,因為它是TQFP且具有精密的引腳。]

從一些基本測試中,我發現1K電阻器幾乎不能減少過衝。 470歐姆和180歐姆效果更好。我走的越低,效果越好。 180歐姆時,過衝約為伏特或更低。現在,不幸的是,我無法承受更多的損失,因為電流超出了我的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)。去往外部電路板的走線的長度和寬度相同。我板上的第二層是不間斷的接地層。

一種常見的方法是放置一個與線路阻抗匹配的串聯電阻。嘗試使用50ohm的串行終端。如果將走線和連接設計為某種固定阻抗,將會有所幫助。不過,請嘗試使用較低的串行終端,然後看看您發現了什麼。他建議接地端接32歐姆,實際上,您可以通過在電源軌上放置64歐姆,在接地軌上放置64歐姆來降低功率,降低3dB。
不幸的是,@Kortuk一個32歐姆的電阻並沒有顯著降低過衝。但是,足跡也位於錯誤的位置(從來沒有打算作為終結器),而不是從源頭開始,因此可能不確定。關於線阻抗,所有線具有大致相同的長度和寬度。它們都在一個完整的地面上運行,該平面位於第二層。
串聯端接是源頭,如果將其置於負載處,則無濟於事。嘗試在您的信號源上串聯50ohm,以查看其影響。
您可以將其視為stevenvh所描述的,如果您將其視為集總模型,則整條線都充當電容器,而電阻則充當R,以實現低通。如果您查看傳輸線模型,那裡將有一個匹配的電阻,這意味著您有一半的振幅波傳播,然後當它到達另一端並反射到最大值時反射。
五 答案:
user3624
2012-06-06 19:19:55 UTC
view on stackexchange narkive permalink

談論信號終止就像打開一條蠕蟲一樣。這是一個巨大的主題,很難用幾百個單詞來概括。因此,我不會。我將在這個答案中遺漏大量內容。但是我也要給您一個大警告:有關在網絡上端接電阻器的很多錯誤信息。實際上,我會說網上發現的大多數錯誤或誤導的內容。有一天,我會寫一些大的東西並將其發佈到我的博客上,但是今天不會。

首先要注意的是,用於端接的電阻值必須與走線阻抗有關。大多數情況下,電阻值與走線阻抗相同。如果您不知道走線阻抗是多少,則應該找出它。有許多在線阻抗計算器。 Google搜索將帶來更多信息。

大多數PCB走線的阻抗都在40到120歐姆之間,這就是為什麼您發現一個1k終端電阻幾乎沒有作用而一個100歐姆的電阻要好得多的原因。

終止的類型很多,但是我們可以將它們粗略地分為兩類:源終止和終止終止。源終結點在驅動程序上,終結點終結在遠端。在每個類別中,有許多類型的終止。每種類型最適合不同的用途,沒有一種類型可以滿足所有需求。

您的終端實際上是一個不是很好的終端,該電阻在遠端接地。實際上,這是錯誤的。人們這樣做,但這不是理想的。理想情況下,該電阻應連接到電源軌一半的另一電源軌。因此,如果I / O電壓為3.3v,則該電阻將不會連接到GND,而是另一個電源軌將連接到3.3v的一半(又稱1.65v)。該電源軌的電壓調節器必須特殊,因為它需要提供 AND 灌電流,而大多數調節器僅提供電流。適用於此用途的穩壓器會在數據表的第一頁中提到有關端接的信息。

大多數端接的最大問題是它們消耗大量電流。這是有原因的,但我不會介紹。對於低電流使用,我們必須查看源端接。最簡單,最常見的源極端接形式是驅動器輸出端的簡單串聯電阻。該電阻的阻值與走線阻抗相同。

源極端接與端接端接的工作原理不同,但最終效果相同。它通過控制信號反射來工作,而不是首先防止反射。因此,它僅在驅動器輸出提供單個負載時才有效。如果存在多個負載,則應採取其他措施(例如使用端接或多個源端接電阻器)。 源端接的巨大好處是它不會像端接端那樣加載驅動程序。

我之前說過,用於源端接的串聯電阻必須位於驅動器處,並且其電阻值必須與走線阻抗相同。這太簡單了。有一個重要的細節要知道。大多數驅動程序的輸出都有一些阻力。該電阻通常在10-30歐姆範圍內。輸出電阻和電阻的總和必須等於走線阻抗。假設您的走線為50歐姆,而驅動器為20歐姆。在這種情況下,由於30 + 20 = 50,您的電阻器將為30歐姆。如果數據表中沒有說明驅動器的輸出阻抗/電阻是多少,則可以假定它為20歐姆-然後查看PCB上的信號並查看是否需要調整。

另一件事:當您在檢偏鏡上查看這些信號時,必須在接收器處探測。探測其他任何地方都可能會給您造成失真的波形,並誘使您認為情況比實際情況更糟。另外,請確保您的接地夾盡可能短。

結論:使用33至50歐姆的電阻切換到源端接,您應該沒事。通常需要注意的事項。

大衛,非常感謝您提供詳盡的答复。所有這些都是很合理的,但是我認為我的系統還有另外一個複雜的問題-SPI線路從一塊板到另一塊板。因此,估計線路阻抗可能很困難-信號在主板上傳輸大約3英寸,通過6英寸帶狀電纜,然後再次沿3英寸走線傳播,直到到達目的地。帶狀電纜的線是交替的接地(例如SCK,GND,MOSI,GND等),您的30-20 Ohm推薦值是否仍然有效?
-1
已經+1,但是顯示如何連接源端接(即串聯,而不是從線路到地面)的圖表將非常有幫助。
Olin Lathrop
2012-06-06 19:07:47 UTC
view on stackexchange narkive permalink

由於您要短距離行駛,所以我認為端接電阻不是一個好主意。如您所見,它們必須足夠低才能完成工作,然後如果您還以相同的阻抗驅動線路,則線路會吸收大量電流,並且電壓會衰減2。

您的時鐘頻率並不是很高,因此即使您需要支持4 MHz比特率的頻率也不會造成麻煩。問題在於您有快速的邊沿驅動線路,這些線路的諧波頻率在100兆赫茲之內,這確實會造成麻煩。在所需的頻率下,您將擁有集總系統,而不是傳輸線。

因此,解決方案是衰減您真正不需要但會引起麻煩的高頻。可以在驅動線路的任何東西之後立即使用簡單的R-C低通濾波器來完成此操作。這部分是330電阻現在正在做的事情。它們形成具有線路寄生電容的低通濾波器。顯然,這還不夠和/或不夠可預測。可以通過在每條線路上使用一些故意的電容來解決此問題。

您要以4 MHz運行總線,這意味著它需要支持的最快信號是4 MHz方波。這意味著每個電平的長度為125 ns。假設我們希望其至少為4個時間常數,這意味著98%的建立時間。這意味著我們要允許的最大時間常數為31 ns。 31ns /330Ω= 94 pF。這就是您需要獲得31 ns時間常數所需的330串聯電阻的總負載。總是會有一些寄生電容,您無法預測,所以我看看47 pF的情況如何。這樣就可以留出10-20 pF的隱藏電容,同時又不超過我們允許的最大時間常數。

串聯電阻應盡可能靠近驅動總線的所有引腳。假設驅動一個總線時,總線上的所有其他引腳將為CMOS輸入。對於僅由單個引腳驅動的線路(例如僅由主機驅動的時鐘線路),應將47 pF盡可能靠近電阻放置。對於可以在不同時間由不同引腳驅動的線路(例如MISO),請將47 pF放置在所有驅動器中間的某個位置。不管有多少個驅動器,每條線僅獲得一個47 pF電容器,但每個驅動器只有一個電阻。

以上計算旨在作為一個很好的入門指南。有些參數是未知的,因此需要預先考慮。從串聯的330Ω和接地的47 pF開始,但不要害怕根據實際觀察到的結果進行更改。

supercat
2012-06-07 00:14:50 UTC
view on stackexchange narkive permalink

在沒有任何終止的情況下,當信號從低阻抗源發送到高阻抗接收器時,該信號將反復來回反彈;信號的相位將在每次往返過程中翻轉180度。

如果不希望在到達目的地時反映出信號,則可以使用端接。這將導致信號在目標處被乾淨地吸收而不被反射,但是許多常見的實現方式將使信號源看到很大的DC負載。

在許多情況下,可以達到與如果在信號源上插入一個串聯電阻,則非常有用。如果線路的遠端沒有接收器,則信號到達那裡時將被反射,但是任何此類反射將被源吸收而不是被重新反射。還要注意,源端接不會在驅動線路的設備上施加直流負載。

在沒有端接的情況下,如果線路由低阻抗驅動並以高阻抗接收,則接收設備可能會看到一個高於驅動電壓的電壓(理論上,如果源驅動阻抗為零且接收阻抗為無窮大,則電壓最高可達電壓的兩倍)。如果信號源或接收器正確端接,則接收到的電壓將幾乎等於驅動電壓(如果零阻抗源正在驅動適當阻抗的接收器,或者適當阻抗源正在驅動無限阻抗接收器,接收的電壓將等於驅動電壓)。如果兩者均正確端接,則接收電壓將為驅動電壓的一半。

仿真此處對此進行了演示。它包括一個脈衝發生器,該脈衝發生器每秒產生大約49次脈衝鏈,兩個串聯的5ms延遲線(往返時間為1/50秒)和兩端的可切換終端電阻。

該電路包括三個SPDT開關;單擊一個以更改其狀態。下部的兩個開關控制源終端和目標終端。對於那些,“向上”表示良好的終止,而“向下”表示不良。上部開關控制是應由自動脈衝發生器還是由手動邏輯輸入來驅動線路。要手動沿線路發送脈衝,請將上方的開關“向下”切換,然後在其旁邊的“ L”旁邊計時。

如果任一 i,到達目的地的信號將是乾淨的>源或目標已正確終止。如果兩者均正確端接,則接收信號電壓將為驅動電壓的一半。如果其中一個正確端接但另一個未正確端接,則接收到的電壓將約為驅動電壓的91%(“不良”電阻器“錯”了十倍,因此無法吸收約(10/11)的能量)。如果都沒有終止,則接收到的電壓最初將約為驅動電壓的1.656倍,但每20毫秒就會出現怪異的反射。

ken
2015-08-14 21:12:51 UTC
view on stackexchange narkive permalink

嘗試使用AC端接(例如,一個470 pF電容器與110 Ohm電阻串聯),然後將此串聯組合從SPI Clock目標的輸出端接地。端接會在邊沿時間長度內消耗約30 mA的電流,這很容易做到,但否則為零電流。對於雙向數據線,它變得有些棘手。我在SPI數據線的主端和從端都放置了一個470 pF,220 Ohm的AC端接,並且可以正常工作,即可以接受的過沖和下衝。

我對此發表評論。

Ben
2017-07-22 04:03:40 UTC
view on stackexchange narkive permalink

由於前面的文章打在了頭上,所以不要太詳細。歸結為SPI是不平衡線路。即使您的時鐘頻率較低,也需要注意快速的ns時鐘沿。以我為例,在主機側發現一個與SPI CLK線串聯的470歐姆電阻。從萊迪思移除電阻並實施針對不平衡線路的推薦解決方案和上面發布的建議(我只能從從站實施一半的解決方案,並相應地調整濾波器的蓋)。10cm至160cm,無通訊錯誤:

提高串行接口的抗干擾性:《萊迪思半導體白皮書》(2014年7月)



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...