Interner oder externer Oszillator

Ich verwende immer den internen Oszillator, den Bilder haben, da ich nie die Notwendigkeit gefunden habe, etwas mit einer höheren Frequenz als 8 MHz zu betreiben (was die schnellste ist, die die von mir verwendeten Bilder in der Regel erreichen können). Gibt es neben dem Überschreiten von 8 MHz irgendwelche Gründe, warum ich einen externen Oszillator verwenden sollte? Es scheint mir nur eine weitere Sache zu sein, die schief geht, aber ich wäre interessiert zu hören, was andere tun.

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. Verbindest/verwechselst du zwei unterschiedliche Probleme?

Antworten (7)

Wie andere gesagt haben, 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 gut genug für die UART-Kommunikation. Ein Kristall ist viel genauer und notwendig, wenn Sie andere Kommunikationsarten wie CAN, USB oder Ethernet verwenden.

Ein weiterer Grund für einen externen Quarz ist die Wahl der Frequenz. Kristalle gibt es in einem breiten Frequenzbereich, während der interne Oszillator normalerweise eine Frequenz ist, bei der 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 treffen können.

Es gibt natürlich verschiedene Anwendungen, die von Natur aus eine genaue Frequenz oder ein genaues Timing erfordern, abgesehen von Kommunikationen. Zeit ist die Eigenschaft in der Elektronik, die wir am genauesten und billigsten messen können, daher verwandelt sich das Problem manchmal in eines der Zeitmessung oder der Erzeugung von Impulsen mit genauem Timing.

Dann gibt es Anwendungen, die eine Langzeitsynchronisation mit anderen Blöcken erfordern. Ein 1%-Oszillator würde um mehr als 14 Minuten pro Tag abweichen, wenn er als Basis für eine Echtzeituhr verwendet würde. Es kann auch eine genaue Langzeitzeit benötigt werden, ohne die Echtzeit kennen zu müssen. Angenommen, Sie möchten, dass eine Reihe von Geräten mit geringem Stromverbrauch einmal pro Stunde aufwachen, um einige Sekunden lang Daten auszutauschen und dann wieder in den Ruhezustand zu wechseln. Ein 50-ppm-Kristall (sehr leicht zu bekommen) wird in einer Stunde nicht mehr als 180 ms abfallen. Ein 1% RC-Oszillator könnte jedoch um 36 Sekunden ausgeschaltet sein. Dies würde die Einschaltzeit und damit den Energiebedarf der Geräte, die nur wenige Sekunden pro Stunde kommunizieren müssten, erheblich erhöhen.

Off-Topic, aber ich dachte, CANbus sei robust genug, um Variationen der Taktfrequenzen zwischen Knoten zu bewältigen. Verstehe ich falsch?
@Remiel: CAN hat Vorkehrungen dafür getroffen, dass Knoten trotz einiger Taktfrequenzunterschiede synchron bleiben. Die Knoten müssen noch einigermaßen nah beieinander liegen. In den meisten Fällen benötigen Sie grundsätzlich mindestens einen Keramikresonator in jedem Knoten.
  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 stark variieren. Spezielle temperaturkompensierende Oszillatoren können in Anwendungen mit niedrigen oder hohen Temperaturen oder bei starken Temperaturschwankungen erforderlich sein.

  3. Geschwindigkeit. Interne Oszillatoren erreichen möglicherweise nicht die höchste Geschwindigkeit des IC. Dafür können externe benötigt werden.

  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 ohne weiteres verwendet werden kann. Das Teilen der internen Uhr könnte für Zeitmessungsanwendungen schwieriger sein, als einen billigen 31-kHz-Uhrquarz darauf zu werfen.

Aus dem Kopf heraus benötigt der ATMEGA 328, den das Arduino verwendet, einen externen Kristall bei 5 V für seine maximale Geschwindigkeit. Die Seerosenblatt-Version läuft mit 8 MHz, auf dem internen Oszillator, weil er auf diesen bei 3,3 V begrenzt ist. Das Launchpad der MSP430 Value Line ist auf 10 MHz bei 3 V und 8 MHz bei 2,5 V begrenzt.

Ein Beispiel für Präzision: USB braucht einen präzisen Takt. Microchips PIC18F2550 können zwar intern jede beliebige Taktrate generieren, aber die Präzision ist zu schlecht für USB. Als ich es versuchte, gab es alle 10-20s eine Verbindungsunterbrechung. Mit einem externen Oszillator passierte das nicht. Mittlerweile gibt es den PIC18F25k50, der seinen Takt auf das USB-Signal synchronisieren kann und keinen externen Oszillator für USB mehr benötigt.

Die Frequenzstabilität ist mit einem externen 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 ziemlich stabilen internen Osc, daher denke ich, dass dies vor ein paar Jahren eine größere Frage war. Außerdem gibt es immer mehr Möglichkeiten, den internen zu trimmen und die Temperaturdrift (usw. etc.) zu kompensieren.

Andererseits 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 Schweden hat sie tatsächlich ± 0,001 Hz, und ich habe Projekte gesehen, die dies verwenden, um dies beizubehalten Dinge synchron. Und dann bist du nicht mehr so ​​abhängig von der mcu-Freq und kannst die interne verwenden. Aber das ist ein kleines Thema :)

Beachten Sie, dass diese Netzfrequenzwerte langzeitstabil sind . Das ist in Ordnung, um die Zeit über Wochen oder Monate genau zu halten, aber über einen kurzen Zeitraum (Stunden) können Sie ernsthafte Abweichungen feststellen. Bei einer Digitaluhr von El Cheapo müssen Sie jedoch kaum die Zeit einstellen.
@stevenvh guter Punkt, beachten Sie auch, dass es andere Quellen gibt, die auch zur Überprüfung der Langzeitstabilität verwendet werden könnten. Sowohl das GPS- als auch das GSM-System haben sehr schöne Uhren, aber es ist komplizierter, sie zu verwenden.
Obwohl es viele andere Anwendungen gibt, die dies erfordern würden, gibt es eine, die ohne eine genaue Zeitbasis viele Probleme verursacht - die serielle Kommunikation.
Mir ist keine Frequenzstabilität bekannt, die mit einem externen Quarz nicht höher wäre. Mit einem Siliziumoszillator erreichen Sie keine Genauigkeit von unter 0,1 %.
@Jason Ein externer Oszillator ist immer stabiler, die Frage ist, wann/ob Sie die zusätzliche Stabilität benötigen? Olin Lathrop hat ein paar gute Beispiele für serielle Kommunikation.
@Johan - DCF77/WWVB ist so genau wie GPS oder GSM und viel einfacher zu verarbeiten (1 Hz Herzschlag)
@stevenvh Ich denke, DCF77 wird in diesen funkgesteuerten Uhren verwendet, und mit diesen weiß ich, dass ich nur in einigen Teilen meines Hauses ein Signal habe. Es hängt also davon ab, wo Sie sich auf der Welt befinden, ob Sie dies verwenden können oder nicht. Aber +1 ist cool
@Johan: Warum dann nicht von "Frequenzstabilität kann mit einem externen höher sein" zu "Frequenzstabilität wird mit einem externen höher sein" bearbeiten?
@Johan - Ich kann überall in meiner Wohnung das DCF77-Signal empfangen, was ich über GPS nicht sagen kann. Aber Belgien ist viel näher an Frankfurt als Schweden. (Übrigens müssen Sie die Magnetantenne senkrecht zur Frankfurter Richtung positionieren)
@stevenvh Ich denke, Sie haben einen guten Empfang für den zweiten Kreis auf dieser Karte von Wikipedia upload.wikimedia.org/wikipedia/commons/b/b4/Dcf_weite.jpg
@Johan - Sendeleistung (und Standort) wurde so gewählt, dass Sie den größten Teil Europas gut abdecken, es sieht also so aus, als würde es bis zu 2000 km reichen . Wenn Sie in Kiruna sind, haben Sie möglicherweise schlechten Empfang :-). Obwohl ich von gelegentlichem Empfang in Karachi, Pakistan, 7000 km entfernt (!)

Frequenzstabilität ist das Wichtigste, insbesondere für serielle Kommunikation mit hoher Geschwindigkeit. Aber das bringt auch die gelegentliche Notwendigkeit eines Quarzes mit einer scheinbar ungeraden Frequenz mit sich, um eine exakte Baudrate zu erhalten, wegen der begrenzten Möglichkeiten, die Ihnen die Taktteiler bieten.

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

Wenn jemand von euch vom Teensy ++ v1.0-Mikrocontroller-Entwicklungsboard gehört hat, hat es einen schrecklich empfindlichen UART. Ich hatte mein Host-Baud auf 115200 eingestellt und es auf 115200 eingestellt und konnte lange Zeit nicht herausfinden, warum es die Daten nicht richtig las. Es stellte sich heraus, dass mein Host näher an 114300 Baud gesendet hat. ( 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, wenn eine höhere Genauigkeit der Taktfrequenz von Vorteil ist, einen externen Resonator, Quarz oder sogar Oszillator verwenden, wenn Ihr Chip nicht über die erforderliche Treiberschaltung verfügt.

PS Ich frage mich, ob jemand irgendwelche Erkenntnisse darüber hat, welche Low-Level-Entwurfsentscheidung er auf der UART-Hardware getroffen hat, die sie so empfindlich macht?

Die Grundvoraussetzung für einen UART ist, dass der Empfänger jedes gültige Bit abtastet. Idealerweise würde der Empfänger den genauen Moment bemerken, in dem das Startbit ankam, und die Daten genau 1,5 Bitzeiten später abtasten, dann 2,5, 3,5 usw. bis zu 8,5 Bitzeiten später. In der Praxis tritt normalerweise ein gewisser Slop auf, wenn der Empfänger den Startimpuls erkennt, und danach kann es noch mehr Slop geben. Beispielsweise könnte man versuchen, 2400 Baud mit einem Prozessor zu empfangen, der 8.192 Anweisungen pro Sekunde ausführt ....
So etwas kann gemacht werden, wenn das Sendetiming perfekt sauber ist, aber das Abtasten wird nicht in genauen 417-usec-Intervallen stattfinden. Stattdessen wird es in einigen Intervallen von 366 us und einigen von 488 us passieren. Wenn ein Empfänger „wählerisch“ ist, bedeutet das oft, dass er Daten viel früher oder später abtastet, als er sollte, aber zu einem Zeitpunkt, zu dem ein idealer Sender das erwartete Datenbit ausgeben würde.
@supercat Warum sollten sie es jemals so entwerfen, dass es früher als später gesampelt wird? Es scheint, als wäre das Sampling bei 0,5, wie Sie es beschrieben haben, immer am besten. So habe ich vor ein paar Jahren meinen Software-UART implementiert ... mir ist nicht einmal in den Sinn gekommen, es anders zu machen. Das ermöglicht einfach die größte Fehlerspanne auf dem Sender.
@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, jemand versucht, 115.200 Baud mit einem 6502 zu empfangen, der mit 1,0 MHz und ohne UART läuft. Eine Schleife, die auf das Startbit wartet, dauert 7 us, und Abfragemöglichkeiten sind in Intervallen von 1 us geplant. Es gibt eine Unsicherheit von 8 us, wann der 6502 ein Bit abfragen würde, aber da Bits 8,6 us lang sind, könnte man Daten erfolgreich empfangen, wenn ...
...die Übertragungsgeschwindigkeit war präzise, ​​die Anstiegs- und Abfallzeiten waren gleichmäßig und symmetrisch, und es gab keinen sonstigen 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 bringen.
@supercat Ich bin mir ziemlich sicher, dass es sich um einen Hardware-UART handelt, der auf dem AT90USB646-Chip basiert, der definitiv einen Hardware-UART hat (tatsächlich 2 davon). Außerdem liegt der Takt bei 16 MHz ... aber egal, ich verstehe, wie Probleme auftreten können. Scheint einfach nicht so zu sein, wie sie es in diesem Fall hätten tun sollen. Komisch, wie das funktioniert.
@JGord: Selbst wenn ein Gerät über einen Hardware-UART verfügt, sind diese häufig auf bestimmte Teiler der Taktrate beschränkt. Manchmal verwenden Leute Software-UARTs, um schneller zu werden. Leute haben 115.200 Baud mit 6502 mit 1,0227 MHz gesendet und empfangen (z. B. Apple ][). Die empfangende Software konnte mit den Daten nichts anfangen, sondern sie puffern (der Sender müsste nach jedem Paket warten), aber trotzdem waren 115.200 besser als 57.600.

Externe Kristalloszillatoren sind genauer als interne Uhren und sollten verwendet werden, wenn ein genaues Timing erforderlich ist. Um Geld zu sparen, verwenden Designer manchmal interne.

Dies scheint den vorhandenen Antworten nichts hinzuzufügen.

Ein weiteres Problem im Zusammenhang mit dem Oszillator, das nicht erwähnt wurde, ist der Stromverbrauch. Es macht aber keinen großen Unterschied. Überprüfen Sie das nächste Diagramm aus dem PIC16F628A-Datenblatt:

Geben Sie hier die Bildbeschreibung ein

Sie können zuerst feststellen, dass je mehr Frequenz, desto mehr Strom verbraucht wird. Dies kann bei Anwendungen mit geringem Stromverbrauch einen Unterschied machen.

Und was den internen vs. externen Zweifel betrifft, so verbraucht der INTOSC bei gleicher Frequenz mehr Strom als der XT, etwa 30 % mehr Strom.

Ob diese Informationen relevant sind oder nicht, hängt von der Anwendung ab.