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. :-(
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.
d.h. damit kann ich keinen PWM Pin treiben? Ist das eine Eingangs-Schaltung zum Zählen von reinkommenden Impulsen?
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.
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.
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.
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?
Digitales Multimeter am Motor. Also nicht im PWM-Leerlauf.
>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?
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
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
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.