www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM Sinus bewertet


Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich bin leidenschaftlicher C-Programmierer aber noch neu in der 
Controller Programmierung (avr-gcc).

Ich habe mir einen AT90S2313 vom Atmel zugelegt und versuche eine 
sinusbewertete Pulsweitenmodulation umzusetzen.

Hierbei soll also der Vergleichswert einem Sinus folgen.

Den in einem Tutorial beschriebenen "PWM- Mechanismus" habe ich mit 
einem einfachen Vergleichswert schon nachvollzogen.

Jetzt habe ich folgende Fragen an Euch:

Wie kann ich im AVR AT90S2313 einen in seiner Frequenz und Amplitude 
veränderbaren Sinus erzeugen?

Wie kann ich diesen Sinus mit der im "PWM- Mechanismus" vorhandenen 
Dreieckschwingung vergleichen?


vielen Dank im voraus,

Jens

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einen in Frequenz und Amplitude veränderbaren Sinus...
Geht nur mit ext. D/A-Wandler, und auch das nur mit relativ geringer 
Frequenz. Tabelle mit den Sinuswerten von 0-90° ablegen und diese im 
entsprechenden Zeitraster ausgeben. Je höher die Genauigkeit, desto 
langsamer wird die Sache.
Amplitude: auch nur sinnvoll mit externer Hardware, einstellbare 
Verstärkung, multiplizierender DAC.

Die "Dreieckschwingung" existiert nicht wirklich, es ist die grafische 
Darstellung des Zählerstandes.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo crazy horse,

vielen Dank für Deine Antwort.

Der Sinus soll bei dieser Pulsweitenmodulation intern verarbeitet 
werden. D.h. dass es sich hierbei auch nur um eine grafische Darstellung 
der zuvor errechneten Sinuswerte handelt.

Du hast etwas von einer Tabelle geschrieben.
Kann man sich das wie ein Array vorstellen?
Wie wird das Zeitraster erzeugt?
Wie kann ich einen harten zeitlichen Bezug zwischen den errechneten 
Sinuswerten herstellen?


Jens

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jens,
schau mal bei Atmel ins application note avr335. Hier wird beschrieben, 
wie man mittels PWM Audiosignale erzeugen kann. In dem App-Note wird ein 
Soundrecorder vorgestellt. Für deinen Fall reduziert sich das Problem 
dann auf die Darstellung lediglich einer Frequenz.

Ich hoffe, das hilft dir weiter

Oliver

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Oliver,

ich habe gerade das application note avr335 überflogen.
Den Einsatz eines externen Flash's ist sehr interessant....
Das werde ich auf jeden Fall mit einbeziehen.


Was jetzt das eigentliche Problem angeht, konnte ich leider keine 
Hinweise finden.

Das Sinussignal soll idealerweise mit Hilfe des internen Counters in 
Bezug auf die Oszillatorfrequenz erzeugt werden.
Dabei muss ich mich aber auf die Geauigkeit verlassen können.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jens,

ich denke, das ein Ansatz folgendermaßen aussehen könnte.

1. Du generierst dir eine Sinustabelle mit der gewünschten Auflösung 
(z.B unsigned char sinus[Periodenauflösung]).
Hierbei währe unsigned char die Amplitudenauflösung. Die Anzahl der 
Arraywerte ist die Auflösung der Periodenlänge.

2. Jetzt könnte ich mir vorstellen, dass man mit einem Timer eine 
Zeitbasis definiert, in der die Arraywerte ausgelesen werden. Dieser 
wird dann dem PWM-Ausgang als Puls-Pausenverhältnis oder ähnliches 
zugeordnet.

3. Die Frequenz der PWM muss deutlich höher sein, als die zu 
generierende Sinusfrequenz (Faktor 10 ist ein guter Wert).

Vielleicht bringt dich das ja weiter.

Oliver

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/projects/dds/

Du musst das Programm nur so anpassen, dass der Funktionswert statt an 
den am Port angeschlossenen DA-Wandler an das PWM-Register gegeben wird. 
Und dann natürlich die Frequenz der DDS gaaaaanz stark reduzieren.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

vielen Dank für Eure Tips.

Da ich mit dem eingebauten PWM-Mechanismus nicht zufrieden bin, habe ich 
mir folgenden Lösungsweg ausgedacht.

Die PWM (sinusbewertet) wird mittels eines geeigneten Algorithmus auf 
dem PC ausgerechnet und anschliessend im Controller abgespeichert.

Ausgegeben wird das ganze dann mit Hilfe des 16-Bit Timer/Counters auf 
einen Port.

Somit habe ich die ganzen rechen- und zeitintensiven Operationen auf den 
PC verschoben.

mfg
Jens

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.