Aus deiner Beschreibung scheint die PWM Frequenz wirklich viel höher als 122 Hz zu sein. Ich kenne AVR's nur sehr gering, aber der Takt für Zähler lässt sich angeblich durch Pre- bzw. Postscaler erhöhen.
MfG
Ouh, Glück gehabt Ich hatte nicht auf dem Schirm dass die PWM keinen Takt rausgibt sondern den Ausgang "nur" für eine bestimmte Zeit auf High oder Low zieht.
Leider wird das Ganze dadurch jetzt nicht unbedingt leichter, im Gegenteil, es verwirrt mich nur noch mehr. Ich komme ja im Fast PWM Modus nicht höher als 31.25kHz. Durch den Counter bin ich daher auf eine maximale Schaltfrequenz von 122 Hz festgelegt. Wenn ich für diese Frequenz eine Induktivität dimensioniere komme ich auf etwa 91 mH. Das ist aber nun doch um Etliches größer als 330 bis 1500 µH die ich in anderen Schaltungen gesehen habe.
Oder ist in diesen Fällen tatsächlich die Schaltfrequenz wesentlich höher indem andere Operationsmodi für die PWM genommen werden wodurch die PWM selber einen wesentlich höheren Takt hat?
Aus deiner Beschreibung scheint die PWM Frequenz wirklich viel höher als 122 Hz zu sein. Ich kenne AVR's nur sehr gering, aber der Takt für Zähler lässt sich angeblich durch Pre- bzw. Postscaler erhöhen.
MfG
Der Timer Takt ist max. die Taktfrequenz des µC. Man kann den Timer Takt nur mit dem Prescaler herabsetzten. Die Ausgangsfrequenz lässt sich mit der jeweiligen Formel berechnen. Bei Fast PWM lautet die Formel:
Bei 8Mhz und Prescaler 1 sind das die oben geschriebenen 31,25kHz.Code:Taktfrequenz f=------------------ Prescaler x 256
MfG Hannes
Beim Tiny25 errechnet sich die PWM-Frequenz im Fast PWM Mode so (Timer/Counter 0):
f = fclk_io / n * 256
fclk_io ist die Frequenz der I/O Ports und entspricht der Taktfrequenz des Tiny.
n ist der Prescaler (1, 8, 64, 256 und 1024 sind wählbar).
Die höchste PWM-Frequenz ergibt sich bei einer Taktferquenz von 20MHz und einem Prescaler von 1. Sie beträgt dann 78,125kHz.
Und zufälligerweise hat der Tiny25 für Timer/Counter 1 eine PLL die den Timer mit bis zu 64MHz versorgen kann. Hier gilt für die PWM-Frequenz:
f = ftck1 / (OCR1C + 1)
ftck1 ist die Timer1-Clock mit bis zu 64MHz
OCR1C legt fest, bis zu welchem Wert der Timer zählt (bei Timer0 ist das 255, fest eingestellt).
Genügen einem nun 7Bit Auflösung, dann setzt man für OCR1C einfach 127 ein. Daraus folgt dann eine max. Frequenz von 500kHz.
Der Tiny25 ist also für deinen Step-Down-Wandler super geeignet!
Ah super, Basti, du bist klasse Ich hab die ganze Zeit im Datenblatt nur den Teil zu Counter0 PWM und zum Prescaler angeschaut.
Nur damit ich es verstanden habe:
Wenn ich nun die PWM mit 64Mhz/128 = 500kHz laufen lasse dann habe ich eine maximale Schaltfrequenz von 500kHz/128 ~3.9kHz.
Ich möchte nun gerne mindestens 20kHz erreichen. Dann muss gelten:
64MHz/(OCR1C+1)² = 20kHz
=> sqrt(64MHz/20kHz)-1 = OCR1C = 56
Soweit korrekt?
Edit: Hatte einen Denkfehler, der Zähler zählt beim Counter1 ja nicht mehr bis max sondern bis OCR1C so dass man die Frequenz wirklich granular steuern kann
Also die 500kHz wären tatsächlich deine PWM-Frequenz. Die Frequenz misst man ja über eine Periode, da ist es dann völlig egal, wie die High/Low-Zeiten verteilt sind. Hier findest du nen schönen Artikel drüber.
Der Timer im Tiny zählt von 0 bis OCR1C (z.B. 127). In das Register OCR1A lädst du deinen Wert. Möchtest du 75% High-Pegel, dann ist das 127*0,75 = 95,25 = 95.
Der Timer fängt jetzt bei 0 an, hoch zu zählen. Der Output-Pin OC1A ist High. Erreicht der Timer nun die 95, so schaltet der Pin auf Low. Der Timer zählt jetzt noch bis 127, der Pin bleibt Low.
Nachdem der Timer den Wert 127 erreicht hat, setzt er sich auf 0 zurück und der Pin wird wieder High gesetzt.
Du siehst: Die Frequenz bleibt immer gleich, denn der Timer zählt immer bis 127. Nur der Duty-Cycle wird verändert, denn das ist der Sinn der PWM.
Möchtest du jetzt eine Frequenz von 20kHz, dann musst du die Formel umstellen (aber richtig!):
fpwm = ftck / (ocr1c + 1) -> ohne Quadrat!
ocr1c = (ftck / fpwm) - 1
ocr1c = (64.000 / 20) - 1 = 3199
Dieser Wert liegt über den max. möglich 255, d.h. du musst dir jetzt noch Gedanken über den Prescaler machen.
Puh, ich glaub ich hab die PWM immer noch nicht ganz verstanden
Ich war jetzt immer, weil das vorhin so bestätigt wurde, davon ausgegangen, dass die Frequenz der PWM nur angibt, wie schnell der Counter zählt. Daher kam weiter oben auch die recht kleine Zahl von 122 Hz.
Das heißt, 500 kHz ist tatsächlich die Frequenz, mit der dann auch mein vorgeschalteter MOSFET arbeiten würde, d.h. 500000 pro Sekunde an- und aus (unabhängig von Tastverhältnis & er muss es können) und ich muss diese nicht nochmal in irgendeiner Weise umrechnen? Und das würde dann auch bedeuten, dass ich beim Counter0 mit Fast-PWM ohne Skalierung und 8 Mhz tatsächlich auf 8Mhz/256 = "echte" 31250 Schaltvorgänge kommen würde?
Ja genau. Die Frequenz kannste für die weiteren Berechnungen nicht mehr "gebrauchen". Den Rest errechnest du über das Tastverhältnis. Also bei einem Tastverhältnis von 50:50 hast du eine Spannung von 2,5V (Bei 5V für ein Tastverhältnis von 100%)
Als Beispiel wie du sowas rechnen kannst:
Compare wird auf 50 gerechnet
Timer 0 mit 8Bit = 255
(5V/255)x50 = 0,98V
Das heißt das du eine effektive Spannung von 0,98V am Ausgang hast wenn du das Compareregister auf 50 setzt.
Das heißt das wichtige für die PWM ist das Tastverhältnis, weil daraus resultiert die Spannung. Die Frequenz ist für die Spannung total egal.
Hallo,
auch für deine Antwort danke Dass die Spannung über das Tastverhältnis gereglt wird ist jetzt klar. Die Sache ist, dass ich mit dem so erzeugten Signal einen MOSFET ansteuere, der somit ja mit einer gewissen Häufigkeit pro Sekunde an- und abschaltet. Das "Problem", ist nun, dass hintendran ein Tiefsetzsteller hängt, den ich dimensionieren will, und dabei wird wieder mit Frequenzen gerechnet nämlich, wie oft der Schalter vor dem Tiefsetzsteller an- und abschaltet. Und das entspricht ja dann wiederum genau die PWM-Frequenz, denn ich weiß, dass pro PWM-Takt die Spannung einmal high und einmal low ist. Wie lange sie das ist interessiert meinen Tiefsetzsteller erstmal nicht, den interessiert eigentlich nur, wie groß die Eingangsspannung ist, wenn sie denn anliegt und wie oft das pro Sekunde passiert.
@Kampi: Das gilt aber nur sehr bedingt. Ist die Last am Tiefsetzsteller sehr gering, dann kann es sein, dass dein Tastverhältnis für stabile 2,5V nahe 0 sein muss. Bei hoher Last entsprechend mehr als 50%.
Man kann jetzt natürlich den Lüfter dranhängen und eine Tabelle Tastverhältnis/Spannung erstellen und in den Tiny programmieren...oder man benutzt den integrierten A/D-Wandler um eine echte Regelung aufzubauen.
@Comanche: Ja, dein MOSFET oder Bipolar-Transistor muss die 500kHz mitmachen. Aber das Problem darin liegt nicht im Transistor, sondern in dessen Ansteuerung.
Da beim FET eine Gate-Kapazität umgeladen werden muss, braucht es bei so hohen Frequenzen sehr hohe Ströme. Auch die 31kHz würde ich schon als problematisch für den nackten µC-Pin ansehen.
Eine einfache Schaltung aus BC547/557 zur Ansteuerung reicht hier aber.
Lesezeichen