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
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?
zum RC-Glied: Mehr Stufen sind besser, da dann schärfer getrennt wird, dadurch wird bei gleicher Bandbreite die PWM besser herausgefiltert
@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
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
@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
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.
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.
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
>>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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.