Forum: Mikrocontroller und Digitale Elektronik ATtiny45 PWM mit MOSFET


von Mathias K. (tj7)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich bin gerade dabei, für 2 Hobbyprojekte LEDs über eine PWM zu 
modulieren. Hierfür verwende ich momentan den ATtiny 45 und nutze den 
Hardware-PWM-Mode zur Steuerung des OC1B Pins. Das Programm läuft soweit 
ohne Probleme, auch am Ausgang des OC1B Pins liegt das gewünschte 
PWM-Signal an.
Da die LEDs zu viel Strom benötigen, steuere ich mit dem Signal vom 
Mikrocontroller einen MOSFET ( IRLML2502 ). Der Schaltplan liegt im 
Anhang, wobei die Zweige mit LED2 und LED3 nur zu Testzwecken eingefügt 
wurden.
Mein Ziel ist es, eine PWM mit 1khz zu erreichen, allerdings stoße ich 
dabei auf ein Problem: (Gemessen wurde die Spannung über der LED) Die 
ansteigende Flanke, wenn der MOSFET durchschaltet, verläuft wie gewohnt 
sehr steil. Dagegen weist die fallende Flanke immer das gleiche 
Verhalten auf. Sie klingt exponentiell in etwa 1ms ab. Das führt dazu, 
dass -wie im angehängten Bild- ab einer Frequenz von etwa 625Hz die 
Spannung über der LED nichtmehr auf Null sinkt (mal abgesehen davon, 
dass die Rechteckform sowieso total hinüber ist). Messe ich den 
Spannungsabfall über dem Vorwiderstand der LED oder dem MOSFET, so liegt 
dort ein perfektes Rechtecksignal an, so wie es eigentlich auch bei der 
LED sein soll. Die langsam fallende Flanke tritt also nur über der LED 
auf.

Zu Testzwecken habe ich noch eine Variante mit einem BC548 Transistor 
ausprobiert, mit dem gleichen Ergebnis für den Spannungsabfall über der 
LED (mit 1k und 4,7k Basiswiderstand).
Schließe ich dagegen die LED direkt an den Ausgang des Mikrocontrollers 
an, so messe ich ein ideales Rechtecksignal, ohne die langsam fallende 
Flanke.

Um mir das zu erklären reicht mein Wissen leider nicht aus. Daher poste 
ich mein Problem mal hier und hoffe, jemand kann mir erklären, warum die 
fallende Flanke bei der Verwendung von einem MOSFET/Bipolartransistor so 
langsam abklingt bzw. wie man das lösen/umgehen kann.

Danke!

von Bastler (Gast)


Lesenswert?

Pull-down Widerstand an die Basis!

von Oliver J. (skriptkiddy)


Lesenswert?

Bastler schrieb:
> Pull-down Widerstand an die Basis!
Das ist doch schon der Basiswiderstand, wenn der AVR bei der PWM auf 
LOW/GND zieht.

Gruß Oliver

von Lukas K. (carrotindustries)


Lesenswert?

Zeig' mal den Quelltext.

von Mathias K. (tj7)


Lesenswert?

Also die PWM an sich läuft wie gesagt ohne Probleme. Wenn ich mit dem 
Oszi direkt an den OC1B Pin gehe, messe ich ein ideales Rechtecksignal.
1
.include "tn45def.inc"
2
 
3
.def temp = r16
4
5
.equ DUTY = 50                  ;Tastverhältnis-Zähler (D = 1, DUTY = 100)
6
7
.org 0x0000
8
        rjmp    main            ;Reset Handler
9
10
main:
11
        ldi    temp, LOW(RAMEND)  
12
        out    SPL, temp
13
        ldi    temp, HIGH(RAMEND)
14
        out    SPH, temp
15
    
16
        ldi    temp, (1<<CS12) | (1<<CS10)      
17
        out    TCCR1, temp      ;Vorteiler auf 16
18
        ldi    temp, (1<<PWM1B) | (1<<COM1B1)
19
        out    GTCCR, temp      ;PWM an PB4 ein, /OC1B deaktiviert
20
21
        ldi    temp, 100        ;Maximalwert für Dutycycle
22
        out    OCR1C, temp      ;OCR1C legt Maximalwert für TCNT1 fest
23
        ldi    temp, DUTY       ;D = DUTY/100
24
        out    OCR1B, temp      ;OCR1B legt Comparematch mit TCNT1 fest
25
26
        ldi    temp, 1<<PB4     ;Pin PB4 auf Ausgang
27
        out    DDRB, temp
28
        ldi    temp, 0          ;PortB auf low 
29
        out    PortB, temp        
30
31
loop:   rjmp    loop

Edit: Der ATtiny läuft mit 1 Mhz Systemtakt.

von Bastler (Gast)


Lesenswert?

Oliver J. schrieb:
> Das ist doch schon der Basiswiderstand, wenn der AVR bei der PWM auf
> LOW/GND zieht.

Ist aber offensichtlich nicht genug.

@TO: Wieso muss die PWM so schnell sein, ist doch blos ne LED?

von Oliver J. (skriptkiddy)


Lesenswert?

Bastler schrieb:
> Ist aber offensichtlich nicht genug.
Welchen Basis-Pulldown-Widerstand empfiehlst du denn?

Gruß Oliver

von Lukas K. (carrotindustries)


Lesenswert?

Könnte es sein, dass einer der Lowside Treiber im AVR halbkaputt ist? 
Miss' mal wenn der Pin auf 0 ist, den Widerstand gegen Masse und zum 
Vergleich den Widerstand gegen Vcc, wenn der Pin auf 1 ist.

von HildeK (Gast)


Lesenswert?

Schließe einfach mal parallel zur LED einen 1k-Widerstand an oder messe 
mit einem niederohmigen Tastkopf oder messe den Spannungsabfall über dem 
LED-Vorwiderstand (⇒Strom durch die LED) und vergleiche.

von Bastler (Gast)


Lesenswert?

Schau halt mal was du da hast, 5k o. 10k sollten zum Testen gehen.

von HildeK (Gast)


Lesenswert?

Bastler schrieb:
> Schau halt mal was du da hast, 5k o. 10k sollten zum Testen gehen.

Richtig, es gehen auch 100Ω oder alles dazwischen. Niederohmig ist 
besser.
Ich wollte nur damit sagen, dass es am Messen liegt. Du solltest den 
Strom messen!

von Oliver J. (skriptkiddy)


Lesenswert?

HildeK schrieb:
> Richtig, es gehen auch 100Ω oder alles dazwischen. Niederohmig ist
> besser.
100 Ohm hinter R2 gegen Masse?

von Bastler (Gast)


Lesenswert?

Das war zwar auf den Pull-down bezogen, aber es ist ja auch schon spät..

Sicher kann es auch am Messen liegen. Teste einfach beide Varianten und 
berichte uns über das Ergebnis ;-)

von Mathias K. (tj7)


Lesenswert?

Im Endeffekt kann ich die PWM auf 100Hz regeln, das ist natürlich kein 
Problem (der Flankenabfall bleibt trotzdem bestehen). Allerdings will 
ich u.A. eine Lichtschranke damit bauen, und da eignen sich die 1khz 
besser. Zudem interessiert es mich brennend, warum bei mir eine PWM im 
khz Bereich nicht funktioniert, obwohl man recht häufig über solche 
liest (mit MOSFETS). Rein durch die Auf-/Entladezeit bleibt ja trotz der 
Strombegrenzung vom Mikrocontroller noch einiges an Spielraum nach oben 
hinaus.

Wegen dem Pulldown-Widerstand: Zwischen Gate und Source bzw. Basis und 
Emitter muss der Widerstand oder? Das hatte ich schonmal probiert mit 
10k und 47k (bzw. auch nur der Basiswiderstand beim BC548 auf 10k/47k), 
aber dabei hat sich nix geändert beim Spannungsabfall über der LED.

Edit: Erstmal durchlesen was grad noch geschrieben wurde ;)

von Oliver J. (skriptkiddy)


Lesenswert?

Oliver J. schrieb:
> HildeK schrieb:
>> Richtig, es gehen auch 100Ω oder alles dazwischen. Niederohmig ist
>> besser.
> 100 Ohm hinter R2 gegen Masse?

Da hab ich wohl ein paar Posts verpasst ;). Ist wiklich schon spät.

Gruß Oliver

von HildeK (Gast)


Lesenswert?

Oliver J. schrieb:
> 100 Ohm hinter R2 gegen Masse?
Nein, als Last parallel zur LED + LED-Vorwiderstand.
Du sagtest, dass du die Spannung an der LED aufgezeichnet hast. Wenn der 
Transistor oder FET abschalten, wird die Spannung bei hochohmiger 
Messung auf Grund von parasitären Kapazitäten nicht in wenigen ns auf 
Null gehen. Der (Messhilfs-)Widerstand wird dir zeigen, ob es daran 
liegt.

Deshalb auch mein anderer Vorschlag: messe nicht die Spannung über der 
LED sondern über deren Vorwiderstand. Die zeigt dir den Verlauf des 
LED-Stroms und der ist schließlich verantwortlich für das Leuchten ...

von Oliver J. (skriptkiddy)


Lesenswert?

HildeK schrieb:
> Du sagtest, dass du die Spannung an der LED aufgezeichnet hast.
Da hast du mich doch glatt mit dem TO verwechselt ;)

von HildeK (Gast)


Lesenswert?

Oliver J. schrieb:
> Da hast du mich doch glatt mit dem TO verwechselt ;)

Oh ja, sorry, aber es wurde doch schon mehrfach erwähnt, wie spät es 
sei. Das nagt auch an meiner Konzentration.

von Oliver J. (skriptkiddy)


Lesenswert?

HildeK schrieb:
> Oh ja, sorry, aber es wurde doch schon mehrfach erwähnt, wie spät es
> sei. Das nagt auch an meiner Konzentration.

Willkommen im Club.

von Norbert S. (norberts)


Lesenswert?

Hi,

HildeK ist auf der richtigen Fährte.
Wenn abgeschaltet wird, sinkt die Spannung schlagartig auf ca. 2,xV und 
dann nur noch langsam.
Da fliesst dann einfach kein Strom mehr (wie gewünscht) und das weitere 
langsame Absinken der Spannung ist einfach nur Leckstrom.

Also alles ok und normal.
Miss mal zum Spaß den Strom mittels Vorwiderstand. Also die Spannung 
zwischen R4 und der LED gegen GND oder direkt die Spannung über R4. Das 
wird wieder ein schönes Rechteck sein.

Gruß,
Norbert

von Mathias K. (tj7)


Lesenswert?

Danke für die Ratschläge und das Aufbleiben bisher ;)! Meine Augen 
wollen auch langsam nichtmehr, aber ich kann sowieso nicht pennen weil 
ich dauernd über die Ursache grübel :D


Also ich hab gerade ein bisschen ausprobiert:

MOSFET+LED1:
Wenn ich einen Widerstand (1k) über die LED bzw über LED+Vorwiderstand 
lege, messe ich meine ideale Rechteckspannung. Ich hab aber mal 
geschaut, was mein Fototransistor ausgibt, wenn ich ihn an die LED 
halte: Und siehe da, der zeigt mir die langsam abfallende Flanke an.

Wenn ich statt der LED den Vorwiderstand messe, sehe ich auch die 
Rechteckspannung ohne langsam abfallende Flanke (das gleiche am MOSFET). 
Nur an der LED ist die langsame Flanke beobachtbar.

Direkt angeschlossen+LED3
Ich hab auch nochmal geschaut, was mein Fototransistor sagt, wenn die 
LED direkt an den Mikrocontroller-Pin angeschlossen ist (hab ich vorm 
Erstellen des threads nicht gemacht). Obwohl die Messung der Spannung an 
der LED keine langsam fallende Flanke ergibt, sehe ich sie am 
Fototransistor.

Irgendwie vermute ich, dass es einfach an der LED liegt. Aber dann 
verstehe ich nicht, warum am Vorwiderstand das Rechtecksignal anliegt, 
an der LED aber nicht (eigentlich würde das am Vorwiderstand ja heissen, 
dass der Strom abrupt aufhört zu fliessen. Also müsste ja die LED auch 
abrupt aufhören zu leuchten, was sie aber nicht tut, wie man am 
Fototransistor-signal sieht).

von Norbert S. (norberts)


Lesenswert?

Hi,

am Fototransistor ist es vermutlich der selbe Effekt.
Was hast Du da gemessen und wie ist der verschaltet?

Gruß,
Norbert

von Mathias K. (tj7)


Lesenswert?

Im Prinzip hab ich an die 9V Quelle nur den Fototransistor mit einem 47k 
Widerstand in Reihe geschalten und den Spannungsabfall über dem 
Widerstand gemessen.

Bei anderen LEDs ist es der gleiche Effekt, habe gerade mal 4 andere 
ausprobiert.

von Norbert S. (norberts)


Lesenswert?

Hi,

bei 47k ist das Signal natürlich verwaschen am Fototransistor.
Das liegt nicht an den Bauteilen.

Was soll das denn werden?

Gruß,
Norbert

von Mathias K. (tj7)


Lesenswert?

Einerseits baue ich eine binäre Uhr, bei der durch Multiplexen über 8 
Pins ein 4x4 LED Feld betrieben wird. Angesteuert werden die 
Zeilen/Spalten durch MOSFETS (wegen dem geringen Spannungsabfall). In 
dem Fall ist das mit der langsamen Flanke nicht so kritisch, da ich eh 
nur Wiederholraten von 100Hz benutze.

Andererseits baue ich eine Lichtschranke mit 2 ATtinys. Einmal um die 
LED zu modulieren (ich nehm keinen NE555, weil ich mit dem ATtiny mein 
Tastverhältnis bequemer einstellen kann). Der Andere ATtiny sitzt in der 
Empfängereinheit. Das Signal moduliere ich, damit ich an der 
Empfängereinheit durch einen einfachen Entkoppelkondensator das 
Gleichsignal vom Umgebungslicht unterdrücken kann, bevor ich das 
ankommende Signal der LED verstärke. Die 1khz strebe ich deswegen an, um 
meine Auswerteroutine besser anpassen zu können (legt u.A. auch die 
Reaktionsgeschwindigkeit fest).

Zum Signal am Fototransistor: Zumindest die ansteigende Flanke sah noch 
sehr scharf aus.

von Mathias K. (tj7)


Lesenswert?

Lukas K. schrieb:
> Könnte es sein, dass einer der Lowside Treiber im AVR halbkaputt ist?
> Miss' mal wenn der Pin auf 0 ist, den Widerstand gegen Masse und zum
> Vergleich den Widerstand gegen Vcc, wenn der Pin auf 1 ist.

Wenn der Pin auf 0 ist:
Widerstand gegen Masse: 28 Ohm

Wenn Pin auf 1 ist:
Widerstand gegen Vcc: 25,5 Ohm

Die jeweiligen anderen Werte konnte ich nicht messen, also nehme ich mal 
an, dass sie ein wenig außerhalb des Messbereichs meiner beiden 
Messgeräte lagen.

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.