Hallo, ich bin neu hier und habe ein kleines für mich aber großes Problem. Ich möchte für einen Step Down Wandler ein PWM Signal erzeugen, wo die Auszeit fest eingestellt ist und sich nur die Frequenz ändert. Eine Fast PWM mit konstanter Frequenz habe ich hinbekommen... Der Prozessor ist ein ATTiny25. Welche Register müssen gesetzt werden? Irgendwie stehe ich auf dem Schlauch. Vielleicht hat ja wer eine Idee... Ich würde mich über Input sehr freuen. Gruß Karsten
Moin, da fällt mir so spontan die möglichkeit ein, daß du einfach das Zählerregister mit einem Wert vorlädst. Beispiel: normal wird von 0-255 gezählt und bei 200 wird von High auf Low geschaltet. Wenn du jetzt das Zählregister mit 150 vorlädst wird nurnoch von 150-255 gezählt, die Periodendauer wird kleiner, aber deine AUS-Zeit bleibt gleich. Klar soweit? Gruß
Hallo, irgendwie stehe ich auf dem Schlauch. Ich lade bisher immer OCR1A mit einem Wert von 0 bis 255. Die Frequenz stelle ich beim ATTiny25 dann über OCR1C ein. Wie ich jetzt aber ein feste Auszeit generiere ist mir nicht klar. Vielleicht habe ich auch nur Scheuklappen vor den Augen... Ich verstehe die Erklärung leider nicht... Grüße Karsten
Hat dieser Attiny keinen Modus bei dem man den Top-wert einstellen kann? (beim atmega48 wären das z.B. Mode 5 oder 7 bei den 8bit-Timern)
Hi, ich habe nochmals im Datenblatt nachgesehen. So recht werde ich aus dem auch nicht schlau. Vielleicht hat ja wer eine Idee.. Grüße Karsten
Karsten Dieckmann schrieb: > Ich möchte für einen Step Down Wandler ein PWM Signal erzeugen, > wo die Auszeit fest eingestellt ist und sich nur die Frequenz > ändert. D.h. bei steigender Frequenz soll die ED kürzer werden ? Über OCR1C in Verbindung mit CTC1 die Frequenz variieren und per OCR1A oder B fix die Auszeit einstellen.
MWS schrieb: > Karsten Dieckmann schrieb: >> Ich möchte für einen Step Down Wandler ein PWM Signal erzeugen, >> wo die Auszeit fest eingestellt ist und sich nur die Frequenz >> ändert. > > D.h. bei steigender Frequenz soll die ED kürzer werden ? > > Über OCR1C in Verbindung mit CTC1 die Frequenz variieren und per OCR1A > oder B fix die Auszeit einstellen. Genau so stelle ich mir das vor, nur wie Konfiguriere ich die Register damit das so funktioniert. Ich habe ja schon mal an OCR1B gedreht, nur ergab ich keine Änderung in der PWM. Grüße Karsten
Karsten D. schrieb: > Ich habe ja schon mal an OCR1B gedreht, nur ergab ich keine Änderung in > der PWM. Wie ist COM1B1..0 gesetzt ?
Das GTCCR Register habe ich bisher nicht beachtet. Diese Bits stehen also auf "0". Grüße Karsten
Karsten D. schrieb: > Das GTCCR Register habe ich bisher nicht beachtet. Diese Bits stehen > also auf "0". Dann wundert's mich eher, daß Du überhaupt eine PWM messen kannst. Wo misst Du denn ? Wenn Du am OCR1B rumstellst, dann ist es ja wohl Dein Ziel OC1B ansteuern zu wollen. Vielleicht zeigst Du besser den existierenden Code.
hallo, angesteuert wird OC1A. Den kann ich beim ATTiny25 als einzigen PWM Port bis 500KHz einstellen. Das geht leider beim B nicht. Da haben wir uns missverstanden. Ich werde aus dem Datenblatt nicht schlau. Mir geht es darum an OC1A ein PWM Signal zu haben, welches eine Halbbrücke von einem Step Down ansteuert. Die Schaltung soll Leistungs-Leds ansteuern, auch dimmen. Grüße Karsten
Karsten D. schrieb: > Den kann ich beim ATTiny25 als einzigen PWM Port > bis 500KHz einstellen. Das geht leider beim B nicht. Wie kommst Du da drauf ? So wie ich das sehe sind A/B gleichwertig. Karsten D. schrieb: > Da haben wir uns missverstanden. Ned so wirklich, da: Karsten D. schrieb: > Ich habe ja schon mal an OCR1B gedreht, > nur ergab ich keine Änderung in der PWM. das jeweilige Register OCR1x den jeweiligen OC1x Pin steuert. Wenn Du also OCR1B veränderst, muss ich davon ausgehen, daß Du OC1B ansteuern willst, anders ist's sinnfrei. Da Du nun aber OC1A verwenden willst, musst Du mit OCR1A die Auszeit festlegen, dazu auch COM1A1..0 passend setzen. Mag' mich nicht wiederholen , aber zeig Code, bzw. die Init des Timers, dann kann man mehr sagen, so ist's nur raten.
Den Code habe ich jetzt mal einfach raus kopiert. ; Aktivire Timer ldi temp, 0b00000001 ; CS00 und CS02 setzen: Teiler 1024 00000101 out TCCR0B, temp ldi temp, 0b00000010 ; TOIE0: Interrupt bei Timer Overflow out TIMSK, temp ; voreinstellungen pwm und pll ldi temp, 0b10000110 ; Aktiviere PLL out pllcsr, temp ldi temp, 127 ; setze teiler für 150khz 240 136khz out OCR1C, temp sei ; Interrupt erlauben ldi temp, 0b01100001 ; aktiviere Pwm auf 150Khz out TCCR1, temp grüße Karsten
Das TCCR1 sieht nicht unpassend aus, aber nimm doch die Schreibweise mit Bitnamen, Binär ist ja grausam, wer soll sich da jeweils die Bits abzählen ? Das Aktivieren der PLL geht anders: > To set Timer/Counter1 in asynchronous mode first enable PLL and then wait > 100 μs for PLL to stabilize. Next, poll the PLOCK bit until it is set and > then set the PCKE bit. Daß OCR1A auch noch einen Wert erhält, sollte klar sein. Schalt' die PLL ganz zum Schluss ein und zwar so, wie's im Datenblatt steht.
Hallo, habe ich das das richtig verstanden: Ich schalte in den asynchronen Mode und das Setzen von COM1x1 COM1x0 auf logisch 1: Dann sollte bei erreichen des Zählers von dem im Register OCR1C eingestellten Wertes der AUsgang auf 0V schalten. Die Länge von T-Ein würde durch OCR1A erfolgen und die Länge von T-Aus der "Rest" bis $255 sein... Habe ich das so richtig verstanden? Grüße Karsten
Wie wäre es mit einem OCR1C = 255; OCR1A = OCR1C/2; OCR1B = OCR1C/2; Das erzeugt mit prescaler 1 und PLL = 64MHz eine Frequenz von 500kHz bei mir. Zur Erweiterung könntest du sogar noch die steigende Flanke mit der integrierten deadtime verzögern.
Karsten D. schrieb: > Ich schalte in den asynchronen Mode und das Setzen von COM1x1 COM1x0 auf > logisch 1: > > Dann sollte bei erreichen des Zählers von dem im Register OCR1C > eingestellten Wertes der AUsgang auf 0V schalten. Wenn COM1A1 und COM1A0 gesetzt werden, dann wäre das laut DB: > 1 1 Set the OC1A output line Bis zum eingestellten OCR1A-Wert wird der OC1A Low sein, nach dem Compare Match wird er gesetzt und ist so lange High bis der OCR1C-Wert erreicht wird, dann wird zurückgesetzt und der Zähler fängt wieder bei 0, bzw. der Portpin bei Low an. > Die Länge von T-Ein würde durch OCR1A erfolgen und die Länge von T-Aus > der "Rest" bis $255 sein... Eher umgekehrt... Soll es sich so verhalten wie Du's beschreibst, dann muss COM1A1 = 1 und COM1A0 = 0 sein.
Hallo, also die richtige Vorgehensweise ist: 1: Ich schalte in den asynchronen Mode 2: Ich setze COM1A1 = 1 und COM1A0 = 0 Bis zum eingestellten OCR1A-Wert wird der OC1A High sein. Nach dem Compare Match, wird er auf Null gesetzt und ist so lange Null bis der OCR1C-Wert erreicht wird. Die Länge der Priode ergibt sich jetzt aus dem Wert= OCR1A + OCR1C Im Zusammenspiel mit dem Vorteiler ergibt sich dann die Frequenz. Ich hoffe das ist Richtig? hilfe Grüße Karsten
Karsten D. schrieb: > Die Länge der Priode ergibt sich jetzt aus dem Wert= OCR1A + OCR1C Ich hätt' jetzt gesagt, die Länge der Periode ergibt sich ausschließlich aus OCR1C, wobei OCR1C >= OCR1A sein muss. Alles andere wurde doch schon gesagt, probier's einfach aus und schau's Dir mit dem Oszi an.
Ja, die Periodenlänge T ist nur von OCR1C abhängig. T=(OCR1C+1)/f1 (mit f1: Timer1-Frequenz)
Wenn sich die Frequenz durch OCR1C ergibt, dann bin ich ja genau so weit wie vorher. Ich wollte Ja eine feste Auszeit und die Periodendauer sollte sich ja dann in Abhängigkeit vom T-Ein (0CR1A) ergeben. Grüße Karsten
Karsten D. schrieb: > Ich möchte für einen Step Down Wandler ein PWM Signal erzeugen, > wo die Auszeit fest eingestellt ist und sich nur die Frequenz > ändert. Wenn Du OCR1A konstant lässt und OCR1C veränderst, hast Du doch genau das. > Wenn sich die Frequenz durch OCR1C ergibt, dann bin ich ja genau so weit > wie vorher. Ja, sollte doch klar sein. Es gibt ein Register für den Topwert und ein zweites Register welches innerhalb des Bereiches von $00 bis Top die ED bestimmt. > die Periodendauer sollte sich ja dann in Abhängigkeit vom T-Ein > (0CR1A) ergeben. Vielleicht solltest Du Dir erst einmal über das Prinzip der CTC und PWM Modi klar werden.
Hallo, wenn OCR1A immer Konstant bleibt und ich nur OCR1C verändere ändert sich ja nur die Frequenz, das Aus-Ein Tastverhältnis bliebe gleich. Das habe ich schon ausgetestet. Ich müsste halt beide Register oder das Zählregister mit einem Wert vorladen.... zu Hilfe... Vielleicht geht auch das was ich machen will einfach mit dem ATTiny 25 nicht so einfach wie ich mir das vorgestellt habe. Grüße Karsten
Nein... Zähl mal von 1 bis 30, dann wieder von vorne und so weiter. Bei 0 schaltest Du immer aus, bei 20 immer an. Dann zähl stattdessen bis 50 (nach wie vor bei 0 immer aus-, bei 20 anschalten): Aus-Zeit bleibt gleich, Periode und An-Zeit ändern sich.
Karsten D. schrieb: > wenn OCR1A immer Konstant bleibt und ich nur OCR1C verändere ändert sich > ja nur die Frequenz, das Aus-Ein Tastverhältnis bliebe gleich. Falsch. Angenommen: OCR1A = 64 und OCR1C = 128, f = 500kHz, ED = 50% OCR1A = 64 und OCR1C = 96, f = 667kHz, ED = 67% > zu Hilfe... Vielleicht geht auch das was ich machen will einfach mit dem > ATTiny 25 nicht so einfach wie ich mir das vorgestellt habe. Da Du das nicht weiter ausgeführt hast konnte man annehmen, daß Du weist, was Du da machst. Darum wurden Deine Fragen bezüglich des Tiny beantwortet. Schaut aber fast so aus, als ob Du grundsätzliche Probleme hast das Prinzip zu verstehen. Könnt' dann sein, daß das nix wird. Vielleicht kannst Du Dich an einer bereits bestehenden Vorlage orientieren, oder aber genauer sagen, wie das Deiner Meinung nach gehen soll und warum auch die Frequenz, also der Topwert statt wie bei einer normalen PWM die ED verändert werden soll.
Hallo, kann schon sein, dass ich die Funktionsweise nicht verstanden habe. Deshalb habe ich ja nachgefragt. Ich möchte eine Konstantstromquelle bauen, die an einem Akku betrieben wird. Die KSQ kann unterschiedliche Ströme über einen bereich von 150mA bis 3A einstellen. Es sollen 4 weiße LED in Reihe an einem 4S Li-Ionen betrieben werden. Problematisch ist der weite Bereich des einzustellenden Stromes. Bei konstanter Frequenz ist kein kontinuierlicher Bertieb gewährleistet. Deshalb die unterschiedlichen Frequenzen mit fester Auszeit. Grüße Karsten
Karsten D. schrieb: > Bei konstanter Frequenz ist kein kontinuierlicher Bertieb gewährleistet. Warum ?
Ich komme halt mit der Eingangsspannung der Ausgangsspannung sehr nahe. Da geht der StepDown in einen quasi Direktbetrieb. 4 Leds in Reihe haben 12,6V bei zum Schluss knapp 13V Akkuspannung. Entweder die Schaltung arbeitet zufriedenstellend bei Hohen Strömen oder niedrigen Strömen. Bei Anpassung der Frequenz tät es passen ohne einen delta I von 2,.... A oder mehr zu haben. Der Regler ist als Halbbrücke ausgeführt. So von der Frequenz arbeiten viele fertige Regler für Leds. Grüße Karsten
Das sagt mir nun immer noch nicht, was der Vorteil einer veränderlichen Frequenz ist. Höhere Frequenz = vorteilhafteres Verhalten beteiligter Induktivitäten im Bereich der größten Einschaltdauer ? Dir ist klar, daß bei höherer Frequenz / kleinerem Top-Wert dann die Körnigkeit immer größer wird ? Aber letztendlich bist Du ja frei, sowohl Top- als auch Comparewert beliebig und auch gleichzeitig zu verändern.
Hallo, ich werde es einfach mal ausprobieren. Erst mal vielen Dank für Deine Unterstützung. Grüße Karsten
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.