Uwagi dotyczące zakończenia magistrali SPI


22

Tak więc w poprzednim pytaniu zapytałem o użycie magistrali SPI na krótkich dystansach do komunikacji między deskami. Polecono mi wypróbowanie rezystorów terminujących. Umieściłem rezystor blisko miejsca docelowego (ale nie dokładnie tam, była odległość 1 cm) i uziemiłem go [ponieważ była to tablica bez śladów rezystora końcowego, musiałem improwizować. Nie mogłem przylutować rezystora do urządzenia, ponieważ jest to TQFP i ma delikatne piny.]

Na podstawie niektórych podstawowych testów stwierdziłem, że rezystor 1K ledwie zmniejszył przeregulowanie. 470 omów i 180 omów działały lepiej. Im niżej poszedłem, tym lepiej działało. Przy 180 omach przekroczenie było o wolt lub nieco niższe. Teraz niestety nie mogę zejść znacznie więcej, ponieważ prąd jest większy niż mój MCU może znieść. Naprawiłem problem w bieżącej wersji płyty, stosując szeregowo rezystancję 330 omów. Doprowadziło to do przekroczenia 3,7 V, a czas narastania wynosił 10 lub 11 ns. Ale naprawdę chciałbym „właściwe” rozwiązanie w następnej wersji. Moje wymagania częstotliwościowe pozostają takie same: 2 MHz, ale wolałbym 4 MHz.

Więc czułem, że powinienem zapytać tutaj: czy przy kolejnej rewizji planszy powinienem umieścić mocne bufory na liniach? Znalezienie bufora nie jest tak naprawdę problemem, ale obecny los znacznie wzrośnie - mam 8 urządzeń na SPI, które wymagają zakończenia i 3 linie, które są zawsze aktywne, przechodzą do każdego. Przykład, SCK idzie na wszystkie 8 urządzeń. Każde urządzenie będzie miało, powiedzmy, rezystor terminujący 100 omów. To jest prąd pobierany 12 * 3,3 / 100 = 390 mA!

Więc jakie jest najlepsze wyjście tutaj? Czy powinienem wybrać „aktywne zakończenie”, używając diod Schottky'ego jako cęgów?

EDYCJA: Odnośnie impedancji linii: Jak już wspomniałem, intencją jest podłączenie 4 zewnętrznych płyt. Odległość między padami jest taka sama dla wszystkich (12 cali). Istnieją jednak również urządzenia na tej samej płytce co MCU - ale nie wymagają one zakończeń - długości wynoszą około cala (lub mniej) i występuje bardzo niewielkie przekroczenie (300 lub mV). Ślady, które trafiają na zewnętrzne tablice, mają z grubsza tę samą długość i szerokość. Druga warstwa na mojej planszy to nieprzerwana płaszczyzna uziemienia.


Powszechną metodą jest umieszczenie rezystora szeregowego, który odpowiada impedancji linii. Wypróbuj coś w rodzaju seryjnego zakończenia 50 omów. Pomogłoby to, gdybyś zaprojektował swoje ślady i połączenia tak, aby były nieco ustaloną impedancją. Wypróbuj niższe zakończenia szeregowe i zobacz, co znajdziesz. Zasugerował zakończenie uziemienia na 32 omy, można faktycznie uzyskać znacznie niższą moc, a także o 3dB mniej mocy, umieszczając 64 om na szynie zasilającej i 64 om na szynie uziemiającej.
Kortuk

@Kortuk A Rezystor 32 Ohm niestety nie zmniejszył znacząco przeregulowania. Jednak ślad również był w niewłaściwym miejscu (nigdy nie miał być terminatorem), a nie u źródła, więc nie mogę być tego pewien. Jeśli chodzi o impedancję linii, wszystkie linie mają w przybliżeniu tę samą długość i szerokość. Wszystkie przebiegają po kompletnym gruncie płaszczyzną, która znajduje się na 2. warstwie.
Saad

1
Zakończenie serii jest u źródła, jeśli umieścisz ją pod obciążeniem, nic nie zrobi. Spróbuj umieścić 50 omów bezpośrednio u źródła w szeregu, aby zobaczyć efekt.
Kortuk

Możesz myśleć o tym jak opisano stevenvh, cała linia działa jak kondensator, a ten rezystor działa z nią jako R dla dolnego przejścia, jeśli myślisz o tym jako o modelu skupionym. Dopasowany rezystor, jeśli spojrzysz na model linii transmisyjnej, oznacza, że ​​masz połowę fali fali amplitudy, a następnie, gdy uderza on w drugi koniec i odbija, uderza w pełną wartość.
Kortuk

Odpowiedzi:


32

Mówienie o zakończeniu sygnału jest jak otwieranie puszki robaków. To OGROMNY temat, który trudno streścić zaledwie w kilkuset słowach. Dlatego nie będę. Mam zamiar zostawić ogromną ilość rzeczy z tej odpowiedzi. Ale dam ci również duże ostrzeżenie: wiele dezinformacji na temat kończenia rezystorów w sieci. W rzeczywistości powiedziałbym, że większość tego, co znajduje się w sieci, jest błędna lub myląca. Pewnego dnia napiszę coś dużego i opublikuję na moim blogu, ale nie dzisiaj.

Pierwszą rzeczą, na którą należy zwrócić uwagę, jest to, że wartość rezystora używana do zakończenia musi być powiązana z impedancją śledzenia. Przez większość czasu wartość rezystora jest taka sama jak impedancja śledzenia. Jeśli nie wiesz, jaka jest impedancja śladowa, powinieneś ją rozgryźć. Dostępnych jest wiele kalkulatorów impedancji online . Wyszukiwarka Google przyniesie dziesiątki innych.

Większość śladów na płytkach drukowanych ma impedancję od 40 do 120 omów, dlatego odkryłeś, że rezystor końcowy 1k nie zrobił prawie nic, a rezystor 100-omowy był znacznie lepszy.

Istnieje wiele rodzajów zakończeń, ale możemy z grubsza podzielić je na dwie kategorie: zakończenie i źródło. Zakończenie źródła jest po stronie kierowcy, zakończenie na końcu. W ramach każdej kategorii istnieje wiele rodzajów wypowiedzenia. Każdy typ najlepiej nadaje się do różnych zastosowań, a żaden nie nadaje się do wszystkiego.

Twoje zakończenie, pojedynczy rezystor uziemienia na drugim końcu, w rzeczywistości nie jest zbyt dobre. W rzeczywistości jest źle. Ludzie to robią, ale nie jest to idealne. Idealnie, aby ten opornik trafił na inną szynę zasilającą w połowie szyny zasilającej. Jeśli więc napięcie we / wy wynosi 3,3 V, to ten rezystor nie przejdzie do GND, ale kolejną szynę zasilającą na połowę 3,3 V (czyli 1,65 V). Regulator napięcia dla tej szyny musi być specjalny, ponieważ musi on ORAZ prądy odbiorcze, podczas gdy większość regulatorów tylko pobiera prąd. Organy regulacyjne, które działają w tym celu, będą wspominać o wypowiedzeniu na pierwszej stronie arkusza danych.

Dużym problemem związanym z większością terminacji końcowych jest to, że zużywają dużo prądu. Jest ku temu powód, ale nie będę w to wchodził. W przypadku zastosowań niskoprądowych musimy przyjrzeć się terminacji źródła. Najłatwiejszą i najczęstszą formą zakończenia źródła jest prosty szeregowy rezystor na wyjściu sterownika. Wartość tego rezystora jest taka sama jak impedancja śladowa.

Zakończenie źródła działa inaczej niż zakończenie końcowe, ale efekt netto jest taki sam. Działa poprzez kontrolę odbić sygnału, nie zapobiegając przede wszystkim odbiciom. Z tego powodu działa tylko wtedy, gdy wyjście sterownika zasila pojedynczy ładunek. Jeśli istnieje wiele obciążeń, należy zrobić coś innego (np. Używając rezystorów końcowych lub rezystorów końcowych wielu źródeł). Ogromną zaletą zakończenia źródła jest to, że nie obciąża sterownika tak jak zakończenie końcowe.

Powiedziałem wcześniej, że rezystor szeregowy do zakończenia źródła musi znajdować się przy sterowniku i musi mieć tę samą wartość co impedancja śledzenia. To było nadmierne uproszczenie. Jest jeden ważny szczegół, aby o tym wiedzieć. Większość sterowników ma pewien opór na wyjściu. Rezystancja zwykle wynosi 10-30 omów. Suma rezystancji wyjściowej i rezystora musi być równa impedancji śladowej. Powiedzmy, że twój ślad wynosi 50 omów, a twój kierowca ma 20 omów. W takim przypadku rezystor będzie wynosił 30 omów, ponieważ 30 + 20 = 50. Jeśli arkusze danych nie mówią, jaka jest impedancja wyjściowa / rezystancja sterownika, można założyć, że wynosi 20 omów - to spójrz na sygnały na płytce drukowanej i sprawdź, czy należy ją wyregulować.

Kolejna ważna rzecz: kiedy patrzysz na te sygnały na lunecie MUSISZ sondować odbiornik. Sondowanie gdziekolwiek indziej prawdopodobnie da ci zniekształcony przebieg i oszuka cię, że rzeczy są gorsze niż w rzeczywistości. Upewnij się również, że klips uziemienia jest tak krótki, jak to możliwe.

Wniosek: Przełącz się na zakończenie źródła z rezystorem 33 do 50 omów i powinieneś być w porządku. Obowiązują zwykłe zastrzeżenia.


David, bardzo dziękuję za wyczerpującą odpowiedź. Wszystko to miało sens, ale myślę, że w moim systemie jest jeszcze jedna komplikacja - linie SPI przechodzą z jednej płyty na drugą. Oszacowanie impedancji linii może być trudne - sygnał przepływa przez około 3 "na płycie głównej, przechodzi przez 6-calowy kabel taśmowy, a następnie przesuwa się wzdłuż 3-calowego śladu, aż dotrze do miejsca przeznaczenia. Druty kabla taśmowego są naprzemienne uziemienie (jak SCK, GND, MOSI, GND itp.) Czy twoja rekomendacja 30-20 Ohmów nadal obowiązuje?
Saad

@ Saad To, co zrobiłem w takich przypadkach (i zrobiłem to bardzo często), to użycie jednego rezystora w sterowniku i dostosowanie jego wartości po zbudowaniu prototypu. To kompromis, ale działa. Obecnie mam kilka systemów, które prowadzą SPI na kablach o długości 1 stopy z 3-6 cali śladów na każdej płytce drukowanej. Niektóre z nich działają na częstotliwości 30 MHz! Tak, zacznij od 33 lub 47 omów i dostosuj stamtąd.

3
+1 już, ale schemat pokazujący, jak podłączyć zakończenie źródła (tj. Szeregowo, a nie od linii do ziemi) byłby bardzo pomocny.
Photon

16

Ponieważ wybierasz się na krótkie odległości, nie sądzę, aby rezystory terminujące były dobrym pomysłem. Jak zauważyłeś, muszą być dość niskie, aby wykonać zadanie, a następnie linia pobiera dużo prądu, a napięcie jest tłumione o 2, jeśli również prowadzisz linię o tej samej impedancji.

Twoja częstotliwość taktowania nie jest aż tak wysoka, więc częstotliwości, których potrzebujesz do obsługi częstotliwości nawet 4 MHz, nie są tymi, które powodują problemy. Problem polega na tym, że masz szybkie zbocza prowadzące linie, które mają harmoniczne w setkach MHz, które powodują problemy. Przy pożądanych częstotliwościach masz zbity system, a nie linię transmisyjną. To znacznie ułatwia sprawy.

Dlatego rozwiązaniem jest tłumienie wysokich częstotliwości, które tak naprawdę nie są potrzebne, ale powodują problemy. Można to zrobić za pomocą prostego filtra dolnoprzepustowego RC natychmiast po wszystkim, co napędza linię. To właśnie częściowo robią teraz rezystory 330 Ω. Tworzą one filtr dolnoprzepustowy o pasożytniczej pojemności linii. Najwyraźniej to nie wystarczy i / lub nie jest wystarczająco przewidywalne. Można to naprawić za pomocą celowej pojemności na każdej linii.

Chcesz uruchomić magistralę z częstotliwością 4 MHz, co oznacza, że ​​najszybszym sygnałem, który musi obsłużyć, jest fala prostokątna 4 MHz. Oznacza to, że długość każdego poziomu wynosi 125 ns. Powiedzmy, że chcemy, aby były to co najmniej 4 stałe czasowe, co implikuje 98% czasu ustalania. Oznacza to, że maksymalna stała czasowa, na którą chcemy pozwolić, wynosi 31 ns. 31ns / 330Ω = 94 pF. To jest całkowite obciążenie rezystorów serii 330 Ω potrzebne do uzyskania stałej czasowej 31 ns. Zawsze będzie pewna pojemność pasożytnicza, której nie można przewidzieć, więc zobaczyłbym, jak wygląda sytuacja z 47 pF. Pozostawia to miejsce na ukrytą pojemność 10-20 pF, nie przekraczając naszej maksymalnej dopuszczalnej stałej czasowej.

Rezystory szeregowe powinny znajdować się jak najbliżej wszystkich pinów napędzających magistralę. Zakłada się, że wszystkie inne piny na magistrali będą wejściami CMOS podczas jazdy. W przypadku linii, które są zawsze napędzane tylko jednym stykiem (jak linia zegara, która jest napędzana tylko przez master), ustaw 47 pF jak najbliżej opornika. W przypadku linii, które mogą być prowadzone przez różne piny w różnych momentach (np. MISO), umieść 47 pF gdzieś pośrodku wszystkich sterowników. Każda linia otrzymuje tylko jeden kondensator 47 pF bez względu na liczbę sterowników, ale dla każdego sterownika jest jeden opornik.

Powyższe obliczenia mają stanowić dobry przewodnik na początek. Niektóre parametry nie mogą być znane i dlatego zostały uwzględnione z góry. Zacznij od 330 Ω w szeregu i 47 pF do ziemi, ale nie bój się zmieniać rzeczy w oparciu o rzeczywiście zaobserwowane wyniki.


2

W przypadku braku jakiegokolwiek zakończenia, gdy sygnał jest wysyłany ze źródła o bardzo niskiej impedancji do odbiornika o bardzo wysokiej impedancji, sygnał będzie wielokrotnie podskakiwał; faza sygnału będzie odwracana o 180 stopni podczas każdej podróży w obie strony.

Jeśli nie chcemy, aby sygnały odbijały się po trafieniu do miejsca docelowego, można zastosować zakończenie końcowe. Spowoduje to, że sygnał zostanie czysto pochłonięty w miejscu docelowym bez odbicia, ale wiele popularnych implementacji spowoduje, że źródło zobaczy znaczące obciążenie DC.

W wielu przypadkach można osiągnąć wyniki, które są tak samo praktycznie przydatne, jeśli zamiast tego wprowadza się rezystor szeregowy do źródła sygnału. Jeśli na drugim końcu linii nie ma odbiornika, sygnał zostanie odbity, gdy się tam dostanie, ale każde takie odbicie zostanie pochłonięte przez źródło, a nie ponownie odbite. Należy również zauważyć, że zakończenie źródła nie nakłada obciążenia DC na urządzenie prowadzące linię.

W przypadku braku zakończenia, jeśli linia jest napędzana przez niską impedancję i odbierana z wysoką impedancją, urządzenie odbiorcze może widzieć napięcie wyższe niż napięcie sterujące (teoretycznie do dwukrotności napięcia, jeżeli impedancja sterująca źródła wynosi zero, a impedancja odbiorcza jest nieskończona). Jeśli źródło lub odbiornik jest prawidłowo zakończony, odbierane napięcie będzie prawie równe napięciu sterującemu (jeśli źródło o zerowej impedancji napędzało odbiornik o właściwej impedancji lub źródło o właściwej impedancji napędzało odbiornik o nieskończonej impedancji, otrzymane napięcie będzie równe napięciu napędu). Jeśli oba są prawidłowo zakończone, napięcie odbioru będzie równe połowie napięcia napędu.

Symulacja tutaj to pokazuje. Obejmuje generator impulsów, który wytwarza łańcuch impulsów około 49 razy na sekundę, dwie szeregowe linie opóźniające 5 ms (czas okrążenia 1/50 sekundy) oraz przełączalne rezystory terminujące na obu końcach.

Obwód zawiera trzy przełączniki SPDT; kliknij jeden, aby zmienić jego stan. Dolne dwa przełączniki kontrolują zakończenie źródła i miejsca docelowego. Dla nich „góra” oznacza dobre zakończenie, a „dół” oznacza zło. Górny przełącznik kontroluje, czy linia powinna być napędzana przez automatyczny generator impulsów, czy przez ręczne wejście logiczne. Aby ręcznie wysyłać impulsy wzdłuż linii, przełącz górny przełącznik „w dół”, a następnie ustaw obok niego „L”.

Sygnały docierające do miejsca docelowego będą czyste, jeżeli zarówno źródła lub przeznaczenia jest właściwie zakończony. Jeśli oba są prawidłowo zakończone, otrzymane napięcie sygnału będzie stanowić połowę napięcia napędu. Jeśli jeden jest prawidłowo zakończony, a drugi nie, odbierane napięcie będzie stanowiło około 91% napięcia napędowego („złe” oporniki są „złe” dziesięciokrotnie, a zatem nie absorbują około (10/11) energii). Jeśli żadne z nich nie zostanie zakończone, odbierane napięcie będzie początkowo około 1,656 razy większe od napięcia napędu, ale dziwne odbicia pojawią się co 20 ms.


1

Wypróbuj zakończenie AC (na przykład kondensator 470 pF połączony szeregowo z rezystorem 110 Ohm) i podłącz tę kombinację szeregową z wyjścia docelowego zegara SPI do masy. Zakończenie pobierze około 30 mA przez czas trwania krawędzi, co może łatwo zrobić, ale w przeciwnym razie wyzeruje prąd. W przypadku dwukierunkowej linii danych jest to nieco trudniejsze. Umieściłem zakończenie 470 pF, 220 Ω AC zarówno na końcu nadrzędnym, jak i podrzędnym linii danych SPI i to działa, tj. Dopuszczalne przeregulowanie i przeregulowanie.

Z zadowoleniem przyjmuję komentarze na ten temat.


0

Nie wchodząc zbyt głęboko w szczegóły, ponieważ poprzednie posty uderzyły w gwóźdź w głowę. Sprowadza się to do tego, że SPI to linie niezrównoważone. Nawet jeśli masz niską częstotliwość taktowania, należy przestrzegać krawędzi taktowania szybkiego ns. W moim przypadku znalazłem rezystor 470 omów szeregowo z linią SPI CLK po stronie Master. Po usunięciu tego rezystora i wdrożeniu rozwiązania zalecanego dla niesymetrycznych linii z kraty i sugestii zamieszczonych powyżej (mogłem zaimplementować tylko połowę rozwiązania od strony Slave, odpowiednio poprawiłem pokrywy filtrów) byłem w stanie przedłużyć długość mojego kabla komunikacyjnego SPI z Od 10 cm do 160 cm bez błędów komunikacji:

Poprawa odporności na zakłócenia interfejsu szeregowego : Biała księga dotycząca półprzewodników kratowych (lipiec 2014 r.)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.