Sinuswelle mit PWM

OP Persönliche Seite #3203414
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
Angehängte Dateien:
#3203472
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.