Erzeugen eines Sinus mittels PWM

Gast #1981057
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
#1981089
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.
Gast #1981325
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
Angehängte Dateien:
#1981709
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
Gast #1982078
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren