Forum: Mikrocontroller und Digitale Elektronik Erzeugen eines Sinus mittels PWM


von Andreas (Gast)


Lesenswert?

Hallo,
ich möchte mit einem Arduino einen PWM-Sinus mit 50Hz erzeugen. Im 
Internet habe ich schon was dazu gefunden, weiß aber überhaupt nicht wie 
ich anfangen soll. Es soll ein Sinus mit 2,5V Amplitude, 50Hz und einem 
Offset von 2,5V rauskommen. Dazu hab ich mir gedacht ich leg einen Array 
an, in dem die Sinuswerte reingelegt werden. Darum bau ich mir ne 
Schleife, die die Sinustabelle im Array abarbeitet und den Inhalt auf 
den PWM -Ausgang gibt.
Da ich aber leider noch nicht viel programmiert habe. Bräuche ich vll so 
paar Ansätze, vll als Quelltext. Wäre super, wenn mir jemand helfen 
könnte.
Gruß Andreas

von hmmm (Gast)


Lesenswert?

Schreib doch erstmal auf was Du weisst bzw. wie Du es Dir vorstellst.
Die Lücken können wir gemeinsam füllen...

von Karl H. (kbuchegg)


Lesenswert?

Andreas schrieb:

> Dazu hab ich mir gedacht ich leg einen Array
> an, in dem die Sinuswerte reingelegt werden. Darum bau ich mir ne
> Schleife, die die Sinustabelle im Array abarbeitet und den Inhalt auf
> den PWM -Ausgang gibt.

Alles richtig.
Gut, anstelle der Schleife würde man einen Timer nehmen, der einen 
regelmässigeren Basistakt garantiert, aber das ist jetzt nicht soo 
wichtig.

Also leg mal los. Schön in Schritten arbeiten, immer mit Dingen 
anfangen, die man testen kann. Bei dir ist das zb die PWM.

von Andreas (Gast)


Angehängte Dateien:

Lesenswert?

Hey vielen Dank erstmal für die Antworten :)
Habe jetzt erstmal versucht, das Programm bisschen zu schreiben. Jedoch 
habe ich bei manchen Sachen Probleme. Ich habe mir erst überlegt, ich 
werde meinen Sinus auf 40 Stützwerten aufbauen (evtl. kann ich das auch 
noch erhöhen um den Sinus genauer zu machen). Die habe ich dann erstmal 
in einen Array geschrieben. Anschließend habe ich meine Variablen 
deklariert und den PWM-Ausgangspin freigeschaltet. Als nächstes sollte 
jetzt eigentlich ein Timer kommen, aber da weiß ich noch nicht wirklich 
wie ich den konfigurieren muss. Habe zwar in der ATMEGA Beschreibung mir 
diese ganzen Register usw. angeguckt, bin aber nicht so richtig schlau 
geworden. Ob ich jetzt in den PWM-Mode gehe, oder doch das normale und 
ob ich Overflow Interrupt mache oder Capture und Compare. Da hab ich 
nicht so recht die Ahnung. Als nächstes soll er dann die ISR von dem 
Timer aufrufen (also sozusagen die Schleife). Die Werte aus dem Array 
auslesen und auf den PWM-Pin geben. Jedoch weiß ich aber auch noch nicht 
wirklich, wie ich die 50Hz hinbekommen soll.
Wäre super nett, wenn ihr mir ein bisschen unter die Arme greifen 
könntet

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

Das Tastverhältnis der PWM muss dem momentanen Wert des Sinus 
entsprechen.

Die PWM Frequenz muss ein vielfaches der 50Hz sein (Würde sagen geößer 
1000Hz).


Welcher Controller soll zum Einsatz kommen?


Axel

von sschonspät (Gast)


Lesenswert?

Denk dran, dass du nur die Werte von 0 bis pi/2 brauchst.

von Andreas (Gast)


Lesenswert?

Hey
das ist son Arduino Duemilanove mit nem ATMEGA328p.

von Andreas (Gast)


Lesenswert?

Wieso brauch ich nur die Werte von 0 bis PI/2. Brauch ich nicht die 
Stützwerte für eine ganze Vollwelle ?

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

die Werte wiederholen sich, bzw sind negativ.



Arduino heißt Mega 168?

von MaWin (Gast)


Lesenswert?

Suche im Internet magic sinewaves von Don Lancaster, besser als plattes 
PWM.

von sschonspät (Gast)


Lesenswert?

musst du denn auch nachregeln? Oder "nur" das Signal ausgeben?

von Andreas (Gast)


Lesenswert?

Ich brauch nur einen festen Sinus mit 50Hz. Kein nachregeln oder so. 
Soll einfach nur ne Speisespannung für eine Schaltung sein

von Falk B. (falk)


Lesenswert?

@  Andreas (Gast)

>Ich brauch nur einen festen Sinus mit 50Hz. Kein nachregeln oder so.
>Soll einfach nur ne Speisespannung für eine Schaltung sein

Dann nimm einen Timer mit Output COmpare FUnktin, erzeuge ein 
Rechtecksignal mit 50% Tastverhältnis und filtere den Ausgang mit zwei 
oder drei RC-Filtern. Fertig ist der Sinus.

MFG
Falk

von Andreas (Gast)


Angehängte Dateien:

Lesenswert?

So hab mich nochmal ein bisschen rangesetzt, aber irgendwie bekomme ich 
noch nicht wirklich das PWM-Signal raus. Vielleicht kann mir ja jemand 
sagen, was an meinem Quelltext falsch ist. Wäre richtig super :)
Gruß

von Simon K. (simon) Benutzerseite


Lesenswert?

Filtern musst du sowieso, auch bei der PWM Methode. Wenn du eh nur eine 
Frequenz brauchst, mach es so wie Falk sagt.

von Andreas (Gast)


Lesenswert?

Naja, ich würde aber gern wissen, was an meinem Quelltext falsch ist. 
Irgendwie lernt man ja nur aus seinen eigenen Fehlern und nicht, wenn 
man jedes mal von vorne anfängt. Ich denke mein Quelltext ist ja gar 
nicht so verkehrt, nur da fehlt wahrscheinlich iwie nur ne Kleinigkeit. 
Naja und Filter hab ich eh dahinter hänger 2 Butterworth. Also das 
sollte kein Problem darstellen.

von Andreas (Gast)


Lesenswert?

Das Problem ist anscheinend, dass er nicht in die ISR springt. Hab das 
mal getoggelt, aber iwie macht er das nicht. Woran es aber liegt, weiß 
ich irgendwie nicht...

von Andreas (Gast)


Lesenswert?

Ok hatte einfach ein Tippfehler drinne. Jetzt läuft es :)

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.