Beliebige Frequenz für PWM

Gast #582521
Lesenswert?

Hallo zusammen,

ich bin gerade dabei ein PWM Signal zu erzeugen. Das Signal an sich ist 
aber nicht mein Problem.
Das Problem liegt darin, dass ich gerne jede beliebige Frequenz 
einstellen möchte.
Ist das generell möglich?
Wenn ja, wie sieht das dann in C aus?

Danke für eure Hilfe!
#582532
Lesenswert?

Steffen wrote:

> ich bin gerade dabei ein PWM Signal zu erzeugen. Das Signal an sich ist
> aber nicht mein Problem.
> Das Problem liegt darin, dass ich gerne jede beliebige Frequenz
> einstellen möchte.
> Ist das generell möglich?

Generell nein.

Jede beliebige Frequenz kann keine Hardware auf der ganzen Welt, Du mußt 
sie schon in Bereich und Auflösung eingrenzen.


Mußt Du nur die Frequenz einstellen, dann ist PWM falsch.

Mußt Du Frequenz und Pulsweite einstellen, dann gehts aufm AVR nur in 
Software.


Peter
Gast #582533
Lesenswert?

>Ist das generell möglich?
Mit ein paar Analogbausteinen problemlos.

>Wenn ja, wie sieht das dann in C aus?
Gar nicht:-) Ist ja schließlich Analogtechnik.

Falls du da auf einem Mikrocontroller machen möchtest, hängt das 
C-Programm sehr stark vom gewählten Modell ab. Wie soll man das 
beantworten? Ausserdem haben die allemreisten Controller so etwas wie 
ein diskretes Register zur Frequenzeinstellung. Das hat dann 256 oder 
auch 32768 diskrete Werte, vielleicht in Kombination auch mehr. 
"Beliebige" Frequenzen lassen sich damit trotzdem nicht einstellen.

Oliver
Gast #582542
Lesenswert?

Danke schon mal für eure Antworten.

Aber meines Wissens kann ich vorgeben (beim ATMega32)ob ich ein 8, 9 
oder 10 Bit PWM Signal haben will. Auf diese Weise ist meine Frequenz ja 
schon fast festgelegt. Nun kann ich sie nur noch über den Prescaler 
teilen.

Aber ist es vielleicht irgendwie möglich auch ungefähr 1,5 kHz 
einzustellen. Sprich einen Wert der nicht in dem Teilungsverhältnis 
liegt?
Gast #582545
Lesenswert?

> Mußt Du Frequenz und Pulsweite einstellen, dann gehts aufm AVR nur in
> Software.

Das stimmt nicht. Einige AVRs bieten bei ihre 16-bit-Timern die 
Möglichkeit, einen TOP-Wert einzustellen. Damit kann ich ihn im 
16-bit-Bereich bis zu jedem beliebigen Wert zählen lassen und damit die 
PWM-Frequenz im Prinzip verstellen. Man muß natürlich den OCR-Wert immer 
mit anpassen, wenn sich die Frequenz, aber nicht das Tastverhältnis sich 
ändern soll.
Gast #582548
Lesenswert?

> 1. Welcher µC ?
ATMega 32

> 2. Was verstehst Du unter "beliebiger Frequenz" ?
War vielleicht von mir ein wenig schlecht ausgedrückt.
Ich meinte damit ob ich die Frequenz der PWM die durch die Bit-Auflösung 
und den Prescaler definiert ist, z.B. über irgendein Vergleichsregister 
beeinflussen kann.

> 3. Geht es um's Tastverhältnis oder Anzahl Peaks ?
Es geht erstmal nur um die Frequenz des PWM-Signals!

> 4. Warum muß die Frequenz "beliebig" sein ?
Ich brauche eine Frequenz im Bereich von 1,5 kHz und diese kann ich 
nicht über die Bitauflösung und den Prescaler einstellen.
Gast #582552
Lesenswert?

> Aber meines Wissens kann ich vorgeben (beim ATMega32)ob ich ein 8, 9
> oder 10 Bit PWM Signal haben will. Auf diese Weise ist meine Frequenz
> ja schon fast festgelegt. Nun kann ich sie nur noch über den Prescaler
> teilen.

Du kannst auch einen der WGM-Modi 8 bis 11, 14 oder 15 verwenden. Das 
sind dann die Modi, in denen du genau einstellen kannst, wie weit er 
zählen soll, bevor der Zählerwert auf 0 gesetzt (bei "fast PWM") oder 
die Zählrichtung umgekehrt ("phase correct PWM") wird.

> Aber ist es vielleicht irgendwie möglich auch ungefähr 1,5 kHz
> einzustellen.

Also willst du gar nicht "jede beliebige Frequenz" einstellen, sondern 
eine ganz bestimmte. Warum muß es eigentlich gerade die Frequenz sein?

> Sprich einen Wert der nicht in dem Teilungsverhältnis liegt?

Ob der da liegt, hängt auch von der Taktfrequenz deines Mega32 ab.


Gast #582557
Lesenswert?

Ich brauch nun mal im Moment noch diese Frequenz.
Mit beliebiger wollt ich mich auch einfach mal schlau machen, ob es 
generell möglich ist. Weil wenn nicht muss ich das in Zukunft schon 
früher brücksichtigen!

Meine Taktfrequenz liegt bei 16 MHz.

Wie muss ich das mit dem WGM Modi genau verstehen?
Könntest du mir dazu ein kurzes Programm Beispiel geben?
Gast #582589
Lesenswert?

Bei 16-bit-PWM ist der TOP-Wert 65535. Bei 10 bit ist er 1024, u.s.w.
Du kannst aber auch bestimmen, daß der TOP-Wert ein Register-Wert ist. 
Dann kannst du jeden Wert von 0 bis 65535 einstellen.
Welchen WGM du nimmst, kommt dann drauf an, ob du "fast PWM", "phase 
correct PWM" oder "phase and frequency correct PWM" brauchst. Was die 
bedeuten, steht im Datenblatt. Außerdem mußt du entweder das 
OCR1A-Register oder das ICR1-Register auswählen, d.h. du mußt entweder 
einen der zwei PWM-Kanäle des Timers oder die input-capture-Funktion 
opfern. Wenn du keine von beiden brauchst, ist es egal. Dann wählst du 
den entsprechenden Modus aus und schreibst in das OCR1A- oder 
ICR1-Register den Teiler, den du für deine Frequenz haben willst. Im 
Modus 14 (fast PWM mit ICR1 als TOP) könntest du den Prescaler auf 1 
einstellen und das ICR1-Register auf 10666. Dann wäre die PWM-Frequenz 
ca. 1,5001 kHz. Wenn's nicht ganz so genau sein muß, kannst du auch 
einen weniger krummen Wert (10000 oder 10240 oder sowas) verwenden. Dein 
OCR-Wert für die Pulsweite muß dann natürlich auch an diesen Bereich 
angepaßt werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren