Forum: Analoge Elektronik und Schaltungstechnik Sinuswelle mit PWM


von Timo (timogruss) Benutzerseite



Lesenswert?

Hallo,

ich Versuche zur Zeit eine sinusförmige Gleichspannung mittels PWM zu 
erzeugen. Dafür habe ich die letzten Tage etliche Foren und Websites 
besucht und glaube nun eine Idee für die Umsetzung zu haben. Es wäre 
schön, wenn Ihr euch diese Idee mal durchlesen und mir ein Feedback 
geben könntet. Na, dann mal los:

Das Ziel ist es eine Sinuswelle alle 60ms zu erzeugen. Die Welle soll 
mit 60 verschiedenen Punkten gebildet werden, so dass Vout jede 
Millisekunde verändert wird. Daher benötige ich erstmal einen Timer, der 
jede Millisekunde den PWM-Duty-Cycle-Wert ändert (Timer A). Die 
einzelnen Duty-Cycle-Werte sind in einem Array gespeichert. Mit jedem 
Overflow-Interrupt wird der nächste Wert dieses Arrays ausgelesen um 
damit OCR0 zu laden. Das ist sozusagen die Formgebung der Welle. Die 
Werte habe ich am Schluss der Beschreibung angehängt.

Timer B läuft 10x schneller als Timer A und ist für die Erzeugung des 
PWM-Zuständig. Zu Beginn wird OCR0 mit dem Duty-Cycle-Wert von 127 
geladen. Das würde eine Spannung (Vout) von 50%, also 2,5V, erzeugen (8 
Bit Timer >> 256 Schritte : 2 = 127).

Angenommen zuerst wird Timer B gestartet, dann habe ich erstmal ein Vout 
von 2,5V anstehen; eine schöne, konstante Gleichspannung. Mit dem Start 
von Timer A wird dieser Spannungswert jede Millisekunde geändert. 
Nämlich entsprechend der Werte, die in meinem Array stehen.

Ist das soweit OK?

Wenn ich nun aber Timer A auf 60Hz stelle, dann müsste ich eine 
Sinuswelle von 1Hz herausbekommen, oder nicht (OK, 60 Werte sind für 
eine saubere Ausformung der Welle wohl zuwenig)? Wenn ich jetzt noch 
einen Tiefpass und dahinter noch eine LED anschließe, dann müsste diese 
doch innerhalb einer Sekunde "sinusförmig" aufleuchten und erlöschen, 
richtig? Ich hab leider kein Oszi um mir Vout anzuzeigen. Das muss ich 
in nächster Zeit nachholen. Aber ich hab zu Hause einfach keinen Platz 
;)

An diesem Thema sitze ich jetzt schon ein paar Tage und ich würde mich 
echt freuen, wenn das im Grundsatz passt.

LG, Timo

EDIT: Ich sehe gerade, dass der Timer B auch als 8-Bit Timer ausgeführt 
werden kann. Dann mit einem Prescaler von 64 und einem Reload von 6. 
Wenn ich es mal programmiere, dann werde ich das berücksichtigen!

Hier noch das Array:
140,153,166,179,191,202,212,221,230,237,243,248,251,253,254,253,251,248, 
243,237,230,221,212,202,191,179,166,153,140,127,114,101,88,75,64,52,42,3 
3,24,17,11,6,3,1,0,1,3,6,11,17,24,33,42,52,64,75,88,101,114,127

von Falk B. (falk)


Lesenswert?

@Timo Gruß (timogruss) Benutzerseite

>Ist das soweit OK?

Ja.

>Wenn ich nun aber Timer A auf 60Hz stelle, dann müsste ich eine
>Sinuswelle von 1Hz herausbekommen,

Ja.

> oder nicht (OK, 60 Werte sind für
>eine saubere Ausformung der Welle wohl zuwenig)?

Das ist eine andere Frage.

>Wenn ich jetzt noch
>einen Tiefpass und dahinter noch eine LED anschließe, dann müsste diese
>doch innerhalb einer Sekunde "sinusförmig" aufleuchten und erlöschen,
>richtig?

Jain. Das sinusförmige erkennst du an der LED nicht, weil dein Auge das 
Licht nichtlinear registriert. Siehe  LED-Fading.

> Ich hab leider kein Oszi um mir Vout anzuzeigen. Das muss ich
>in nächster Zeit nachholen. Aber ich hab zu Hause einfach keinen Platz
>;)

Ohne Oszi wirst du aber nichts sehen, geschweige denn messen. Mittels 
Auge kann man das kaum schätzen.

>EDIT: Ich sehe gerade, dass der Timer B auch als 8-Bit Timer ausgeführt
>werden kann. Dann mit einem Prescaler von 64 und einem Reload von 6.
>Wenn ich es mal programmiere, dann werde ich das berücksichtigen!

Viel besser, er kann CTC.

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Das Prinzip stimmt. 60 Stützwerte sollten übrigens bereits für einen 
einigermaßen sauberen Sinus reichen.


Gruß
Jonathan

von Timo (timogruss) Benutzerseite


Lesenswert?

Hey, das geht ja fix hier im Forum!
Danke fürs Feedback! Dann bin ich froh nicht auf dem Holzweg zu sein.

Falk Brunner schrieb:
> Ohne Oszi wirst du aber nichts sehen, geschweige denn messen. Mittels
> Auge kann man das kaum schätzen.

Damit steht das nächste Weihnachtsgeschenk wohl schon fest :)

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.