PWM - Verständnisfrage

FreeVEE

Mitglied
30. Aug. 2009
81
0
6
Sprachen
Hallo Forum!

Da ich momentan irgendwie einen geistigen Hänger habe, benötige ich eure Hilfe.
Es geht wie oben benannt um das Thema PWM (mal wieder...). OK, ich habe einiges bereits dazu gelesen. Prinzipiell weiß ich auch was PWM bedeutet und wie es funktioniert. Habe auch schon eine kleine Elektronik entwickelt und angefertigt, wo ich eine PWM mit fpwm von ca. 250Hz über einen FET erzeuge.
Soweit so gut, aber jetzt müsste ich diese Box so modifizieren, dass ich mit Hilfer eines Drehschalters unterschiedliche PWM-Frequenzen erzeugen kann. Folgende Frequenzen [Hz] sollten möglich sein:
Schalterstellung: Ausgabefrequenz:
1 => f1: 50
2 => f2: 100
3 => f3: 140
4 => f4: 250 (und nicht 244,...)
5 => f5: 1k

Die gewählte Frequenz wollte ich über einen Drehschalter wählbar machen, also die gewählte Schalterposition durch den µC abfragen - das habe ich irgendwann so auch schon mal gemacht.

Aber wie kann ich jetzt die o.g. PWM-Frequenzen (möglichst genau) erzeugen. Ich weiß, dass man zwischen Software-PWM und einer Hardware-PWM unterscheidet. Die Vor- und Nachteile sind mir auch bekannt.

Bei meiner o.g. PWM-Elektronik hatte ich die Hardware-PWM genutzt. Hatte mit einem 4MHz-Quarz und der folgenden Timer-Einstellung gearbeitet:
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
Ergebnis: fpwm = 244,... Hz -> Ziel war eigentlich exakt 250Hz !
Hatte mich damit zufrieden gegeben.
Wenn ich doch richtig liege, müsste ich den Quarz verändern - wenn ich den Prescaler verändere, bin ich zu weit von meiner Wunschfrequenz weg - oder?

Jetzt habe ich mir das mit der Software-PWM mal angesehen. Aber irgendwie verstehe ich da etwas nicht (mehr)...
Hatte gedacht, dass ich den Timer1 als Timer arbeiten lasse und mit dem Compare1 ihn so einstelle, dass die gewünschte Frequenz (z.B. 140Hz) erzeugt wird. Gesagt getan, ein kuzes Testprog erstellt und die Frequenz mit einem Oszi nachgemessen - Ergebnis: fout = 140, 03Hz.
Super dachte ich, jetzt muss ich doch nur noch das Tastverhältnis ändern, aber irgendwie klappt das nicht (mehr) - muss wohl doch mal eher in schlafen gehen :rolleyes:

Könntet ihr mir einen Tipp geben?

DANKE !

MfG

FreeVee
 
Hallo FreeVee,
hier hat bisher keiner drauf geantwortet. Ich gebe jetzt mal mein Verständnis.
PWM ist normalerweise nur geringfügig von der Frequenz abhängig. Interessant ist zuvorderst das Verhältnis der High und Low Zeiten. Dies ist glaube ich der Grund, warum man bei den HW PWMs die Freuqenz nicht wirklich genau einstellen kann.
Wenn du also verschiedene Frequenzen und PWM benötigst, dann geht das nur über SW PWM. Bei deinen relativ niedrigen Frequenzen sollte das auch kein Problem sein.
Bei einem 4MHz Takt und einer max. Frequenz von 1KHz hast du im schlechtesten Fall 4000 Takte Zeit für die Neuberechnung. Klingt zunächst einmal recht viel. Die 4000 ist dann auch deine max. Auflösung des PWM Signals. Realistisch betrachtet wirst du da aber nicht hinkommen.
Ich könnte mir den Ablauf so vorstellen:
  • Du lässt einen Timer mit der gewünschten Frequenz überlaufen, also z.B. nach 4000 Takten. Hier kommst du evtl. mit einem 8-bit Timer hin.
  • In der ISR schaltest du den Ausgang auf High. Dann startest du einen zweiten Timer, der beim Überlauf den Ausgang wieder auf Low setzt und sich selbst stoppt.
  • Dieser Timer muss so konfiguriert sein, dass er Auflösung den Ausgang zurücksetzen kann. Hierbei ist zu bedenken, dass die ISR dieses Timers mit einer gewissen Verzögerung aufgerufen wird. Um hier flexibel zu sein, würde ich einen 16-bit Timer benutzen.
Wie wird eigetlich das Tastverhältnis geändert und in welchem Bereich (von 0-100%)?

HBA
 
PWM-Verständnisfrage

Hallo HBA!

Schön, dass Du dich meldest - hatte letzte Woche auch wenig Zeit und konnte nicht so wie ich wollte ...

Jetzt zu dem Thema:
Das Tastverhältnis wird über ein 10gang Potentiometer eingestellt.
Also analoge Spannugsvorgabe und ADC. Dies funktioniert auch ganz gut.


Werde jetzt noch mal in Ruhe mir das Thema vornehmen. Ggf. melde ich mich dann hier noch mal - DANKE!

MfG

FreeVee
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)