www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Erzeugen eines Sinus mittels PWM


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: hmmm (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: sschonspät (Gast)
Datum:

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

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey
das ist son Arduino Duemilanove mit nem ATMEGA328p.

Autor: Andreas (Gast)
Datum:

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

Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die Werte wiederholen sich, bzw sind negativ.



Arduino heißt Mega 168?

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Suche im Internet magic sinewaves von Don Lancaster, besser als plattes 
PWM.

Autor: sschonspät (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
musst du denn auch nachregeln? Oder "nur" das Signal ausgeben?

Autor: Andreas (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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ß

Autor: Simon K. (simon) Benutzerseite
Datum:

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

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok hatte einfach ein Tippfehler drinne. Jetzt läuft es :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.