Forum: Mikrocontroller und Digitale Elektronik 2,4kHz Rechteck - Soft oder Hard-PWM 50% duty-cycle


von Martin (Gast)


Lesenswert?

Mal eine triviale Frage:

Ich möchte einen elektromagnetischen Transducer (bjm05) mit einem 50% 
Rechteck bei 2400 Hz versorgen, aber nach Möglichkeit auch andere 
Frequenzen einstellen können.

Allerdings habe ich da ein Verständnisproblem - da ja alles schön 
digital ist, sind nur Frequenzen möglich, die ein Teiler der 
Taktfrequenz sind.
Somit sind gleichgroße Frequenzschritte nicht möglich.

Und demnach spielt es vom Ergebnis eigentlich keine Rolle, ob der Pin in 
einem Timerinterrupt per software getoggelt wird, oder ob ein Timer das 
direkt macht.

Verstehe ich das richtig?

von Benedikt K. (benedikt)


Lesenswert?

Wenn es ein AVR ist: Nimm den CTC Modus, damit kann man direkt einen Pin 
toggeln lassen.

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

ja, ist ein tiny25.

Hier wird alle sieben (OCR1C + 1 Prozessortakt) Takte PB1 getoggelt. 
Damit ist der Duty-Cycle 50% und der Wert von OCR1A ist nicht wichtig. 
Könnte aber sein dass es sich an den Grenzen (0 und OCR1C) anders 
verhält.
1
OCR1A   = 1;
2
OCR1C   = 6;
3
TCCR1   = 1<<CTC1 | 1<<COM1A0 | 1<<CS10;

Um meine Frage zu beantworten:

Die resultierende PWM Frequenz ist F_Takt / (N * 2), da für eine Periode 
zwei mal getoggelt wird. Wie im Anhang ersichtlich ist das natürlich 
nicht linear.

Schon stellt sich die Frage, wie man denn ein Signal mit linear 
veränderbarer Frequenz überhaupt erzeugen kann. Geht das nur mit DDS und 
dem damit verbundenen Jitter?

von Martin (Gast)


Lesenswert?

Die Hyperbel habe ich übrigens mit http://www.mathe-fa.de erzeugt, 
allerdings prüft das server Programm nicht auf division by zero.

von Sven J. (svenj)


Lesenswert?

Naja, kommt drauf an WIE linear du das haben möchtest. Ich habe jetzt 
nur das Sheet eines 2313 hier liegen, ist aber sicher vergleichbar.

Es gilt so ungefähr:

Also Ausgangsfrequenz in Abhängigkeit vom Comparematch und taktfrequenz. 
Wenn ich da (n=1) mal 20MHz als Takt und 2400Hz als Ziel einsetze läuft 
das auf 4164 im Register raus. Locker in den 16bit, passt.

Für 2300Hz haben wir 4346, für 2500Hz 3998. Immer noch nicht linear, 
aber zumindestens schön gestuft. Die Registerwerte für bestimmte 
Frequenzen müßte man halt on the fly berechnen.

--
 SJ

(alles locker aus der Hose geschossen. Bitte genau nachrechnen bevor da 
Trafos oder sonstige Bauteile sterben... :)

von Martin (Gast)


Lesenswert?

Klar, bei hoher Taktfrequenz und großem Teiler werden die Stufen 
kleiner..
Naja, für meinen Zweck reicht mir der Timer mit CTC.

von martin (Gast)


Lesenswert?

> Wenn es ein AVR ist: Nimm den CTC Modus, damit kann man direkt einen Pin
toggeln lassen.

Habe ich so gemacht, kommt ganz gut in die Nähe. Wenn man den Prescaler 
zum Ein/Ausschalten nimmt, sollte man beim Ausschalten auf jeden Fall 
den Pin vom OC abkoppeln (und ggf. manuell abschalten).

Sonst hört man zwar auch nichts mehr, aber der Schallwandler bekommt 
ggf. immer noch Strom...

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.