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
@ 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.
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... :/
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.