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.
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.
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.
źródło
Odpowiedzi:
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) .
źródło
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.
źródło
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.
źródło
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).
źródło