Hi zusammen, ich wollte gerne einen ATMega als Sinusgenerator per PWM ausprobieren. Jetzt verstehe ich das Datenblatt so, dass die PWM Frequenz 32kHz beträgt. Bei einer Auflösung von 8 Bit komme ich damit auf eine maximale Frequenz des Ausgangssignals von ca. 125 Hz (32 kHz/255). Ich habe das vermutlich falsch gelesen, oder? Ich würde relativ ungern die PWM per Software impelementieren, weil dann das Timing doch recht komplex wird, wenn noch mehr gemacht werden soll, als nur die PWM. Gruß, Chris
Die PWM-Frequenz ist einstellbar. Dazu gibt es verschieden Taktteileroptionen. Die Frequenz beträgt bei 8 Bit (256 Werte/Klicks) Auflösung maximal CPU-Takt/256. Das sind bei den ca 8 MHz in der Standardeinstellung des internen Oszillators in der Tat maximal ca 32 kHz. Bei 16 MHz bzw 20 MHz sind es 64 kHz bzw 80 kHz. Es kann aber auch weniger sein, dank höherem Vorteiler. Chris schrieb: > Bei einer Auflösung von 8 Bit komme ich damit auf eine maximale > Frequenz des Ausgangssignals von ca. 125 Hz (32 kHz/255). Wenn du das PWM Signal zum Glätten durch einen Filter schickst um daraus etwas Sinusähnliches zu formen, so hast du bei 125 Hz des zu modellierenden Sinus bei 32 kHz PWM 256 PWM-Pulse/Stützstellen. Die Anzahl der Stützstellen bestimmt die Genauigkeit so wie die maximale Frequenz. Diese 256 Stützstellen haben aber nichts mit den 8 Bit es Timers zu tun. Die maximale Anzahl der Stützstellen ist gegeben durch das Verhältnis von zu modellierender Sinusfrequenz zu vorhandener PWM-Frequenz. Du kannst auch bei 80 kHz PWM einen Sinus mit einem kHz und 80 Stützstellen bauen. Chris schrieb: > Ich würde relativ ungern > die PWM per Software impelementieren, weil dann das Timing doch recht > komplex wird, wenn noch mehr gemacht werden soll, als nur die PWM. Die PWM selbst braucht nicht per Software gemacht werden, denn dafür ist der Timer ja da. Aber der Timer erzeugt nur ein Rechtecksignal, keinen Sinus. Etwas mehr ist also doch zu tun, aber nicht soooo viel mehr. Man braucht ein Array mit den Stützstellen die dann, je nach geforderter Genauigkeit nach und nach ins Timerregister geladen wird. Wenn nur der Effektivwert zählt war es das auch schon. Wenn es glatter werden soll, muß dann noch eine Filterschaltung dahinter, welche das Rechtecksignal auf den Effektivwert glättet.
Hmm...mir ist das Prinzip der PWM schon bekannt, was mich stutzig gemacht hat, ist folgender Satz im Datenblatt: "ATmega48A/PA/88A/PA/168A/PA/328/P uses the same crystal oscillator for Low-frequency Oscillator and Timer/Counter Oscillator." Und weiter hinten im Datenblatt steht beim Timer/Counter2: "The CPU main clock frequency must be more than four times the Oscillator frequency" Für mich liest sich das eben so, dass standardmäßig die PWM Frequenz ca. 32kHz ist und mit einem externen Takt max 16MHz/(255*4)=16kHz. Habe ich etwas übersehen?
Hi
>ich wollte gerne einen ATMega als Sinusgenerator per PWM ausprobieren.
Darf es auch ein ATTiny261/461/861 sein? Die haben eine PLL für den
Timer mit der du auf 64MHz kommst.
MfG Spess
Ja ich denke so werde ich es auch machen. Megas hätte ich ein paar im Keller liegen gehabt, deshalb wärs praktischer gewesen.
>Jetzt verstehe ich das Datenblatt so, dass die PWM Frequenz 32kHz >beträgt. Bei einer Auflösung von 8 Bit komme ich damit auf eine maximale >Frequenz des Ausgangssignals von ca. 125 Hz (32 kHz/255). Falsch. Wenn das so wäre könnte ich keine Audiodaten über z.B. Timer2 abspielen. Bei 8MHz Takt und Prescaler 1 kannst du bis zu 32kHz PWM Frequenzen erzeugen. Da ist deine 8 Bit PWM schon drin! Du musst nicht noch mal durch 256 teilen.
holger schrieb: > Bei 8MHz Takt und Prescaler 1 kannst du bis zu 32kHz PWM Frequenzen > erzeugen. Da ist deine 8 Bit PWM schon drin! Du musst nicht noch mal > durch 256 teilen Hast du einen externen Taktgeber für die IO? Falls nicht, darf ich fragen wie du die entsprechenden Register gesetzt hast. Mich mach eben dieser Satz aus dem Datenblatt stutzig: "ATmega48A/PA/88A/PA/168A/PA/328/P uses the same crystal oscillator for Low-frequency Oscillator and Timer/Counter Oscillator."
Der Timer2 ist auch was besonderes. Er kann besondere Sachen. Er kann asynchron zum restlichen Chip laufen. Daß der Haupttakt vier mal höher sein muß, gilt für diesen asynchronen Modus. Das ist dann interessant wenn man den Timer2 beispielsweise mit einem externen Uhrenquarz als Uhr betreibt. Die Uhrenquarze haben für gewöhnlich 32,768 kHz. Die PWM läuft dann aber bei 256 Bit Auflösung mit ca 128 Hz. Damit bekommst Du aber keinen Sinus mit 125 Hz hin. Du benötigst mehrere PWM-Pulse um einen Sinus auch nur annäherungsweise zu formen. Daher benutzt man für so etwas auch den Mainclock, so daß Der Timer mit einigen MHz läuft, so daß die resultierende PWM-Frequent im zweistelligen kHz Bereich liegt um damit einen noch langsameren Sinus zu modellieren.
>Die haben eine PLL für den >Timer mit der du auf 64MHz kommst. Beachte aber das Kleingedruckte: Um einen Sinus mit hoher Frequenz ausgeben zu können, musst Du auch die PWM-Stufe, entsprechend schnell, mit Daten füttern. - Dann ist nichts mehr mit nebenbei noch Händchen halten mit der Freundin - das ist ein Full-Time-Job. - Da du die Werte auch nicht so schnell, wie sie gebraucht werden, berechnen kannst, müssen sie vorher berechnet und wahrscheinlich im RAM, wenn variabel, abgelegt werden. Das braucht Platz. Liegen sie, weil konstant im FLASH, ist der Zugriff etwas langsamer. Also nicht nur Sonnenschein, sondern ein paar Bremsklötze.
Man muß aufpassen daß man den Timertakt nicht mit der daraus resultierenden PWM-Frequenz verwechselt. Das ist ein häufiges Mißverständnis, und so sieht es auch im ersten Post aus. Das sind zwei verschiedene Sachen. Und das zu modellierende Signal hat auch wieder eine andere Frequenz und muß nicht 1/256 der PWM-Frequenz betragen.
Carsten R. schrieb: > Man muß aufpassen daß man den Timertakt nicht mit der daraus > resultierenden PWM-Frequenz verwechselt. Das ist ein häufiges > Mißverständnis, und so sieht es auch im ersten Post aus. Das sind zwei > verschiedene Sachen. Und das zu modellierende Signal hat auch wieder > eine andere Frequenz und muß nicht 1/256 der PWM-Frequenz betragen. Tu ich nicht...Hoffe ich zumindest.:-) Ich habe das Datenblatt nur so verstanden, dass ich nur zwischen einem Timertakt von 32kHz und einem externen Takt wählen kann. Ich probiers morgen einfach aus, vielleicht habe ich es ja nur falsch verstanden.
>Beachte aber das Kleingedruckte: > >Um einen Sinus mit hoher Frequenz ausgeben zu können, musst Du auch die >PWM-Stufe, entsprechend schnell, mit Daten füttern. Und einen passenden Tiefpassfilter hinter die PWM hängen. Ohne diesen wird das PWM Signal halt ein Recktecksignal bleiben.
Chris schrieb: > Jetzt verstehe ich das Datenblatt so, dass die PWM Frequenz 32kHz > beträgt. Chris schrieb: > Ich habe das Datenblatt nur so > verstanden, dass ich nur zwischen einem Timertakt von 32kHz und einem > externen Takt wählen kann. Das paßt nicht zusammen oder du hast da nur eine falsche Vokabel benutzt. Die Konstellation daß PWM-Frequenz und Timertakt gleich sind geht nur wenn der Timer mit jedem Takt einen neuen Zyklus startet. Dann kann er aber nicht sehr weit zählen, schon gar nicht von 0 bis 255. ;-) Du kannst wählen zwischen dem CPU-Takt bzw einem exteren Takt oder Uhrenquarz (ca 32 kHz) und auf den jeweiligen Takt diverse Taktteiler anwenden. Das gilt nur für Timer2! Die anderen Timer können ihren Takt nur vom Mainclock ableiten und auf diesen dann einen Taktteiler anwenden.
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.