mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Dynamische Analogsignale via PWM realisieren ?


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte via PWM auf einem Mega8 (oder Mega88 mehr PWMs) mehrere
unterschiedliche Analogsignale mit Frequenzen von 0Hz-100kHz und
einstellbare Tastverhältnisse erzeugen.
Meine Idee dabei ist den Hardware PWM mittels entsprechender
Berechnungen  Tabellen und einem entsprechenden RC  LC Glied
softwaretechnisch so anzusteuern, das ich z.B. von einem 50Hz Sinus mit
50:50 Tastverhältnis dynamisch zu einem 100kHz Rechteck mit 10:90
Tastverhältnis steuern kann.
Wobei außer den üblichen Verdächtigen auch beliebige Wellenformen wie
sie z.B. in der Akustik vorkommen (Überlagerung usw.) einstellbar sein
sollten.

Geht das mit dem Hardware PWM, oder muß ich auf Software-PWM umsteigen
?

Wie die PWM funktioniert ist klar, auch das ich die Frequenz über den
Timer / Prescaler entsprechend ändern kann.
Allerdings habe ich keine Ahnung, wie ich das RC / LC Glied für einen
solchen Rahmen berechnen kann :?
Nach meinen Infos, müßte ich folgendes am PWM Ausgang haben:

         +---+
PWM-Out--| R |-+-- Analog-Out
         +---+ |
              ---
               C
              ---
               |
               -
               .
              GND ;)

das Problem ist nun, das der Hoch- / Tiefpass Filter ja den gesamten
Frequenzbereich abdecken müßte ...
Wenn ich nun alles über 100kHz filtere, würde das einen dynamischen
Bereich von 0-100kHz ermöglichen ????

Es sind also zwei Grundsätzliche Fragen:
1. Kann ich eine beliebige Wellenart+Tastverhältnis via Harware-PWM
erzeugen ?
2. Wie berechne ich das RC / LC Glied für die Bandbreite ?

Besten Dank für Ideen ;)
Bye,
Markus

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eher so: http://www.tkk.fi/Misc/Electronics/circuits/r2r.html
und einen Sinus oder eine andere Komplizierte Form in den Flash
packen.

Wenn Du dein Register einfach nur (jetzt erstmal ohne Tabelle)
hochzählen lässt und dieses auf dem PORT ausgibts, hast Du schonmal
einen sauberen Sägezahn mit der o.g. Schaltung ...
als Widerstände gehen 12K und 24K ganz gut. Aber (später dann mal)
ausmessen. Ich hatte eine ganze Kiste 10K 1% und habe dann immer zwei
in Reihe geschaltet.

Gab es bei den Projekten nicht einen SINUS/RECHTECK/DREICK/DINGENS
Generator mitm Atmel?

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Dennis Strehl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zum RC-Glied: Mehr Stufen sind besser, da dann schärfer getrennt wird,
dadurch wird bei gleicher Bandbreite die PWM besser herausgefiltert

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Axel Rühl
Durch Verwendung des PWMs wollte ich ja gerade die "Verschwendung"
von Ports vermeiden ;)
Oder ich hab' da was verpeilt ?
OK, also soweit ich das verstehe:
1. PWM
Einen Output-Port mit RC / LC Glied für analogen Output
Ein Bit DAC genannt ...
2. R2R-DAC
Je nach gewünschter Genauigkeit 8-32 Ports für EINEN analogen Output
...
Also wenn ich nun einen DAC nach den von Dir genannten (und von mir
gelesenen, ähemm nur in diesem Forum ...) Beiträgen mit einem Mega8
realisieren möchte, kann ich je nach Genauigkeit einen bis maximal drei
DACs softwaremäßig realisieren ?

@Dennis Strehl
meinst Du mit mehr Stufen sowas:
         +---+      +---+
PWM-Out--| R |-+----| R |----- usw. -- Analog-Output
         +---+ |    +---+  |
              ---         ---
               C           C
              ---         ---
               |           |
               -           -
               .           .

Wenn ja, wo gibt es entsprechende Informationen über die Formeln zur
Berechnung eines Idealwertes ?
Danke,
Markus

Autor: Dennis Strehl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, wobei die Wiederstände der Reihe nach zu- und die Kondensatoren
entsprechend abnehmen sollten. Allerdings werden dann ziemlich kleine
Kondensatoren benötigt, weshalb aktive Filter vielleicht besser sind.

So richtig gut bekommt man es damit aber auch nicht getrennt.

"Berechnen" tu ich das mit ner Schaltungssimulation, d.h. ich
probiere lieber rum statt zu rechnen.

MfG

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dennis Strehl
... "weshalb aktive Filter vielleicht besser sind." ...
Doofe Frage was sind aktive Filter ?
ICs die einen dynamischen RC / LC haben ?
Notfalls würde mir auch eine digitale Poti-Lösung reichen ...
Danke nochmal und ich mach jetzt GÄÄÄÄÄHHHHHNNNNN lol
Danke,
Markus

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, ich möchte Dir nicht den Enthusiasmus nehmen, aber das wird so
nicht funktionieren. Zumindest nicht mit diesem Frequenzbereich.

Grundlagen:

Alle (periodischen) Schwingungen, egal ob Dreieck, Rechteck, Musik oder
Sprache ist nix anderes wie ein "Gemisch" aus verschiednene
Sinusschwingungen verschiedenere Frequenz (hoch oder tief), Phase (wo
ist der Nulldurchgang der Schwingung) und Amplitude (laut oder leise).

Details z.B.: http://de.wikipedia.org/wiki/Fourieranalyse


Dein PWM-Signal ist einfach ein Digital-Analog-Wandler. Ob Du nun per
PWM eine Analogsignal oder mit R2R-Netzwerk erzeugst (Filtern musst Du
immer), spielt keine Rolle. Du bist immer an das Abtasttheorem
gebunden:

    Die Samplingfrequenz muss größer als die
    Hälfte der höchsten Signalfrequenz sein.

Details z.B.: http://de.wikipedia.org/wiki/Abtasttheorem


Nächstes Problem, Dein RC-Ausgangsfilter. Der ist nicht beliebig steil,
er ist sogar äusserts flach, und sorgt für Phasenverschiebungen. D.h. Du
müsstest was wesentlich besseres als einen simplen RC-Filter (auch 2.
Ordnung RC nützt nicht viel) verbauen. Ideal wäre in diesem Fall ein
Bessel-Filter höherer Ordnung.

Details zu Filtern:

        http://de.wikipedia.org/wiki/Filter_%28Elektronik%29
        http://de.wikipedia.org/wiki/Tiefpass
        http://de.wikipedia.org/wiki/Besselfilter


Zusammengefasst:

- Den RC-Filter am Ausgang durch etwas steileres ersetzen.
- Die maximale erzeugbare Sinus-Frequenz hängt von Deiner
  Abtastrate ab, mit der Du das PWM-Signal veränderst.
- Die maximale erzeugbare Frequenz (fast) beliebiger Form
  (Dreieck, Rechteck, usw.) ist ca. um den Faktor 10 bis 15
  geringer als die maximal erzeugbare Sinus-Frequenz.

Autor: AR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eben.
Deine PWM Frequenz ist zB 20Khz. Das geht alles automatisch - Du
brauchst Dich also um die 20Khz nicht mehr kümmern. in deiner
TImerRoutine vom Timer2 zB. aktualisierst Du zyklisch den OCR1xH+L Wert
deiner PWM. Die benötigten Werte holst Du aus einer Tabelle im Flash.
Dein Filter sollte bei 20Khz steil abfallen. So kannst Du fast jede
Kurvenform bis ca 2-3Khz darstellen. Und brauchst nur 1Pin. Und keine
einstellbaren Filter.
AxelR.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK,
das heißt wenn ich folgendes zusammenschalte bekomme ich ein besseres
Signal, als mit einem reinen RC Glied:

+----+           +----+
| µC |--PWM-Out--|MAX |---Analog-Out
|    |           |293 |
+----+           +----+

Wobei sich der MAX293 in verachiedenen Modi betreiben läßt (Bessel geht
auch).
Momentan versuche ich nachzuvollziehen, warum "nur" 20kHz mit PWM
erreicht werden können ?
Im Datenblatt steht z.B.:
"The waveform generated will have a maximum frequency of fOC0 =
fclk_I/O/2 when OCR0A is set to zero. This feature is similar to the
OC0A toggle in CTC mode, except the double buffer feature of the Output
Compare unit is enabled in the fast PWM mode."
Also müßte ich doch bei 8MHz sogar ein 4MHz PWM Signal erzeugen können,
oder wo liegt mein Denkfehler ?
OK der MAX293 kann maximal 25kHz und der MAX297 50kHz, beides weniger
als meine angestrebten 100kHz :?
Wenn ich jetzt einen aktiven Tiefpaß mit OP aufbaue müßte ich ja mit
geeigneten Bauteilen die 100kHz erreichen können, oder ?
Danke,
Markus

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Momentan versuche ich nachzuvollziehen, warum "nur" 20kHz mit PWM
erreicht werden können ?


Rechne Dir doch mal die OCRx-Werte aus, die Dir die Frequenzen von
91kHz, 92kHz, 93kHz,.... 100kHz erzeugen.
Und wenn Du diese mit Erfolg gefunden hast auch noch die Werte, um das
von Dir gewünschte Tastverhältnis von 10:90 einzustellen.
Ich denke, dann werden Dir die bescheidenen Möglichkeiten, die Dir
diese PWMs bieten, klar werden.

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich denke die Ernüchterung wird groß sein :( Ich probiere auch gerade
was der PWM meines Mega32 so hergibt und habe herausgefunden dass
maximal (bei einem Vorteiler von 1, 8Bit und Fast-PWM) fclk_io/256 drin
sind.
Also beispielsweise bei 20MHz 78,125kHz. Bei meinem Quarz mir komme ich
maximal auf 28,8kHz.

Es gibt aber auch Atmels die mehr schaffen. Der Tiny15 etwa aus dem
Appnote 450 wird mit 100kHz betrieben weil er per PLL einen ziemlich
hohen Takt von 25,6MHz erzeugen kann.

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marco,

Du hast immer zwei Begrenzungen:

  a.) Die PWM-Frequenz selbst
  b.) Die Sample-Frequenz, also die Frequenz mit dem Du das
      PWM-Tastverhältnis veränderst.

Die Hälfte der kleinste der beiden Frequenzen ist die maximale
Frequenz, die Du erzeugen kannst. Der Ausgangsfilter muss nun so steil
sein, dass er die maximal erzeugbare Frequenz gerade noch durchlässt,
und die kleinste von a. und b. ausreichend dämpft.

Die Dämpfung brauch natürlich nicht größer sein als der Dynamikumfang
des PWM-Signals, bei 8-Bit-PWM reichen 50 dB Dämpfung bei der
PWM-Frequenz bzw. Sample-Frequenz aus.

Autor: Dennis Strehl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch was zur Frequenz: Der AtTiny26 schafft noch mehr als der 15er,
64MHz Timer-Takt => macht 250kHz PWM Frequenz.
Mit entsprechend weniger Auflösung geht selbstverständlich noch mehr.

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.