Forum: Mikrocontroller und Digitale Elektronik Probleme Attiny mit PLL PWM


von Julian B. (julinho)


Lesenswert?

Hallo Forum!

Ich experimentiere mit einem Step-Up-Wandler, der mit einem Attiny 
gesteuert wird. Für die PWM-Erzeugung benutze ich die PLL des Attiny 85 
und 861.
Der Wandler arbeitet auch gut es gibt nur Probleme beim Ausschalten. Der 
PWM Pin bleibt nach dem Ausschalten auf High, was dazu führt, dass mein 
Schalttransistor abraucht.

Start des PWM (Attiny 861):

  PLLCSR = 1<<PLLE;  //PLL einschalten

  while(!(PLLCSR & (1<< PLOCK))); // warten bis PLOCK ==1

  PLLCSR |= 1<<PCKE;    // pll als timer1 source

  TCCR1B = 1<<CS10;          //no prescaler

  TCCR1C = 1<<COM1D1 | 0<<COM1D0 | 1<<PWM1D  ;

  OCR1C =255;

  OCR1D = 150;

Ausschalten:

  TCCR1B = 0;

  TCCR1C = 0;

  PLLCSR=0;

  PORTB &= ~(1<<PB5);   //PWM PIN auf Low

  Sleep:

Das gleiche Problem gabs beim Attin85 auch, deswegen vermute ich, dass 
es am PLL PWM liegt. Vielleicht gibt es ja eine spezielle 
ausschaltprozedur?

Gruss

von spess53 (Gast)


Lesenswert?

Hi

Was spricht dagegen, den Timer mit den COM-Bits vom Port zu trennen. PB5 
im Portregister vorher auf Null setzen? Oder den Pin einfach als Eingang 
zu setzen?

MfG Spess

von Julian B. (julinho)


Lesenswert?

spess53 schrieb:
> Hi
>
> Was spricht dagegen, den Timer mit den COM-Bits vom Port zu trennen.

Das tue ich mit TCCR1C = 0;

> PB5
> im Portregister vorher auf Null setzen? Oder den Pin einfach als Eingang
> zu setzen?

Wenn ich PB5 als Eingang setzte ist immer noch der Pull-Up aktiv, der 
den Schalttransisor immer noch durchschaltet.
Im Moment mache ich ein Reset um den Port wiede auf Low zu bringen.
Das Problem tritt übrigens nicht immer auf, als ob der PWM noch etwas 
nachläuft und dann zufällig auf High oder Low stehenbleibt.

von Hannes L. (hannes)


Lesenswert?

Julian Baugatz schrieb:
> Wenn ich PB5 als Eingang setzte ist immer noch der Pull-Up aktiv, der
> den Schalttransisor immer noch durchschaltet.

Und wenn Du PB5 auf L setzt? (cbi portb,pb5)

...

von spess53 (Gast)


Lesenswert?

Hi

>Wenn ich PB5 als Eingang setzte ist immer noch der Pull-Up aktiv, der
>den Schalttransisor immer noch durchschaltet.

Wozu soll der Pull-Up gut sein?

MfG Spess

von Ben _. (burning_silicon)


Lesenswert?

Schaltplan?

Den internen Pullup kann man übrigens auch abschalten. Ich denke aber 
nicht, daß das Dein Problem lösen wird. Den Timer vom Pin wegschalten 
bei einer Pin-Low-Ausgangskonfiguration sollte den Pin sicher und 
schnell nach Masse ziehen.

Ich vermute eher ein Problem im Programm, was den ATTiny zum Absturz 
bringt oder so.

von Julian B. (julinho)


Angehängte Dateien:

Lesenswert?

Anbei der Schaltplan.

Das Problem ist,dass  PORTB PIN5 mannchmal" von selbst" auf High geht 
und auch wenn der Pin nur Eingang ist, dann leider immer noch der 
Pull-Up den Transistor schaltet.
Ich habe auch erst ein Software-Bug vermutet und alle Befehle die PORTB 
veränder herausgenommen - ohne Erfolg. Die einzige Lösung war ein Reset.
Das gleiche Problem trat bei unterschiedlichen Tinys und 
unterschiedlicher Firmeware auf, deswegen vermute ich die Ursache im 
PLL.PWM.

Gruss

von Ben _. (burning_silicon)


Lesenswert?

Toller Plan. Werte der Bauteile? Was soll der Widerstand R21? 
Gate-Widerstand fehlt, nicht schön bei schnell schaltenden Anwendungen 
weils zum Schwingen neigt. Und dann fehlt ein pull-down-Widerstand (etwa 
10k) von der gemeinsamen Basis der Treiberschaltung zur Masse. Ohne den 
ist mir schleierhaft wie das Ding bei einem Reset und hochohmigem Pin am 
AVR sperren soll wenn es vorher geöffnet war.

von Julian B. (julinho)


Lesenswert?

@ben

R21 ist als Strombegrenzung für T3 und T4 gedacht und mit 0 Ohm 
bestückt, der Hinweis mit dem Gatewiderstand ist gut - wie groß sollte 
dieser ungefähr sein?
R20 ist auch 0Ohm.
T3 und T4 sind BC807 bzw. BC817
T7 ist ein IRF7401

Nochmal zu Firmware:
der Kontroller schläft die meist Zeit, wird ab und zu geweckt, macht 
dann einige Sekunden PWM und geht dann wieder schlafen.
Manchmal bleib jedoch der PWM-Pin auf High obwohl er explizit auf Low 
gesetzt wird, mit der folge, dass der Mosfet abraucht.

von Hannes L. (hannes)


Lesenswert?

Julian Baugatz schrieb:
> Das Problem ist,dass  PORTB PIN5 mannchmal" von selbst" auf High geht

Das habe ich noch nie erlebt. Du solltest also davon ausgehen, dass Du 
irgendwo anders beim Zugriff auf die anderen Bits des Portb Bit 5 
versehentlich mit beeinflusst.

> ....
> Die einzige Lösung war ein Reset.

Nein, man kann den Portpin auch per Programm auf L zwingen, dazu muss 
man nur das entsprechende Bit im Portregister auf 0 setzen. Also beim 
Deaktivieren der PWM Portpin vom Timer trennen und auf 0 setzen. Dabei 
ist es völlig uninteressant, ob das Bit im Portregister bereits 0 ist 
oder nicht, nuller als 0 geht nunmal nicht.

...

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.