Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage zur Sinus-PWM auf uC


von Alex (Gast)


Lesenswert?

Hi,

ich verstehe die Sinus-PWM auf einem uC nicht wirklich und möchte euch 
um Hilfe bitten.

Die normale PWM auf einem uC meine ich verstanden zu haben:
Der Counter zählt mit jedem Takt hoch (Prescaler auf 1 gesetzt). Sobald 
der Counter mit dem Vergleichswert übereinstimmt, wird der Ausgang 
gesetzt. Über den Vergleichswert kann ich also das Duty Cycle 
einstellen.

Bei einer Sinus-PWM wird ein Sinussignal mit einem hochfrequenten 
Dreieckssignal verglichen, woraus sich das pulse pattern am Ausgang 
ergibt.

Jetzt frage ich mich, wie das auf einem uC realisiert wird. Der Sinus 
wird ja in einer Lookup Tabelle (Array) abgelegt. Aber wie genau geht es 
weiter?

Ich bin mir sicher, dass das zuvor geschriebene zusammengesetzt 
irgendwie die Lösung ist. Aber so ganz erschließt es sich mir noch nicht 
:D

Ich glaube, dass der aktuelle Sinuswert in das OCRn-Register geschrieben 
wird?!?

Hier mal der prinzipielle Ablauf (wie ich es mir vorstelle):

1. Irgendein_Wert = Sinus_Array(1)
2. OCRn-Register = Irgendein_Wert
3. Jetzt nutzen wir die PWM Funktion des uC. Wenn ein Match erreicht 
ist, setze Ausgang
4. Irgendein_Wert_next = Sinus_Array(2)
5. OCRn-Register = Irgendein_Wert_next
6. siehe 3.

usw. usf.

Verstehe ich das richtig?


Gruß,
Alex

PS: Vielen Dank für eure Hilfe

von Falk B. (falk)


Lesenswert?

@  Alex (Gast)

>ich verstehe die Sinus-PWM auf einem uC nicht wirklich und möchte euch
>um Hilfe bitten.

Ist nicht wirklich schwer. Der Mittelwert der Spannung ist das 
Tastverhältnis der PWM. Wenn man dieses nun über die Zeit verändert, 
kann man theoretisch jede beliebige SIganlfoirm darstellen, wenn man nur 
die hochfrequenzen PWM-Anteile filtert und nur der Mittelwert übrig 
bleibt. Wenn man nun das Tastverhältnis sinusförmig ändert, kommt hinten 
ein Sinus raus ;-)

>Die normale PWM auf einem uC meine ich verstanden zu haben:
>Der Counter zählt mit jedem Takt hoch (Prescaler auf 1 gesetzt). Sobald
>der Counter mit dem Vergleichswert übereinstimmt, wird der Ausgang
>gesetzt. Über den Vergleichswert kann ich also das Duty Cycle
>einstellen.

Ja.

>Bei einer Sinus-PWM wird ein Sinussignal mit einem hochfrequenten
>Dreieckssignal verglichen, woraus sich das pulse pattern am Ausgang
>ergibt.

Misch mal nicht digitale und analoge PWM-Erzeugung, das irritiert nur.

>Jetzt frage ich mich, wie das auf einem uC realisiert wird. Der Sinus
>wird ja in einer Lookup Tabelle (Array) abgelegt. Aber wie genau geht es
>weiter?

Tabellenwert 1 = Tastverhältnis
Zeit X warten
Tabellenwert 2 = Tastverhältnis
Zeit X warten

etc.

Sinnvollerweise mittels Timer und nicht Warteschleifen.

>Ich glaube, dass der aktuelle Sinuswert in das OCRn-Register geschrieben
>wird?!?

Ja.

Hier mal der prinzipielle Ablauf (wie ich es mir vorstelle):

>1. Irgendein_Wert = Sinus_Array(1)
>2. OCRn-Register = Irgendein_Wert
>3. Jetzt nutzen wir die PWM Funktion des uC. Wenn ein Match erreicht
>ist, setze Ausgang
>4. Irgendein_Wert_next = Sinus_Array(2)
>5. OCRn-Register = Irgendein_Wert_next
>6. siehe 3.

So in etwa.

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Falk Brunner schrieb:

>>Bei einer Sinus-PWM wird ein Sinussignal mit einem hochfrequenten
>>Dreieckssignal verglichen, woraus sich das pulse pattern am Ausgang
>>ergibt.
>
> Misch mal nicht digitale und analoge PWM-Erzeugung, das irritiert nur.

Ja, wahrscheinlich liegt da meine Irritation, weil ich immer das 
angehängt Bild im Kopf habe und versuche, dieses Prinzip in einen uC zu 
packen.

Aber irgendwie finde ich auch nicht wirklich AppNotes zu diesem Thema. 
Hmm... :/

von Falk B. (falk)


Lesenswert?

@  Alex (Gast)

>Ja, wahrscheinlich liegt da meine Irritation, weil ich immer das
>angehängt Bild im Kopf habe und versuche, dieses Prinzip in einen uC zu
>packen.

Analoge PWM. Sinussignal bestimmt den Vergleichswert des Komparators.
Digitale PWM. Sinustabelle bestimmt den Vergleichswert (OCRn) des 
digitalen Komparators.

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.