Forum: Mikrocontroller und Digitale Elektronik PWM Sinus bewertet


von Jens (Gast)


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

von crazy horse (Gast)


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.

von Jens (Gast)


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

von Oliver (Gast)


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

von Jens (Gast)


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.

von Oliver (Gast)


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

von Andreas S. (andreas) (Admin) Benutzerseite


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.

von Jens (Gast)


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

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.