Forum: Mikrocontroller und Digitale Elektronik Puls Weiten Modulation beim Attiny2313


von AVR[TR] (Gast)


Lesenswert?

Guten Abend !

Ich beschäftige mich zur Zeit mit dem MicroController Typ Attiny2313 - 
genauer gesagt: mit der PWM Funktion des Attiny2313. Als 
Informationsquelle habe ich eine Lektüre sowie das AVR GCC Tutorial von 
dieser Seite benutzt. Mein Anliegen für das Anwenden des PWM Ausganges 
des µC ist die Ansteuerung eines Gleichstrommotors mit Hilfe des L293DNE 
(Motortreiber), welcher ja einen PWM Eingang besitzt. Ich möchte mit 
diesem Thread gerne erläutern wie es Verstanden wie man den PWM benutzt 
um eventuelle Frage bzw. Missverständnisse zu beseitigen.

Ich möchte das generierte PWM Signal gerne am PIN PD5 bzw. OC1A 
ausgeben, daher im DataDirectionRegister(=DatenRichtungsRegister??) von 
PORT D den PD5 als Ausgang beschalten:
1
DDRD |= (1<<PD5);

Jetzt möchte ich die PWM Auflösung einstellen: z.B. 8 Bit
1
TCCR1A |=  (1<<WGM10) | (1<<COM1A1);

Wird durch das Setzen von COM1A1 das Signal invertiert ?!

Was ist 8 Bit PWM ? Kann ich damit das PWM Signal in 2^8 also 256 Stufen 
von VCC (=5V) varrieren ?
1
TCCR1B |= (1<<CS11);

Das wäre ein Prescaler von 8 d.h.  bei 12MHZ Takt 1.5MHz. Das heißt das 
der Zähler (die FlipFlops im Attiny2313 ???) mit 1.5 MHz zählen oder ?


Das besondere eines PWM Signales ist ja die unterschiedliche Zeit von 
LOW Phase zur High Phase. Jetzt habe ich das so verstanden das man im OC 
Register also das Output Compare Register einen Wert speichert, der 
immer abgefragt wird. Immer wenn der Zähler einen Wert erreicht, der mit 
dem Compare Wert übereinstimmt, wird von High auf Low bzw. von Low auf 
High geschaltet. Irre ich mich da ??

Was muss ich denn jetzt OCR1A Register speichern damit ich jetzt z.B. 
eine Low Phase von x ms und eine High Phase von y ms haben möchte ?. Es 
muss doch eine Möglichkeit geben das Mathematisch auszudrücken oder ?

Die Berechnungsformel für die mittlere Spannung des PWM Signales lautet 
ja:

Um = Vcc*DC   mit DC als Duty Cycle also: DC = tein / (tein+taus) Also:

Um = Vcc * t_High / ( t_High + t_Low) wobei hier VCC als 5V angenommen 
werden kann.

Ich bin für jeden Tipp/Hinweis/Rat dankbar ;-).

Mit freundlichen Grüßen,
AVR[TR]

von AVR[TR] (Gast)


Lesenswert?

Ich verstehe das mittlerweile so:

Das OCR1A ist bei einem 16 Bit Zähler natürlich ein 16 Bit Register wo 
ich mein Compare Wert "speichere". Erst lade ich den High Wert und dann 
den Low Wert. Je nachdem welchen Compare Wert ich habe wird mit 
steigendem Compare Wert die High bzw. Low Zeit des Signales verändert, 
was natürlich wiederum abhängt ob es ein invertierendes oder nicht 
invertierendes Signal ist. Wie kann ich eine direkte Beziehung 
(mathematisch) zwischen Compare Wert und PWM Signal herleiten ?

von fabi (Gast)


Lesenswert?

Ich habe genau die gleichen Fragen, könnte jemand diese mal versuchen zu 
beantworten?

Oder bist du  (AVR[TR]) schon weiter gekommen?

Ich möchtte ebenfalls ein PWM Signal erzeugen welches unterschiedliche 
High/Low Zeiten hat.

Ich konnte meinem ATtiny schon ein PWM Signal entlocken aber nur mit 
gleichen Zeiten aus dem Thema dort:
Beitrag "ATtiny2313 4xPWM + Timer Interrupt Problem"

von Julian B. (julinho)


Lesenswert?

Hallo Jungs,

im Datenblatt vom 2313 steht alles genau drin, einfach mal intensiv 
lesen.

Prinzipiell gibt es immer einen TOP-wert beim dem der timer wieder auf 
Null springt. Dieser TOP-Wert ist je nach Modus fest oder einstellbar.
Zusätzlich können zwei Compare-Register gesetzt werden, wenn diese 
erreicht werden, kann man einen Eingang setzen, löschen oder toggeln. 
Das entscheiden die COMXXX-Bits.

Der Prescaler bestimmt das teilungsverhältnis zum CPU-Takt.
Ausgangssignal ist digital, wenn ihr eine Analoge Spannung zwischen 0 
und VCC wollt, dann müßt ihr einen Tiefpass hinterher schalten.

mfg

von Bernd S. (Firma: Anscheinend Corner-Cases ;-)) (bernd_stein)


Lesenswert?

Hallo zusammen,

ich beschäftige mich gerade mit dem " 8-Bit Timer/Counter0 "
des ATtiny13.
Ihr seid wahrscheinlich auch ziemlich erschlagen von den Möglichkeiten 
die so ein Timer/Counter einem bietet.

Zum ansteuern von Motoren empfiehlt Atmel den
       " Phase Correct PWM-Mode ".
Ob der " Phase and Frequency Correct PWM-Mode " da besser wäre,
weiß ich leider nicht.

Ich habe das Datenblatt in der Version Rev.2543F-AVR-08/04
auf der Seite 105 in Tabelle 46 ist eine Übersicht der einzustellenden 
Modi zu sehen. Um dort einen von den Phase bzw.
Phase and Frequency Correct PWM-Modes auszuwählen,
sind erstmal ein paar Überlegungen anzustellen.

Welche Frequenz soll denn das PWM-Signal haben ?

Die Auflösung von 8,9 oder 10-Bit entscheidet darüber,
wie fein das PWM-Signal aufgelöst werden kann.

Also erstmal herausfinden welche maximale Frequenz der L293DNE überhaupt 
verträgt und mit welcher er dann am Sinnvollsten betrieben werden 
sollte.
Danach dann den Timertakt auswählen.
Danach die Auflösung des PWM-Signals.
Dann überlegen wodurch das PWM-Pulspausenverhältnis verändert werden 
soll.
( Poti, Taster etc. )


Bernd_Stein

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.