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.
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.
Präzision. Interne Uhren sind nicht präzise, können durch Rauschen beeinträchtigt werden.
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.
Geschwindigkeit. Interne Oszillatoren erreichen möglicherweise nicht die höchste Geschwindigkeit des IC. Dafür können externe benötigt werden.
Stromspannung. Die Geschwindigkeit eines internen Timers kann von der Spannung abhängen, mit der er betrieben wird.
Es werden mehrere Uhren benötigt. Einige Anwendungen möchten einen Oszillator gemeinsam nutzen.
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.
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 :)
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?
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.
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:
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.
gbulmer
Bilal Malik