Forum: Mikrocontroller und Digitale Elektronik PWM Erzeugung mit ATTiny25 mit fester Auszeit


von Karsten D. (kater74)


Lesenswert?

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

von Joachim B. (jojo84)


Lesenswert?

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ß

von Karsten D. (kater74)


Lesenswert?

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

von Jörg G. (joergderxte)


Lesenswert?

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)

von Karsten D. (kater74)


Lesenswert?

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

von MWS (Gast)


Lesenswert?

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.

von Karsten D. (kater74)


Lesenswert?

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

von MWS (Gast)


Lesenswert?

Karsten D. schrieb:
> Ich habe ja schon mal an OCR1B gedreht, nur ergab ich keine Änderung in
> der PWM.

Wie ist COM1B1..0 gesetzt ?

von Karsten D. (kater74)


Lesenswert?

Das GTCCR Register habe ich bisher nicht beachtet. Diese Bits stehen 
also auf "0".

Grüße

Karsten

von MWS (Gast)


Lesenswert?

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.

von Karsten D. (kater74)


Lesenswert?

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

von MWS (Gast)


Lesenswert?

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.

von Karsten D. (kater74)


Lesenswert?

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

von MWS (Gast)


Lesenswert?

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.

von Karsten D. (kater74)


Lesenswert?

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

von avion23 (Gast)


Lesenswert?

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.

von MWS (Gast)


Lesenswert?

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.

von Karsten D. (kater74)


Lesenswert?

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

von MWS (Gast)


Lesenswert?

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.

von (Gast) (Gast)


Lesenswert?

Ja, die Periodenlänge T ist nur von OCR1C abhängig.
T=(OCR1C+1)/f1  (mit f1: Timer1-Frequenz)

von Karsten D. (kater74)


Lesenswert?

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

von MWS (Gast)


Lesenswert?

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.

von Karsten D. (kater74)


Lesenswert?

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

von (Gast) (Gast)


Lesenswert?

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.

von MWS (Gast)


Lesenswert?

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.

von Karsten D. (kater74)


Lesenswert?

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

von MWS (Gast)


Lesenswert?

Karsten D. schrieb:
> Bei konstanter Frequenz ist kein kontinuierlicher Bertieb gewährleistet.

Warum ?

von Karsten D. (kater74)


Lesenswert?

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

von MWS (Gast)


Lesenswert?

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.

von Karsten D. (kater74)


Lesenswert?

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
Noch kein Account? Hier anmelden.