www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 500kHz PWM mit 20MHz Takt ATmega32


Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

ich versuch mit einem ATmega32 eine 500kHz PWM zu erzeugen (besser
wären 1MHz), was nicht gelingen will.
Er wird extern mit 20MHz getaktet und im Mode 5 Fast-PWM, 8Bit
betrieben.
Den Prescaler hab ich auf 1:1 gesetzt. Dabei spukt er 78kHz aus.
Ist ja schon mal was, aber bei weitem nicht ausreichend :-((
Wie kann ich die PWM-Frequenz denn noch beeinflussen?

Dieter

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei einer 8bit PWM sind nicht mehr als 78kHz möglich:

78kHz * 2^8 = 20Mhz

Um die PWM-Frequenz zu erhöhen kannst du nur die Auflösung der PWM
herabsetzen.

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort.

Aber wie setze ich die Frequenz höher ?
Auflösung brauch ich so gut wie keine. Mir reichen grob 50%
Puls/Pausenzeit.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mathematik hilft ;)

20 MHz / 256 = 78125 Hz
=>
20 MHz / 500kHz = 40

So nun mußt Du nur noch 2^x = 40 auflösen ;)
Allerdings muß der Controller auch solche Dinge unterstützen ;)
Bye,
Markus

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider ist es nicht die Mathematik, sondern die Atmel-Datenblaetter.
Über welche Register bzw. Bits ändert man bei Fast-PWM die Frequenz.
>>>>>>>>>>>>Das ist meine Frage !!!

Über das OCR1A-Register ändert sich nur das Puls/Pausenverhältnis.
Die schönen Sägezahn-Grafiken im Datenblatt widersprechen sich dauernd.
Dort liest man, dass der TOP-Level über das OCR-Reg. modifiziert wird...

Autor: Tobias Holst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2^5 würde also noch ausreichen... Bei einer Auflösung von 5 bit könnte
der Prozessor also bis 666 kHz gehen - wenn er sich einstellen lässt!

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timer 1 im CTC Mode mit OCR1A als TOP, OC1B als Compare-Ausgang. Dann
kannste beliebig variieren.

Autor: Manos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...oder Du schaust Dir mal die Datenblätter zum AT90PWM2 bzw 3 an...
vielleicht ist das ja was (geht bis max. 64 MHz PWM wenn ich das
Datenblatt richtig deute).

PWM3 SOIC32-Geäuse liegt bei ca. 5€

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht doch drin ;)
Seite 74 Mega32 Zitat:

The PWM frequency for the output can be calculated by the following
equation:


********************************************************************
f_pwm = f_clkio / N*256
********************************************************************


The N variable represents the prescale factor (1, 8, 64, 256, or
1024).
The extreme values for the OCR0 Register represents special cases when
generating a PWM waveform output in the fast PWM mode. If the OCR0 is
set equal to BOTTOM, the output will be a narrow spike for each MAX+1
timer clock cycle. Setting the OCR0 equal to MAX will result in a
constantly high or low output (depending on the polarity of the output
set by the COM01:0 bits.)
A frequency (with 50% duty cycle) waveform output in fast PWM mode can
be achieved by setting OC0 to toggle its logical level on each compare
match (COM01:0 = 1).

**********************************************************************
The waveform generated will have a maximum frequency of fOC0 =
fclk_I/O/2 when OCR0 is set to zero.
**********************************************************************

This feature is similar to the OC0 toggle in CTC mode, except the
double buffer feature of the output compare unit is enabled in the fast
PWM mode.

Also entweder Du hast eine 8bit PWM mit 78kHz oder eine 1bit PWM, die
dann bei 20MHz 10MHz ausgeben würde, als reines Rechteck ohne
irgendwelche Modulationen.
Verstanden ?
Bye,
Markus

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nehme einen anderen PWM Modus -> WGMxx Bits. Es gibt zwei die entweder
OCR1A/1C oder ICR1 als TOP benutzen können. Du kannst also zb. OCR1A
auf 40 setzen und Prescaler auf 1. Macht dann deine 500KHz bei 20Mhz.
Nun kannst du über OCR1B/OCR1C zwei PWMs mit variablem Duty in 40
Schritten erzeugen ca. 5 Bit Auflösung -> 2^5 = 32. Statt dem OCR1A als
TOP geht auch das ICP1 Register.

Oder eben der besagte CTC Modus. Duty ist dann immer 50% und die
Frequenz kannst du über den Prescaler + OCR1A feinjustieren. Damit
kommst du bis auf 10Mhz PWM bei 20Mhz Takt.

Gruß Hagen

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm Waveform Generation Mode Nr. 15 (fast PWM mit OCR1A als TOP) und
COM1B0 und COM1B1 jeweils 1 (set OC1B at Compare Match, clear at TOP).
Über OCR1A kannste dann die PWM-Frequenz (und damit gleichzeitig die
Auflösung(!)) frei einstellen, OCR1B ist dann das Compare-Register.
Wenn Du dann (Prescaler auf 1:1) in OCR1A ne 40 reinschreibst, bekommst
Du ne PWM mit 500 kHz, mit ner 20 dann 1MHz. Hast dann allerdings nur
noch 40 bzw. 20 Schritte Auflösung.

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johnny, DANKE! Das war ein Spitzentipp

Die Hilfe hier im Forum ist echt klasse un schnell! Das treibt mich ja
fast dazu, als PIC-Programmierer die Fronten zu wechseln ;-)

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, melde mich nochmal...
hab mich durch sämtliche Atmel Doku gekämpft um euer Wissen wenigstens
nachvollziehen zu können. Muss leider passen!!
In welcher Doku könnte ich denn nur ansatzweise das finden, was johnny
so gut zusammengefasst hat. Also, wo wird mode 15 (fast PWM denn
ausführlich beschrieben.
In meinem ATmega32 Datasheet werden alle fastPWM modes zusammen
abgehandet (ca. S.73). Als Atmel-Neuling kann man auch nach 2 Tagen
intensiven Lesen und Ausprobieren nur im Nebel rumstochern.
Das kann's doch wohl nicht sein oder???

Autor: Markus S. (schmidle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Dieter,

Seite 73 bezieht sich auf den Timer0. Johnnys Lösung hat sich aber auf
Timer1 bezogen. Der Mode 15 ist bei mir also auf Seite 107 beschrieben
und die Fast PWM auf den Seiten 97ff.

Gruß
Markus

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also mit den unterschiedlichen PWM-Modi musste wahrscheinlich schon mit
dem Datenblatt vorlieb nehmen. Kannst übrigens auch Mode 14 nehmen und
dann mit OC1A und OC1B zwei PWM-Kanäle mit gleicher Frequenz nutzen.
Ich weiß aber auch nicht, was für Informationen zusätzlich zu den von
mir genannten und denen im Datenblatt Du noch bräuchtest. Eigentlich
ist das im Datenblatt vollständig beschrieben, man muss sich nur die
entsprechenden Tabellen zusammensuchen (für die COM1-Bits gibts mehrere
Tabellen, von denen eine für die Fast PWM-Modi ist).

Gruß

Johnny

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und Markus hat natürlich recht... Du hast an der falschen Stelle
geschaut. Mit Timer 0 und 2 geht das so nicht. Da kannste nur ne
8-Bit-PWM machen.

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.