Interner oder externer Oszillator

22

Ich benutze immer den internen Oszillator, den Bilder haben, da ich nie die Notwendigkeit gefunden habe, etwas mit einer höheren Frequenz als 8 MHz laufen zu lassen (was die schnellste ist, die ich benutze). Gibt es irgendwelche Gründe, die über 8 MHz hinausgehen und bedeuten, dass ich einen externen Oszillator verwenden sollte? Es scheint nur noch eine Sache zu sein, die mir missfällt, aber ich würde gerne hören, was andere tun.

SimonBarker
quelle
" Warum wird manchmal ein externer Quarz benötigt, obwohl die MCU eine interne CPU hat? " Die Tatsache, dass die MCU eine interne CPU hat, hat fast nichts damit zu tun, warum eine interne oder externe Uhr verwendet wird. Vermischen Sie zwei verschiedene Themen?
gbulmer

Antworten:

33

Wie bereits erwähnt, sind genaue Frequenz und Frequenzstabilität Gründe für die Verwendung eines externen Keramikresonators oder -kristalls. Ein Resonator ist um ein Vielfaches genauer als der interne RC-Oszillator und für die UART-Kommunikation ausreichend. Ein Kristall ist viel genauer und erforderlich, wenn Sie andere Kommunikationsarten wie CAN, USB oder Ethernet ausführen.

Ein weiterer Grund für einen externen Kristall ist die Wahl der Frequenz. Kristalle kommen in einem weiten Frequenzbereich vor, wohingegen der interne Oszillator normalerweise eine Frequenz ist, wobei möglicherweise eine Auswahl von 4x PLL aktiviert ist. Einige neuere 24-Bit-Core-PICs haben sowohl einen Multiplikator als auch einen Teiler in der Taktkette, sodass Sie eine große Auswahl an Frequenzen aus der einzelnen internen Oszillatorfrequenz auswählen können.

Es gibt natürlich verschiedene Anwendungen, die von Natur aus eine genaue Frequenz oder ein genaues Timing erfordern, abgesehen von der Kommunikation. Zeit ist die Eigenschaft in der Elektronik, die wir kostengünstig am genauesten messen können. Daher wird das Problem manchmal in das Messen von Zeit oder das Erzeugen von Impulsen mit genauem Timing umgewandelt.

Dann gibt es Anwendungen, die eine Langzeitsynchronisation mit anderen Blöcken erfordern. Ein 1% -Oszillator wäre um mehr als 14 Minuten pro Tag abgeschaltet, wenn er als Basis für eine Echtzeituhr verwendet würde. Möglicherweise wird auch eine genaue Langzeitzeit benötigt, ohne dass Sie die Echtzeit kennen müssen. Angenommen, Sie möchten, dass eine Reihe von Geräten mit geringem Stromverbrauch einmal pro Stunde aufwacht, um einige Sekunden lang Daten auszutauschen und dann wieder einzuschlafen. Ein 50ppm Kristall (sehr leicht zu bekommen) ist in einer Stunde nicht länger als 180ms entfernt. Ein 1% RC-Oszillator könnte jedoch um 36 Sekunden ausgeschaltet sein. Dies würde den Geräten, die nur ein paar Sekunden pro Stunde kommunizieren mussten, eine beträchtliche Pünktlichkeit und damit einen erheblichen Energiebedarf verleihen.

Olin Lathrop
quelle
1
Nicht zum Thema gehörend, aber ich dachte, dass CANbus robust genug ist, um Schwankungen der Taktfrequenzen zwischen Knoten zu verarbeiten. Missverstehe ich
Stephen Collings
1
@Remiel: CAN hat Vorkehrungen für Knoten, die trotz einiger Taktfrequenzunterschiede synchron bleiben. Die Knoten müssen noch einigermaßen nah sein. In den meisten Fällen benötigen Sie grundsätzlich in jedem Knoten mindestens einen Keramikresonator.
Olin Lathrop
24
  1. Präzision. Interne Uhren sind nicht präzise, ​​können durch Rauschen beeinträchtigt werden.

  2. Temperaturunabhängige Präzision. Typische Oszillatoren können sehr unterschiedlich sein. Spezielle temperaturkompensierende Oszillatoren können bei Anwendungen mit niedriger oder hoher Temperatur oder bei starken Temperaturschwankungen erforderlich sein.

  3. Geschwindigkeit. Interne Oszillatoren erreichen möglicherweise nicht die höchste Geschwindigkeit des IC. Hierfür können externe erforderlich sein.

  4. Stromspannung. Die Geschwindigkeit eines internen Timers kann von der Spannung abhängen, mit der er betrieben wird.

  5. Es werden mehrere Uhren benötigt. Einige Anwendungen möchten einen Oszillator gemeinsam nutzen.

  6. Spezielle Anwendungen, bei denen die interne Uhr möglicherweise nicht einfach verwendet werden kann. Das Teilen der internen Uhr kann schwieriger sein, als einen billigen 31-kHz-Uhrenkristall darauf zu werfen, um die Zeit zu halten.

Der vom Arduino verwendete ATMEGA 328 benötigt einen externen Quarz mit 5 V für seine maximale Geschwindigkeit. Die Lily Pad-Version läuft auf dem internen Oszillator mit 8 MHz, da sie auf 3,3 V begrenzt ist. Das MSP430 Value Line-Launchpad ist auf 10 MHz bei 3 V und 8 MHz bei 2,5 V begrenzt.

Passant
quelle
10
Ein Beispiel für Präzision: USB braucht eine präzise Uhr. Die Mikrochips PIC18F2550 können intern nahezu jede Taktfrequenz erzeugen, aber die Genauigkeit ist für USB zu schlecht. Als ich es versuchte, gab es alle 10-20s eine Unterbrechung. Dies geschah nicht mit einem externen Oszillator. Mittlerweile haben sie den PIC18F25k50, der seine Uhr mit dem USB-Signal synchronisieren kann und keinen externen Oszillator für USB mehr benötigt.
Sweber
1
Um pedantisch zu sein, der interne 8-MHz-Takt ist ein RC-Oszillator, kein Quarz, daher seine geringe Genauigkeit.
Austin
@austin fester Kommentar.
Passant
13

Die Frequenzstabilität ist bei einer externen Frequenz höher. Wenn Sie also eine Anwendung haben, die wirklich von der mcu-Frequenz abhängt, müssen Sie möglicherweise eine externe verwenden.

Aber die meisten modernen mcu: s haben einen recht stabilen internen Oszillator, daher war dies meiner Meinung nach vor ein paar Jahren eine größere Frage. Es gibt auch immer mehr Möglichkeiten, die interne zu trimmen und Temperaturdrift (usw. usw.) auszugleichen.

Auf der anderen Seite gibt es andere Möglichkeiten, um sicherzustellen, dass Sie synchronisiert sind. In einigen Ländern beträgt die Frequenzstabilität im Stromnetz 50 Hz ± 0,01 Hz, und an anderen Orten wie in Schweden beträgt sie ± 0,001 Hz, und ich habe Projekte gesehen, bei denen dies beibehalten wird Dinge synchron. Und dann bist du nicht mehr so ​​abhängig von der mcu freq und kannst die interne verwenden. Aber das ist ein bisschen Thema :)

Johan
quelle
3
Beachten Sie, dass diese Werte für die Netzfrequenz langzeitstabil sind . Das ist in Ordnung, um die Zeit über Wochen oder Monate genau zu halten, aber über einen kurzen Zeitraum (Stunden) können schwerwiegende Abweichungen auftreten. Bei einer el cheapo Digitaluhr müssen Sie die Zeit jedoch kaum einstellen.
Stevenvh
@ Stevenvh guter Punkt, beachten Sie auch, dass es andere Quellen gibt, die verwendet werden könnten, um die Langzeitstabilität zu überprüfen. Sowohl das GPS- als auch das GSM-System haben sehr schöne Uhren, aber es ist komplizierter, sie zu benutzen.
Johan
3
Obwohl es viele andere Anwendungen gibt, die dies erfordern würden, gibt es eine, die speziell viele Probleme ohne eine genaue Zeitbasis verursacht - serielle Kommunikation.
JustJeff
Ich kenne keine Frequenzstabilität, die mit einem externen Quarzkristall nicht höher wäre . Mit einem Siliziumoszillator wird keine Genauigkeit unter 0,1% erreicht.
Jason S
1
@Johan - DCF77 / WWVB ist so genau wie GPS oder GSM und viel einfacher zu handhaben (1Hz Herzschlag)
Stevenvh
2

Die Frequenzstabilität ist die wichtigste, insbesondere für serielle Kommunikationen mit hoher Geschwindigkeit. Dies führt jedoch auch dazu, dass gelegentlich ein Kristall mit einer scheinbar ungeraden Frequenz benötigt wird, um eine genaue Baudrate zu erhalten, da Ihnen die Taktteiler nur eingeschränkte Möglichkeiten bieten.

Martin
quelle
1

Ich bin tatsächlich auf ein Szenario gestoßen, in dem 1% für UART nicht gut genug war.

Wenn einer von euch von der Teensy ++ v1.0 Mikrocontroller-Entwicklungsplatine gehört hat, hat sie einen schrecklich empfindlichen UART. Ich hatte mein Host-Baud auf 115200 und es auf 115200 eingestellt und konnte für die längste Zeit nicht herausfinden, warum es die Daten nicht richtig las. Es stellte sich heraus, dass mein Host näher an 114300 Baud sendete. (115200 - 114300) / 115200 = ~ 0,9% Fehler. Ich habe es mit zwei verschiedenen MCUs versucht und sie haben gut funktioniert.

Der Punkt ist: Unabhängig von Ihrer Anwendung sollten Sie einen externen Resonator, Quarz oder sogar Oszillator verwenden, wenn eine höhere Genauigkeit der Taktfrequenz von Vorteil ist, wenn Ihr Chip nicht über die erforderliche Treiberschaltung verfügt.

PS: Ich frage mich, ob irgendjemand irgendwelche Einsichten darüber hat, welche niedrige Design-Wahl sie für die UART-Hardware getroffen haben, die sie so empfindlich macht.

NickHalden
quelle
Die Grundvoraussetzung für einen UART ist, dass der Empfänger jedes Bit abtastet, solange es gültig ist. Im Idealfall würde der Empfänger den genauen Zeitpunkt des Eintreffens des Startbits bemerken und die Daten genau 1,5 Bit später abtasten, dann 2,5, 3,5 usw. bis zu 8,5 Bit später. In der Praxis kommt es normalerweise zu einem Anstieg, wenn der Empfänger den Startimpuls erkennt, und danach kann es zu einem Anstieg kommen. Zum Beispiel könnte man versuchen, 2400 Baud mit einem Prozessor zu empfangen, der 8.192 Anweisungen pro Sekunde
ausführt
So etwas kann getan werden, wenn das Sende-Timing vollkommen sauber ist, aber die Abtastung nicht in genauen Intervallen von 417 us erfolgt. Stattdessen wird es in Intervallen von 366us und 488us passieren. Wenn ein Empfänger "wählerisch" ist, bedeutet dies oft, dass er Daten viel früher oder später abtastet als es sollte, aber zu einem Zeitpunkt, zu dem ein idealer Sender das erwartete Datenbit ausgeben würde.
Supercat
@supercat Warum sollten sie es jemals entwerfen, um es früher als später zu testen? Es scheint, als wäre eine Abtastung bei den von Ihnen beschriebenen .5-Werten immer am besten. So habe ich meine Software UART vor ein paar Jahren implementiert ... ist mir nicht einmal eingefallen, es anders zu machen. Das ermöglicht einfach die meiste Fehlertoleranz auf dem Sender.
NickHalden
@JGord: Wenn das Sampling von einer Uhr gesteuert wird, die viel schneller als die Baudrate ist, sind die Dinge wunderbar, aber das ist nicht immer der Fall. Angenommen, man hat versucht, 115.200 Baud mit einem 6502 mit 1,0 MHz und ohne UART zu empfangen. Eine Schleife, die auf das Startbit wartet, benötigt 7 us, und Abfragemöglichkeiten werden in Intervallen von 1 us eingeplant. Es gibt eine 8us-Ungewissheit, wann der 6502 ein Bit abfragen würde, aber da die Bits 8,6us lang sind, könnte man Daten erfolgreich empfangen, wenn ...
supercat
... die Übertragungsgeschwindigkeit war präzise, ​​Anstiegs- und Abfallzeiten waren gleichmäßig und symmetrisch, und es gab keinen anderen Jitter. Ich weiß nichts über das Teensy-Board, aber ich wäre nicht überrascht, wenn es einen Software-UART verwenden würde, um den Controller über seine normalen Fähigkeiten hinaus zu treiben.
Supercat
1

Externe Quarzoszillatoren sind genauer als interne Uhren und sollten verwendet werden, wenn ein genaues Timing erforderlich ist. Manchmal verwenden Designer interne, um Geld zu sparen.

Mahmoud Hosseinipour
quelle
2
Dies scheint nichts zu den bestehenden Antworten hinzuzufügen.
Adam Haun