Forum: Mikrocontroller und Digitale Elektronik Rechtecksignal 20kHz-80kHz, einstellbare Pulsbreite


von Stefan (Gast)


Lesenswert?

Hallo,

für eine Testschaltung benötige ich einen RS232-steuerbaren
Rechteckgenerator. Dieser soll 20kHz bis etwa 80kHz, einstellbar
möglichst auf 10Hz genau, bei einer variablen Pulsbreite von ca. 5%-60%
erzeugen. Dazu möchte gern einen ATmega verwenden. Im Anbetracht der
feinen Frequenzeinstellung dachte ich zunächst an Software DDS. Das
Problem bei DDS mit direktem digitalem Ausgang (also einfach das MSB
des Phasenakkus ausgeben) ist ja bekanntlich der Jitter um plus/minus
eine DDS-Taktzeit. Wenn ich jetzt mal von 500kHz "Taktrate" für den
DDS ausgehe (oder ist mehr in Software realistisch?) würde man das ja
schon ziemlich stark merken. Die sauberste Methode, zuerst einen Sinus,
daraus Rechteck, daraus Dreieck, Vergleich mir Analogwert (mit zweitem
DAC), wäre mir zu umständlich. Eine etwas abgespeckte Lösung, am
DDS-DAC schon einen Dreieck auszugeben, ist leider immer noch viel
umständlicher als einfach einen digitalen Ausgang am Controller zu
nehmen.
Nun hab ich mir überlegt, ob man nicht einfach den einen 16-Bit-Timer
in PWM-Betreibsart nehmen kann, und bei jedem Erreichen des
Vegleichswerts diesen neu setzen kann (indem man DDS-mäßig die Zeit zum
nächsten Umschalten berechnet). AFAIK kann doch beim Erreichen des
Vergleichswerts ein Interrupt ausgelöst werden. Somit hätte ich die
Taktfrequenz meiner DDS auf die des Controllers erhöht -> geringerer
Jitter bei direktem Digitalausgang.
Meint ihr das wäre so realisierbar?

Stefan

von Matthias (Gast)


Lesenswert?

Hi

Nimm einen Mega bei 8MHz und Timer 1 im FastPWM Mode. Den TOP Wert des
Timers (und damit die Frequenz) bestimmst du über ICR1. Dein
Tastverhältnis bestimmst du über OCR1x. Du mußt dann nur bei jedem
Ändern der Frequenz auch den Wert von OCR1x neu berechnen. Damit sollte
sich das Puls/Pausen-Verhältnis auf 1% Genauigkeit einstellen lassen.

Matthias

von Stefan (Gast)


Lesenswert?

Hallo Matthias,

erstmal vielen Dank für die Infos. Ich wusste bis jetzt noch nicht,
dass man bei den Megas im FastPWM-Modus nicht nur den Vergleichswert
(OCR1x) sondern auch den TOP-Wert, und damit eine variable Frequenz,
einstellen kann.Das Problem ist nur: Selbst wenn der PWM-Zähler mit
16MHz läuft, bekomme ich z.B. bei ca. 50kHz eine Einstellegenauigkeit
von ca. 150Hz, was mir noch zuviel ist, ich hätte gerne 10-20Hz.
Deshalb dachte ich daran, bei jedem Flankenwechsel am PWM-Ausgang (oder
zumindest einmal pro Periode des PWM-Signals) die beiden Werte OCR1x und
TOP neu zu setzen. Dadurch ändert sich zwar nix an der Genauigkeit eines
einzelnen Durchlaufs, aber im Mittel nähert sich die Frequenz der
gewünschten an. Z.B. ich will 50050Hz erzeugen, kann aber nur saubere
50000Hz bzw. 50150Hz erzeugen. Also lasse ich zwei Perioden mit 50000Hz
und eine mit 50150Hz laufen -> Im Durchschnitt erhalte ich 50050Hz. Dazu
müsste ich aber für jede Periode bzw. für jeden Flankenwechsel einen
Interrupt auslösen, k.A. ob das so geht wie ich es mir vorstelle. Im
Prinzip ist es dasselbe wie eine Software-DDS mit Rechteckausgang, wenn
ich da eine krumme Frequenz einstelle, d.h. ein Pegelwechsel am Ausgang
müßte z.B. genau zwischen zwei DDS-Takten kommen, wird eben abwechselnd
ein halber Takt davor und ein halber Takt dahinter geschaltet.
Ich hoffe, meine Idee ist so einigermaßen verständlich rübergekommen
;-).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.