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
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.
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
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
@ 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
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ß
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.
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...