Kann ich ein 56-kHz-Signal erzeugen, wenn die MCU mit 1 MHz läuft

Ich bin neu in der Entwicklung eingebetteter Systeme. Ich muss ein 56-kHz-Signal mit einer MCU erzeugen, die mit 1 MHz läuft. Ich möchte eine hohe Genauigkeit. Wenn ich nur einen Timer verwende, gibt er mir 55,55 kHz.

Gibt es eine Möglichkeit, die Taktfrequenz auf einen hohen Wert zu teilen und damit ein 56-kHz-Signal zu erzeugen?

Sie könnten einen PLL-Frequenzvervielfacher verwenden, um ein höherfrequentes Signal zum Herunterteilen zu erzeugen, aber das wäre Hardware, die entweder in Ihrem System vorhanden sein oder hinzugefügt werden müsste. Sie könnten auch eine höhere Quarz-/Oszillatorfrequenz in Betracht ziehen, sagen wir 8 oder 16 MHz.
Sie müssen die Bedeutung angeben. Möchten Sie 56 kHz, 56,0 kHz oder 56,000000 kHz? Das ist ein Unterschied. Welchen Code haben Sie auch mit "Wenn ich nur einen Timer verwende" ausprobiert? Last but not least: Welche MCU verwenden Sie? Und: hast du 1MIPS oder zB 0.25MIPS?
Wie genau ist Ihre 1-MHz-Uhr?
"Hohe Genauigkeit" ist überhaupt keine Spezifikation. Wir machen hier Engineering mit reellen Zahlen.
@CamilStaps Ich verwende einen AtxMega128D4, ich habe den Code nicht geschrieben, ging aber davon aus, dass ich 1 MHz / 18 = 55,555 kHz erhalten würde, wenn ich den internen Timer zum Generieren von Signalen verwende und ihm eine Zählung von 18 gebe. Und ich brauche eine hohe Genauigkeit, dh 55,9999 kHz oder 56,0 kHz, wenn möglich.
Was ist Ihre Taktquelle? Andere Uhr verwenden? 4,032 MHz scheint ein Standard-Quarzwert zu sein.
Die für diese Frage erbetenen Klarstellungen sind seit mehreren Wochen noch nicht erfolgt... Außerdem ist die Frage zu lokal begrenzt . Bitte bearbeiten Sie die Frage mit den in den Kommentaren oben angeforderten Details.
OK, ich entschuldige mich beim Administrator und allen anderen Benutzern wegen meiner Unkenntnis der Regeln. Das erste Mal, dass ich unterschreibe, verstehe also meinen Fehler. Jetzt werde ich versuchen, das von Andu alias aufgestellte Schema zu beantworten. Basierend auf meinen bescheidenen Kenntnissen auf dem Gebiet der Elektronik, ic CD4017 nur Teilerfrequenz, so dass ic 3 X 10 gleich 1000 (10x10x10), was bedeutet, dass die Ausgangsfrequenz durch 1000 geteilt wird, und daher ist dies kein Konverter von 1Hz . bis 1000 Hz. Ich werde das Schema genauer analysieren und anrufen, wenn ich etwas finde, das ich nicht kenne.

Antworten (3)

56,00 kHz ist 1 MHz / 17,86. Das bedeutet, dass ein einfacher ganzzahliger Teiler nur 1 MHz / 17 = 58,82 kHz oder 1 MHz / 18 = 55,56 kHz treffen kann. Wenn Sie den 1-MHz-Takt nicht ändern können (sehr langsam für einen normalen Mikrocontroller) und ihn nur durch eine ganze Zahl teilen können, dann nein, Sie können nicht 56,00 kHz erhalten.

Es gibt mehrere Möglichkeiten:

  1. Verwenden Sie eine andere Taktfrequenz. Finden Sie ein ganzzahliges Vielfaches von 56,00 kHz, das ansonsten akzeptabel ist, und verwenden Sie es. Zum Beispiel 7 MHz / 125 funktioniert genau.

  2. Mach Dithering. Wenn Sie ein wenig Jitter akzeptieren können, können Sie langfristig jede Frequenz treffen. In diesem Fall müssten Sie zwischen 17 und 18 Zyklen von 1 MHz jittern. Das wird in den meisten Mikros schwierig sein, nur weil es nicht genug Zyklen gibt, um den nächsten Periodenwert zu machen und ihn in einen Hardwarezähler zu laden. Diese Technik könnte jedoch mit jeder Frequenz arbeiten, die genügend Zyklen bereitstellt. Eine höhere Eingangsfrequenz führt auch zu weniger Jitter, da der Jitter immer ein Zyklus des Eingangstakts ist. Bei einem 10-MHz-Takt jittern Sie beispielsweise zwischen 178 und 179 Zyklen. Das sind genug Zyklen, um auf den meisten Mikros machbar zu sein, obwohl Sie es wahrscheinlich immer noch sorgfältig codieren und auf individuelle Anweisungen achten müssten.

  3. Einige Mikros haben ausgefallene Taktgeneratoren eingebaut, die den Jitter-Algorithmus effektiv in Hardware ausführen. Einige der neuen Low-End-PIC 16F1xxx haben ein solches Peripheriegerät, aber ich erinnere mich nicht an seinen Namen auf Anhieb.

  4. Verwenden Sie einen externen Oszillator, eventuell mit PLL-Multiplikator und einem Teiler.

Vielen Dank für den Vorschlag. Es war sehr hilfreich. Ich hätte nur noch eine Frage. Die AtxMega128D4 MCU, die ich verwende, hat eine eingebaute PLL. Das Handbuch sagt jedoch, dass es zur Taktgenerierung verwendet werden kann. Kann die PLL auch zur Erzeugung des 56-kHz-Signals verwendet werden?
@user: Ich kenne dieses Mikro nicht, aber wahrscheinlich dient die PLL dazu, den Takt für den Prozessor zu erzeugen. Sie können es wahrscheinlich nicht verwenden, um eine beliebige externe Uhr zu erzeugen, aber ich vermute nur. Vielleicht finden Sie jedoch eine Einstellung, die einen Prozessortakt erzeugt, der ein ganzzahliges Vielfaches Ihrer gewünschten Frequenz ist.

Finden Sie die höchste Frequenz, die 1000 kHz und 56 kHz teilt [GCD (1000 kHz, 56 kHz) = 8 kHz]. Verwenden Sie als Nächstes einen Phased-Locked-Loop (PLL) - der cmos 4046 fällt mir ein.

Die PLL hat einen eingebauten spannungsgesteuerten Oszillator (VCO), der (mit der richtigen Wahl von R und C) so eingestellt werden kann, dass er ungefähr 56 kHz erzeugt. Der 56-kHz-Ausgang kann mit einer Teiler-durch-7-Schaltung auf 8 kHz heruntergeteilt werden. Sie können die MCU dafür verwenden, wenn sie über Interrupt-gesteuerte Zähler/Timer verfügt. Wenn nicht, ist es eine Hardwarelösung.

Jetzt müssen Sie von den 1 MHz genaue 8 kHz ableiten, und möglicherweise wird die MCU dies auch tun ODER Sie benötigen Hardware.

Die genauen 8 kHz werden in den Phasenkomparator der PLL eingespeist, und das heruntergeteilte Signal vom VCO der PLL wird ebenfalls eingespeist. Das o / p des Phasenkomparators ist ein variierender DC-Pegel, der mit vielen AC-Signalen überlagert ist, die Sie mit einem RC-Netzwerk filtern müssen.

Dieser Ausgang speist den VCO-Eingangspin auf der PLL und sollte hoffentlich den VCO-Ausgang auf 56 kHz sperren. Hier ist ein Bild, das ich gefunden habe und das zeigt, wie 1 Hz in 1 kHz umgewandelt werden kann: -

Geben Sie hier die Bildbeschreibung ein

Die 3 x 4017 teilen den nominalen 1-kHz-Ausgang des VCO herunter, um zu versuchen, den 1-Hz-Eingang des GPS anzupassen. Der Ausgang des Phasenkomparators, das Filter und die Rückkopplung in den VCO der PLL bringen den VCO bald "in-lock". Die drei 4017er entsprechen der zuvor erwähnten Division durch 7. Das 1-Hz-Signal vom GPS entspricht den genauen 8 kHz, die von dem zuvor erwähnten 1-MHz-Takt abgeleitet werden.

Oder leben Sie mit 55,55 kHz

Der AtxMega128D4 läuft laut Datenblatt (Seite 5) mit einem externen Quarz von 0,4 bis 16 MHz. Es ist nicht auf 1 MHz begrenzt.

Wählen Sie eine Frequenz, die ein genaues Vielfaches von 56 kHz ist – zum Beispiel ist ein 7-MHz-Quarz genau 125 mal 56 kHz. Sie sollten in der Lage sein, Ihren Timer damit einzurichten (oder einen 14-MHz-Quarz zu verwenden und durch 250 zu teilen).

(Ich habe gerade festgestellt, dass dies eine alte Frage ist, aber ich denke, meine Antwort ist immer noch nützlich, um sie auf der Website zu haben.)