mikrocontroller.net

Forum: Compiler & IDEs Beliebige Frequenz für PWM


Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Kopfkratzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Welcher µC ?
2. Was verstehst Du unter "beliebiger Frequenz" ?
3. Geht es um's Tastverhältnis oder Anzahl Peaks ?
4. Warum muß die Frequenz "beliebig" sein ?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.



Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Frage ist, brauchst Du nur die Frequenz oder auch die PWM ?

Wenns nur die Frequenz ist, also Tastverhältnis 1:1, dann nimm einfach 
den Toggle on Compare Mode.


Peter

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das weiß ich, auf diese Weise hab ich mir auch schon ein 250 kHz 
Signale erzeugt. Das Problem liegt bei der PWM, weil die bräuchte ich 
eigentlich!

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaub ich habs verstanden.
Danke für deine ausführliche Erklärung!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.