Więc wcześniej pracowałem tylko z prostymi 8-bitowymi MCU Atmel i zdałem sobie sprawę z mojego schematu na płytce programistycznej, że ma on tylko kryształ 12 MHz, ale MCU działa z częstotliwością do 100 MHz. (Myślę, że domyślnie jest to 80 MHz. Podniosłem go tylko raz dla zabawy. To tylko prosta linia w kodzie).
Jak to robi? Dlaczego na przykład Atmega328 działa z używaną prędkością kryształów?
Odpowiedzi:
Nie ma to nic wspólnego z rdzeniem będącym procesorem ARM; chodzi o to, jak działa układ zegarowy:
W wielu systemach, takich jak mikrokontrolery, układy RF, układy audio ... musisz wygenerować szybszy zegar, który jest dokładną wielokrotnością jakiegoś zegara odniesienia (na przykład zewnętrznego kryształu).
Osiąga się to dzięki oscylatorowi sterowanemu napięciem (VCO), który można regulować częstotliwością poprzez zwiększenie lub zmniejszenie napięcia sterującego.
Teraz, po prostu ustawiając dowolne napięcie sterujące, możesz ustawić, aby oscylowało ono z częstotliwością mniej więcej w odpowiednim „ballparku”, ale nie z dokładną wielokrotnością częstotliwości wejściowej. Zwłaszcza VCO mogą być nieco nieprzyjemne, więc częstotliwość będzie też nieustannie „wędrować” po całym miejscu. Musisz kontrolować ten oscylator, porównując go z oscylatorem odniesienia.
Sposobem na to jest zastosowanie pętli synchronizowanej fazowo . Pomysł jest prosty:
Powyżej jest pętla kontrolna, zamknięta w fazie - stąd nazwa.
W przypadku „bogatych” mikrokontrolerów, które mają wiele urządzeń peryferyjnych i stąd korzyści płynące z posiadania wielu zegarów wewnętrznie, zwykle ma się co najmniej 1 PLL. ATMega328 jest pod tym względem nieco dziwny: to stosunkowo energochłonny, stosunkowo bogaty w peryferia mikrokontroler, który wciąż nie ma PLL.
źródło
Niektóre urządzenia mają w sobie PLL, które mogą zwielokrotniać częstotliwość kryształu do wyższych częstotliwości. ATMega328 nie ma PLL, używa bezpośrednio kryształu.
źródło