Dlaczego niektóre z moich sygnałów „drżą” (mają drgania)?

9

Mam magistralę SPI 2 MHz, ale zauważyłem, że niektóre moje sygnały często „drżą”. Tak, mój wyzwalacz jest poprawnie skonfigurowany, więc nie sądzę, że problem tam leży.

Możesz zobaczyć, co mam na myśli tutaj: (z włączonym trybem trwałości). To jest zegar mojej magistrali SPI.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Interfejs SPI działa dobrze. Przesłałem setki megabajtów na wiele płyt i do tej pory nie widziałem problemu. Ale nadal jestem zainteresowany tym, co może być problemem. Czy powinienem też zadawać sobie trud, aby to naprawić, nawet jeśli działa?

Pomiary wykonano bezpośrednio u źródła za pomocą BARDZO małego zacisku uziemiającego.

To jest uproszczony schemat mojego obwodu. Oczywiście na płycie znajduje się więcej urządzeń SPI, ale na potrzeby tego pytania jest to dokładne, ponieważ na płycie nie ma jeszcze żadnych elementów lutowanych, oprócz uC i karty SD.

wprowadź opis zdjęcia tutaj

Master (AVR Mega 128) ucieka z wewnętrznego oscylatora RC - nie wiem, czy byłoby to istotne, ale ponieważ sygnały zmieniają się w czasie, możliwe, że drgania oscylatora RC również kończą się w szynie SPI. Pomyślałem, że o tym wspomnę. Przyszło mi też do głowy, że podczas tych pomiarów prowadziłem kontroler w nieskończonej pętli. Oto kod:

while(1)
{
    setFirstBitOnDriver(driver); // this sends a 8-bit command on the SPI bus.
    GLCD_SetCursorAddress(40); // Change cursor position on the display.
    GLCD_WriteText("LED: "); 
    for(wire=0;wire<72;wire++)
    {
        itoa(wire+1,str,10);
        GLCD_WriteText(str);
        GLCD_SetCursorAddress(44);
        _delay_ms(10);
        shiftVectorOnDriver(driver); // another command on SPI. 8-bit wide.
    }
}

Drgania / dreszcze mogą się zdarzyć, gdy wewnętrzny biegnie 72 razy, a następnie wychodzi. Ponieważ wykonanie pierwszych trzech linii zajmuje więcej czasu, może się zdarzyć, że każda 73 fala pojawi się w nieco innym czasie z powodu dodatkowego czasu przetwarzania. Gdybym musiał się założyć, zgaduję, że to jest przyczyna mojego problemu (gdybym mógł, potwierdziłbym to w tej chwili, ale moje tablice w pracy i następny tydzień są wolne!) Ale wciąż chciałbym opinii / odpowiedzi SE na ten temat.

Ale biorąc pod uwagę, że uC działa przy 8 MHz, nie drgam z powodu oprogramowania, ponieważ byłoby to w nanosekundach, ale raczej w mikrosekundach. Ale na drugiej figurze widoczna jest płaska linia. Dzieje się to przez bardzo krótką sekundę, gdy całe przebiegi zmieniają się w czasie i są niewidoczne na ekranie. Zgaduję, że to wynika z pętli i jitter w pierwszym zdjęciu jest ze względu na oscylator RC.

Saad
źródło
2
jaki jest twój wyzwalacz?
markrages
@markrages wyzwalacz jest ustawiony na 1,48 V na CH1 - zbocze narastające.
Saad
2
Można się domyślać, że uC (moje założenie), który generuje sygnał zegarowy SPI, używa PLL, który działa poprzez skracanie lub wydłużanie niektórych cykli zegara, aby utrzymać się zablokowany na referencji. Kiedy nadchodzą te krótkie lub długie cykle zegarowe, powoduje to drgania na wykresie lunety, ponieważ krawędzie, na które patrzysz, pojawiają się wcześniej / później w stosunku do krawędzi, którą uruchomiłeś.
Photon
1
Lub SPI jest generowany w głównej pętli, ale czasami występuje przerwanie, które opóźnia wykonanie głównej pętli, więc ponownie widać różnice w okresie pętli.
Photon
2
Słowo jest „jitter”, ale ty może powiedzieć „dreszcz” ;-)
stevenvh

Odpowiedzi:

6

To, co pokazuje twój zakres, to klasyczny przykład fluktuacji , co oznacza błąd w czasie zdarzenia (zbocze narastające lub opadające), niezależnie od tego, czy na sygnale występuje szum napięcia.

Ale co może powodować fluktuacje w twoim systemie?

  • Jak spekulujesz, jeśli zegar główny uC jest roztrzęsiony, jitter najprawdopodobniej przeniesie bezpośrednio na wyjście zegara z urządzenia peryferyjnego SPI.

    Nieodpowiednie obejście (powinieneś mieć dodatkowe obejście zbiorcze na pokładzie oprócz dwóch wyciągniętych kondensatorów 100 nF) może prowadzić do drgań w obwodzie zegara uC.

    Hałas zasilający wprowadzany przez inne obwody na płycie może również mieć ten efekt (ale zostałby zmniejszony przez większe obejście).

  • Fluktuacja może być nieodłącznie związana z wydajnością urządzenia peryferyjnego SPI uC. Musi wygenerować zegar SPI w odniesieniu do zegara systemowego. Jeśli używa prostego dzielnika (4-do-1 w przypadku zegara systemowego 8 MHz i zegara SPI 2 MHz), nie spodziewałbyś się, że zobaczysz dużo dodanego jittera (chociaż jitter zegara systemowego przejdzie od razu). Ale jeśli używa bardziej złożonego schematu, takiego jak PLL, obwód ten może zmieniać szerokość impulsu zegara SPI, aby zsynchronizować się z zegarem systemowym, i byłoby to jitter. Obwód PLL może być również szczególnie wrażliwy na szum zasilania.

Jeśli amplituda drgań jest ograniczona do niewielkiej części okresu zegarowego, jak się wydaje, nie ma powodu, aby drgania powodowały błędy na magistrali SPI (zgodnie z twoją obserwacją, że magistrala SPI wydaje się działać zgodnie z oczekiwaniami) .

The Photon
źródło
Mam czapkę obejściową 100nF. na każdej parze vcc / gnd na każdym chipie. Czy nadal sugerowałbyś więcej? Jeśli tak, dodatkowe 100nF lub 1uF pułapki?
Saad
Jeśli ten jitter jest najgorszym „problemem” wydajności na twojej płycie, nie musisz niczego zmieniać. W zależności od liczby innych obwodów w systemie i tego, co robią, kilka dodatkowych 1, 10 i / lub 100 uF obejść rozmieszczonych wokół płytki jest powszechną praktyką projektową. Nie są one zlokalizowane w konkretnym układzie, zapewniają „obejście zbiorcze” dla całej płyty.
Photon
Tak, w tym celu mam na pokładzie dwa tantal 47u. Więc powinienem być w porządku w części omijającej.
Saad,
2
SPI jest w pełni synchroniczny. Żadna ilość jittera nie spowoduje niepowodzenia SPI.
markrages
@markrages, w sytuacji OP, to prawda. Zasadniczo jednak naprawdę ekstremalna ilość jittera okresu może na przykład zmniejszyć odstęp między zboczem narastającym a zboczem opadającym na tyle, aby naruszyć czas ustawiania części podrzędnej i spowodować awarię interfejsu. Jitter musiałby być równy prawie połowie okresu zegarowego, aby tak się stało.
Photon,
6

Wygląda mi to na jitter sygnału. Okres taktowania jest nieznacznie zmienny, na tyle, że trwałość lunety sprawia, że ​​krawędź wygląda „rozmazana”.

Nie wiem, czy twój zakres Rigola ma możliwość obliczania statystyk podczas pomiaru. Jeśli tak, możesz dostosować punkt wyzwalania, aby krawędź wyzwalania pojawiła się na lewej krawędzi ekranu, wyreguluj podstawę czasu, aby pokazać pełny okres, i zmierz zmianę częstotliwości w czasie, aby wyczuć zmianę. (Jitter może wyglądać gorzej niż wtedy, gdy krawędź wyzwalacza jest poza ekranem).

Jeśli chcesz zawęzić źródła fluktuacji, zacznę od oscylatora RC. Sprawdź, czy masz opcję zastosowania innej metody zegara (np. Kryształu), zaimplementuj ją i zmień jitter.

Adam Lawrence
źródło
Spróbuje go z zewnętrznym oscylatorem, gdy tylko praca się rozpocznie!
Saad,
6

Obrazy zakresów mogą wprowadzać w błąd i trzeba spojrzeć na wszystkie parametry, aby poprawnie zinterpretować dane. Pierwszy obraz pokazuje jitter 10 ns, co nie byłoby tak miłe, gdyby spust znajdował się po lewej stronie ekranu. Ale w prawym dolnym rogu znajduje się wyzwolenie + 1,78 µs, tak że 10 ns to właściwie tylko 0,5% przedziału czasu. Ten poziom fluktuacji może wynikać z oscylatora RC. Oczekuj, że drgania zostaną zredukowane o co najmniej jeden rząd wielkości za pomocą oscylatora kryształowego.

Mówisz, że nie spotkałeś jeszcze żadnych problemów w przesyłaniu danych SPI. To dzięki względności 0,5%. Jeśli wykonasz MOSI 1 µs przed impulsem CLK, jitter 0,5% spowoduje jitter 5 ns, nie naruszy to ustawień i czasów wstrzymania.

Jeśli potrzebujesz otuchy, po prostu ustaw podstawę czasu tak, aby można było zobaczyć pełny czas, zarówno kanał MOSI, jak i kanał CLK. Zauważysz, że drgania będą ledwo widoczne, a kolejne krawędzie pozostaną dobrze oddzielone.

stevenvh
źródło
Steven, czy możesz wyjaśnić, dlaczego pozycja spustu ma znaczenie? Jak uzyskałeś wynik 0,5%?
Saad
2
@ Saad - Punktem spustowym jest czas = 0. To, co pokazano na ekranie, dzieje się 1.78 us = 1780 ns później. A jitter 10 ns (mniej więcej) jest odmianą tego 1780 ns, więc 10 ns / 1780 ns = 0,56%. Wygląda tak źle, ponieważ jest powiększony na tej opadającej krawędzi, ale krawędź odniesienia (wyzwalacz) będzie miała kilkadziesiąt metrów w lewo. Jeśli więc pomniejszysz widok i zobaczysz pełny puls, drgania będą wyglądały na znacznie mniejsze. Gdyby punkt wyzwalania znajdował się po lewej stronie wyświetlacza, powiedzmy przy -100 ns, to jitter 10 ns wyniósłby 10%.
stevenvh
1

Jitter jest formą hałasu. Jeśli weźmiesz pod uwagę czasy przybycia między krawędziami impulsów, to rodzaj sygnału, to jeśli te krawędzie nie drgają wcale, oznacza to, że twój system emituje sygnał pozbawiony szumów!

Fale kwadratowe są często generowane przez próg na fali bardziej ciągłej, z niektórymi obwodami typu wyzwalacza Schmidta, które mają zachowanie histerezy. Oscylatory kwarcowe lub RC nie „natywnie” emitują fal prostokątnych.

Tak więc, jeśli na tej fali wejściowej występuje pewien szum napięcia, szum ten przełoży się na niewielkie przesunięcia w wyzwalaniu, ponieważ napięcie osiąga czasem którykolwiek próg wcześniej lub później.

I tak, hałas jednego rodzaju (szum napięcia) zamienia się w hałas innego rodzaju (hałas rozrządu).

Kaz
źródło