Vorher habe ich also nur mit einfachen 8-Bit-Atmel-MCUs gearbeitet und festgestellt, dass meine Entwicklungsplatine nur einen 12-MHz-Quarz enthält, die MCU jedoch mit bis zu 100 MHz arbeitet. (Ich denke, die Standardeinstellung ist 80 MHz. Ich habe sie nur aus Spaß einmal höher gesetzt. Es ist nur eine einfache Zeile im Code.)
Wie macht es das? Warum läuft beispielsweise ein Atmega328 mit der verwendeten Kristallgeschwindigkeit?
Antworten:
Dies hat nichts damit zu tun, dass der Kern ein ARM-Prozessor ist. Es geht darum, wie die Taktschaltung funktioniert:
In vielen Systemen wie Mikrocontrollern, HF-Chips, Audio-Chips usw. müssen Sie einen schnelleren Takt erzeugen, der ein genaues Vielfaches eines Referenztakts ist (z. B. ein externer Kristall).
Dies erreichen Sie, indem Sie einen spannungsgesteuerten Oszillator (VCO) verwenden, dessen Frequenz Sie durch Ein- oder Verringern einer Steuerspannung einstellen können.
Jetzt können Sie durch Einstellen einer beliebigen Steuerspannung diese mit einer Frequenz in etwa im rechten "Baseball" schwingen lassen, jedoch nicht mit einem exakten Vielfachen der Eingangsfrequenz. Insbesondere VCOs können etwas driftig sein, so dass die Frequenz auch kontinuierlich über den gesamten Ort "wandert". Sie müssen diesen Oszillator steuern, indem Sie ihn mit dem Referenzoszillator vergleichen.
Der Weg dazu ist die Verwendung eines Phasenregelkreises . Die Idee ist einfach:
Das Obige ist ein Regelkreis, der an die Phase von - daher der Name - gebunden ist.
Für "reiche" Mikrocontroller, die viele Peripheriegeräte haben und daher von mehreren internen Takten profitieren, ist es üblich, mindestens 1 PLL zu haben. Das ATMega328 ist in dieser Hinsicht etwas seltsam: Es ist ein relativ leistungshungriger, relativ peripherer Mikrocontroller, der immer noch keine PLL hat.
quelle
Einige Geräte verfügen über eine PLL, die die Kristallfrequenz mit höheren Frequenzen multiplizieren kann. Der ATMega328 hat keine PLL, er nutzt den Kristall direkt.
quelle