Forum: Mikrocontroller und Digitale Elektronik Unklarheit beim Fast PWM Mode (ATmega16)


von Blaubär (Gast)


Angehängte Dateien:

Lesenswert?

Tach Leute

beim Durcharbeiten des ATmega16 Spec ist mir beim Fast-PWM zunächst mal 
diese Unklarheit aufgefallen:

Im Anhang ist das Bild, laut Spec eine Fast-PWM Mode 15  bei der TOP 
Wert durch OCR1A variabel gemacht wird.
Bei Erreichen von TOP (=OCR1A) schaltet der Ausgang OCnx auf HIGH. Kann 
mir jemand erklären wie ich auf LOW schalte, also wann ist der Punkt 
erreicht der im Bild als der Schnittpunkt am TCNTn Graph markiert ist? 
Scheint ja auch irgendwas variables zu sein. Nur meinen einzigen 
Freiheitsgrad, nämlich OCR1A habe ich ja schon für TOP benutzt. :-(

von Benedikt K. (benedikt)


Lesenswert?

Garnicht. Wenn du OCR1A als Top Wert nimmst, kannst du OC1A nicht 
nutzen, nur OC1B. Alternativ verwende ICR1 als Top Wert, dann bleiben 
OCR1A und B für die PWM nutzbar.

von Blaubär (Gast)


Lesenswert?

d.h. damit kann ich keinen PWM Pin treiben? Ist das eine 
Eingangs-Schaltung zum Zählen von reinkommenden Impulsen?

von Benedikt K. (benedikt)


Lesenswert?

Im Modus 15 nur mit OC1B. Modus 14 funktioniert genauso, nur dass eben 
der Topwert in ICR1 geschrieben wird, wodurch OCR1A und B weiterhin für 
die PWM frei bleiben.

von Blaubär (Gast)


Lesenswert?

Welcher Mode ist denn eurer Meinung nach am besten geeignet um einfach 
einen Motor mit unterschiedlicher Spannung zu versorgen?

Den Wert lege ich dann in OCR1A.

Ist also Mode 5..7 (Fast PWM mit festem TOP Wert) am besten für mich?

Ich versteh den Sinn der "Phase and Frequency-Correct" PWM nicht.

von Karl H. (kbuchegg)


Lesenswert?

Blaubär schrieb:
> Welcher Mode ist denn eurer Meinung nach am besten geeignet um einfach
> einen Motor mit unterschiedlicher Spannung zu versorgen?
>
> Den Wert lege ich dann in OCR1A.
>
> Ist also Mode 5..7 (Fast PWM mit festem TOP Wert) am besten für mich?
>
> Ich versteh den Sinn der "Phase and Frequency-Correct" PWM nicht.

Die Phase and Frequency Correct PWM ist dann interessant, wenn du mit 
mehreren Timern jeweils ein PWM Signal erzeugst und diese PWM-Signale in 
einer festen Phasenbeziehung zueinenader stehen müssen.

von Blaubär (Gast)


Lesenswert?

OK, danke!

Ich verwende demnach lieber den Mode5: Fast-PWM, 8-Bit

Bis jetzt läuft alles gut. Nur ist der Spannungspegel den ich messen 
kann nicht direkt linear zum PWM duty cycle.

OCR1A = 255   -> ergibt 10,96 VDC
OCR1A = 200   -> ergibt 10,95 VDC
OCR1A = 100   -> ergibt 10,45 VDC 10,10
OCR1A = 80    -> ergibt 9,9 VDC
OCR1A = 50    -> ergibt 9,3 VDC
OCR1A = 30    -> ergibt 8,0 VDC


Alles oberhalb 100 (0x96) liefert den gleichen Spannungswert.
Leider habe ich im Moment kein Oszilloskop, aber ich hoffe schon, dass 
sich mein PWM Signal entsprechend ändert.

Nur warum ist das der Spannung egal? Komischer Effekt oder normal?

von Christian T. (Gast)


Lesenswert?

Womit hast die Spannung denn gemessen?

von Blaubär (Gast)


Lesenswert?

Digitales Multimeter am Motor. Also nicht im PWM-Leerlauf.

von STK500-Besitzer (Gast)


Lesenswert?

>Nur warum ist das der Spannung egal? Komischer Effekt oder normal?
Dann läuft dein Motor scheinbar ab 100 auf 100%.
Wie hoch ist denn deine PWM-Frequenz?

von Blaubär (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

meine Frequenz ist 1,953 kHz.
Leider kenne ich die Zeitkonstante des Motors nicht, so muss ich mit der 
Frequenz rumprobieren.

Ich habe heute am Oszilloskop gemessen - Bild !
In einer Schleife durchlaufe ich Werte von 0..255 und habe es beobachtet 
- alles normal am PWM Ausgang.
Am L293D Ausgang hat es diese Haifischflosse die sich entsprechend 
verändert (Messung allerdings ohne Motor).
Ist das normal so?

Ansonsten kann ich mir die Lücke bei 100% nicht erklären. D.h. ich 
prodoziere hier gar nicht vollen Gleichstrom. Die Lücke ist 2µs lang.
Das ist genau 1 CLK(i/o)/8 lang:
CLK(i/o)/8 = OSC/Prescaler = 4MHz/8

Da fehlt genau 1 Schritt würde ich sagen, aber mehr als 0xFF kann ich 
wohl nicht ins OCR1 reinschreiben :-(

Wäre sehr nett, wenn dies jemand kennt und eine Lösung hat

von avr (Gast)


Lesenswert?

Die kurze Lücke ist vom Atmel :
1
The extreme values for the OCR1x Register represents special cases when generating a PWM
2
waveform output in the fast PWM mode. If the OCR1x is set equal to BOTTOM (0x0000) the output
3
will be a narrow spike for each TOP+1 timer clock cycle. Setting the OCR1x equal to TOP
4
will result in a constant high or low output (depending on the polarity of the output set by the
5
COM1x1:0 bits.)

und hängt von deiner konfiguration ab.
Entweder du hast "Echtes Aus" oder "Echtes Vollgas", ein Spike
bleibt bei Fast-PWM immer (bei normaler PWM geht es ohne).

Die Ausgangskurve ist eine Ladekurve der Kapazitäten.
Mit Motor sollte es anderst aussehen.

avr

von Bläubär (Gast)


Lesenswert?

> Setting the OCR1x equal to TOP will result in a constant high or low output
Hmm, aber genau das mache ich ja:
OCR1A = 0xFF

demnach müsste genau "High" anliegen..

Soll ich es sonst mit dem Phase Correct Mode probieren? Ich brauche auf 
jeden Fall einen Pegel der keine Lücke aufweist, wenn ich 100% 
einstelle.

von Fedo (Gast)


Lesenswert?

Benedikt K. schrieb:
> Garnicht. Wenn du OCR1A als Top Wert nimmst, kannst du OC1A nicht
> nutzen, nur OC1B. Alternativ verwende ICR1 als Top Wert, dann bleiben
> OCR1A und B für die PWM nutzbar.

Ich könnte dich Küssen !
Ich habe jetzt drei Stunden versucht den Mode 15 zum laufen zu bringen, 
Datasheet Mist, google Mist! Du hattest die Lösung !

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.