Forum: Mikrocontroller und Digitale Elektronik Transistor schaltet dauerhaft durch


von Chris (Gast)


Lesenswert?

Moin, moin.

Habe da mal eine Frage: Ich möchte vom ATmega aus ein Relais schalten. 
Dazu benutze ich einen Transistor FMMT 458 TA. Die Schaltspannung an 
Relaisspule und Transistor beträgt 10-16V. Die Basis des Transistors ist 
mit einem 1k Vorwiderstand mit dem µC verbunden. Die ersten 
Schaltvorgänge (ca. 20, variiert aber) funktionieren problemlos (200ms 
an, 200ms aus), und irgendwann bleibt der Transistor durchgesteuert.

Dachte erst, dass die 0.6V, die vom µC-Pin im Output Low - Zustand 
geliefert werden, diesen Effekt verursachen. Habe daher den Pin im 
Low-Zustand zum "Input ohne Pullup" gemacht, sodass wirklich 0.0V am Pin 
anliegen. Hat das Verhalten aber nicht geändert. Erst ein 10k Widerstand 
gegen GND zwischen Basis und Vorwiderstand scheinen diesen Effekt 
größtenteils zu verhindern (hin und wieder, aber deutlich seltener, 
bleibt der Transistor dennoch durchgeschaltet).

Kann mir das jemand erklären? Ich dachte immer, ein Transistor schaltet 
nur durch, wenn ein Strom durch die Basis fließt... Ist ja schließlich 
kein FET, der kapazitiv funktioniert...

Danke für alle Hinweise,
Christian

von Falk B. (falk)


Lesenswert?


von Holger K. (krulli) Benutzerseite


Lesenswert?

>irgendwann bleibt der Transistor durchgesteuert
keine Freilaufdiode am Relais?

von Vorname N. (logout-name)


Lesenswert?

Bist du sicher, dass noch Strom durch den Transistor geht oder bleibt 
das Relais vielleicht hängen, ohne dass Strom fliesst?

von Chris (Gast)


Lesenswert?

@Holger: Freilaufdiode ist vorhanden

@Vorname: Jupp, bin sicher. Der Transistor bleibt durchgeschaltet und 
versorgt die Relaisspule mit Strom (nachgemessen).

@Falk: Bereits intensiv gelesen und genau nach erster Abbildung 
aufgebaut (Controller schaltet NPN-Transistor-Basis über Vorwiderstand). 
Das führt zu oben genanntem Effekt. Erst ein Widerstand gegen Masse 
zwischen Basis und Basiswiderstand verbessert das... Und genau das 
verstehe ich nicht.

von Matthias L. (Gast)


Lesenswert?

>Erst ein Widerstand gegen Masse
>zwischen Basis und Basiswiderstand verbessert das... Und genau das
>verstehe ich nicht.

Hat der µC etwa pnp-Ausgänge? Bei ner SPS ist sowas üblich, aber beim 
µC?

Was ist das für einer?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>Dachte erst, dass die 0.6V, die vom µC-Pin im Output Low - Zustand
>geliefert werden, diesen Effekt verursachen.
Zeig doch mal deinen Schaltplan (oder wenigstens den Auszug).
Irgendwoher müssen die 0,6V doch kommen.
Der uC liefert im Low-Zustand nichts!
Laut DB schafft er es nur nicht, mehr als 20mA auf GND zu schalten, wenn 
der Ausgang unter 0,7V bleiben soll!

>Habe daher den Pin im Low-Zustand zum "Input ohne Pullup" gemacht, sodass 
>wirklich 0.0V am Pin anliegen. Hat das Verhalten aber nicht geändert.
Ein Eingang als Ausgang?
Das geht sowieso schief, da "floated" die Basis so herum, nimmt sich 
irgendwoher einen kleinen Strom und schaltet deinen Transistor nicht 
mehr ganz ab.

>...wirklich 0.0V am Pin anliegen...
Im Fehlerfall?
Gemessen? Geschätzt?

von Andreas K. (a-k)


Lesenswert?

Ist zwar etwas ungebäuchlich, 16V mit einem 400V-Typ zu schalten. Aber 
auch der wird mit Relais als Last bei offener Basis dicht machen, d.h. 
entweder ist da was falsch angeschlossen oder er wird falsch 
angesteuert.

von Chris (Gast)


Angehängte Dateien:

Lesenswert?

@Matthias: Ist ein ATmega128

@Lothar: Teil-Schaltplan der Relaissteuerung im Anhang.
>Der uC liefert im Low-Zustand nichts!

>>...wirklich 0.0V am Pin anliegen...
>Im Fehlerfall? Gemessen? Geschätzt?
Ich werde heute Abend noch einmal nachmessen, aber ich bin der Meinung, 
ich hätte im Normalbetrieb am Basiswiderstand prozessorpinseitig 0.6V 
gemessen. Werde das heute Abend noch einmal kontrollieren. Möglich, dass 
ich da versehentlich die Basisseite gemessen habe, und der Controllerpin 
wirklich 0.0V hatte...

Kann es sein, dass sich an der Basis "von selbst" eine gewisse Spannung 
einstellt, und der Widerstand von 1k zu groß ist, als dass der 
Controller ihn mit einem auf Low geschalteten Ausgang abführen könnte?

von Andreas K. (a-k)


Lesenswert?

Chris wrote:

> Kann es sein, dass sich an der Basis "von selbst" eine gewisse Spannung
> einstellt,

Nein.

Die Schaltung ist in Ordnung und sollte so funktionieren. Wenn das 
dennoch nicht funktioniert, dann weil irgendwas anders ist als 
abgebildet.

von Chris (Gast)


Lesenswert?

@Andreas: War der günstigste SMD-Transistor, den ich auf den ersten 
Blick bei Reichelt finden konnte. Sollte eigentlich auch mit geringeren 
Spannungen funktionieren...

von Andreas K. (a-k)


Lesenswert?

Der Standardtyp für solche Anwendungen ist als SMD der BC847 (0,04€).

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ist der ATmega auf der selben Masse?
Ist da ein Steckverbinder zwischen Relais-Treiber und ATmega?

von Chris (Gast)


Angehängte Dateien:

Lesenswert?

@Andreas: Danke für den Tip. Dummerweise muss man bei Reichelt scheinbar 
schon wissen, was man sucht. "Transistor NPN" findet diesen Typ leider 
nicht :-(
@Lothar: ATmega ist auf der selben Masse. Ein Schaltregler bringt die 
Spannung, die auch die Relais schalten lässt, auf Controllerverträgliche 
5,2V. Es sind keine Steckverbindungen zwischen Relaistreiber und ATmega. 
Im Anhang ist nochmal das komplette Board ohne die Widerstände gegen 
Masse, die ich nachträglich eingelötet habe.

von Chris (Gast)


Lesenswert?

PS: Nicht lachen... es ging darum, das Board schnell fertig zu bekommen, 
und nicht die Anzahl der Durchkontaktierungen zu begrenzen oder es 
anderweitig "hübsch" zu machen... ;-)

von Andreas K. (a-k)


Lesenswert?

Da reicht wohl die Auflösung nicht, denn ich sehe in der Abbildung bei 
einigen dieser Transistoren einen prima Kurzschluss zwischen C und E.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>anderweitig "hübsch" zu machen...
Ja, das ist ein liebliches Detail mit dem Q8 und dem R40 ;-)

Der Schaltplan ist ok, die Platine fraglich.
Sind da noch irgendwelche "unrouted signals" mit drauf?

Ich bin mir noch nicht so richtig sicher, ob deine Masse tatsächlich so 
flächig ist, wie sie aussieht. Da sind ein paar prächtige Einschnitte im 
Masseverlauf. Kontrolliere das doch mal mit der "show" Fonktion von 
EAGLE.


Eine Grundregel fürs Layout ist:
Jede Signalleitung hat einen Strom und einen Rückstrom. D.h. irgendwie 
muss der Ansteuerstrom auch zurück, am besten in der Nähe der 
Signalleitung. Das geht z.B.
- mit einer Masse-Innenlage
- oder mit einer Massestrippe parallel zum Signal
Bei dir ist weder noch....

Und: niemals Signale unter der Spule des Schaltreglers durchführen 
:-O
Am besten nicht mal in der Nähe des Schaltreglers.

von Chris (Gast)


Angehängte Dateien:

Lesenswert?

@Andreas: Hier noch einmal in höherer Auflösung.

@Lothar: Keine unrouted signals. Die Masseflächen, die in der Abbildung 
dargestellt sind, sind auch tatsächlich mit Masse verbunden.

>Eine Grundregel fürs Layout ist:
>Jede Signalleitung hat einen Strom und einen Rückstrom
Ist das denn bei einer Schaltfrequenz der Relais von max. 5Hz relevant?

>Und: niemals Signale unter der Spule des Schaltreglers durchführen
>:-O
>Am besten nicht mal in der Nähe des Schaltreglers.
Jetzt wo Du's sagst :-C Da hätte ich auch selbst mal drauf kommen 
können...

Habe ein Problem mit dem Schaltregler auch schon vermutet und den 
5V-Teil über 4 Akkus (4.8V) betrieben, das Problem bleibt aber nach wie 
vor das gleiche.

von Wolf (Gast)


Lesenswert?

200ms an, 200ms aus, Schalthäufigkeit 2,5Hz.
Transistoren von Zetex sind eh was Anderes.
Setze mal in eine Stufe einen bedrahteten BCxxx ein und laß es laufen.
Hast Du vorher mit Oszi gemessen?
Ansonsten sollte man nicht davon ausgehen, daß alle Transistoren sich 
gleich verhalten. Ist doch ein Unterschied, ob einer für 400V oder nur 
50V Uce hergestellt wird. Dann muß er auch entsprechend beschaltet 
werden.
Wenn sonst nichts hilft...
... könnte deshalb sein, daß Rb mit 1k noch zu hoch ist, es kann auch 
sein, daß die Basis eine (ebenfalls niederohmige) Ausräumhilfe 
braucht=Rbe, was Du ja als Verbesserung bemerkt hast.
Melde Dich dann wieder.

von Volker (Gast)


Lesenswert?

>>Transistoren von Zetex sind eh was Anderes.

Was wolltest Du damit sagen?

von Falk B. (falk)


Lesenswert?

>>Transistoren von Zetex sind eh was Anderes.

Hmm, was sagt das Datenblatt?

400V Transistor, wie bereits bemerkt ziemlich fehldimensioniert für 12V 
Relais.
Ein genauer Blick zeig aber auch noch so unschöne Dinge wie.

Static Forward
Current Transfer Ratio
hFE

100      IC=1mA, VCE=10V
100..300 IC=50mA, VCE=10V*
15       IC=100mA, VCE=10V*

Kann es sein, dass das Ding bei hohen Strömen massiv mit der 
Stromverstärkung einknickt? Und dass die ersten paar Schaltspiele nur 
bei kaltem Transistor funktionieren, dann aber auf grund des hohen 
Stroms es zur Erwärmung und damit absinken der Stromverstärkung kommt?
Der Verweis auf den Normaltypen BC846 bzw. BC847 ist schon sehr 
vernünftig.

MFG
Falk

von Chris (Gast)


Lesenswert?

> 200ms an, 200ms aus, Schalthäufigkeit 2,5Hz.
Flüchtigkeitsfehler... Sorry.

> Hast Du vorher mit Oszi gemessen?
Bisher noch nicht. Was genau kann ich da messen? Ich nehme an, du meinst 
den Rückgang der Spannung an der Basis während der Offzeit? Die besagten 
2,5Hz dienten nur als Maximum-Beispiel wegen der Masserückleitungen. Das 
Problem tritt auch auf, wenn 200ms an, dann 60 Sekunden aus. Nach ein 
paar Schaltvorgängen bleibt der Transistor durchgesteuert, und zwar über 
die gesamten 60 Sekunden (vmtl. auch länger). Werde heute Abend Oszi mal 
dranklemmen und nachmessen, was da genau passiert.

> Setze mal in eine Stufe einen bedrahteten BCxxx ein und laß es laufen.
> ... Ist doch ein Unterschied, ob einer für 400V oder nur
> 50V Uce hergestellt wird
Werde ich machen. Bin mal gespannt, ob's was hilft.

von Volker (Gast)


Lesenswert?

Ich glaube eher, dass da was in der Software faul ist.
Poste doch mal deinen Code.

>>Transistoren von Zetex sind eh was Anderes.

Jetzt weiss ich immer noch nicht, was das besondere an Zetex
Transistoren sein soll, 400V Typen gibts auch noch von anderen
Firmen.

von Chris (Gast)


Lesenswert?

@Volker: Ich glaube, dass der Code ok ist. Momentan sieht es so aus:
1
int main(void) {
2
  DDRA = 0xff;
3
  PORTA = 0x00;
4
5
  while (1) {
6
    PORTA |= (1 << PA0); SleepMs(200); PORTA &= ~(1 << PA0); SleepMs(200);
7
    PORTA |= (1 << PA1); SleepMs(200); PORTA &= ~(1 << PA1); SleepMs(200);
8
    PORTA |= (1 << PA2); SleepMs(200); PORTA &= ~(1 << PA2); SleepMs(200);
9
    PORTA |= (1 << PA3); SleepMs(200); PORTA &= ~(1 << PA3); SleepMs(200);
10
    PORTA |= (1 << PA4); SleepMs(200); PORTA &= ~(1 << PA4); SleepMs(200);
11
    PORTA |= (1 << PA5); SleepMs(200); PORTA &= ~(1 << PA5); SleepMs(200);
12
    PORTA |= (1 << PA6); SleepMs(200); PORTA &= ~(1 << PA6); SleepMs(200);
13
    PORTA |= (1 << PA7); SleepMs(200); PORTA &= ~(1 << PA7); SleepMs(200);
14
  }
15
}
(SleepMs macht einen oder mehrere Aufrufe von _delay_ms, falls > 262.14 
ms)

Wenn sich alles schön gleichmäßig anhört, klappts. Sobald einer der 
Transistoren durchgesteuert bleibt, hört man das schön am fehlenden 
Klackern des entsprechenden Relais. Das tut dann quasi gleich im Ohr weh 
;-)

@Falk: @Volker: Ich glaube, dass der Code ok ist. Momentan sieht es so 
aus:
(SleepMs macht einen oder mehrere Aufrufe von _delay_ms, falls > 262.14 
ms)
1
int main(void) {
2
  DDRA = 0xff;
3
  PORTA = 0x00;
4
5
  while (1) {
6
    PORTA |= (1 << PA0); SleepMs(200); PORTA &= ~(1 << PA0); SleepMs(200);
7
    PORTA |= (1 << PA1); SleepMs(200); PORTA &= ~(1 << PA1); SleepMs(200);
8
    PORTA |= (1 << PA2); SleepMs(200); PORTA &= ~(1 << PA2); SleepMs(200);
9
    PORTA |= (1 << PA3); SleepMs(200); PORTA &= ~(1 << PA3); SleepMs(200);
10
    PORTA |= (1 << PA4); SleepMs(200); PORTA &= ~(1 << PA4); SleepMs(200);
11
    PORTA |= (1 << PA5); SleepMs(200); PORTA &= ~(1 << PA5); SleepMs(200);
12
    PORTA |= (1 << PA6); SleepMs(200); PORTA &= ~(1 << PA6); SleepMs(200);
13
    PORTA |= (1 << PA7); SleepMs(200); PORTA &= ~(1 << PA7); SleepMs(200);
14
  }
15
}

Wenn sich alles schön gleichmäßig anhört, klappts. Sobald einer der 
Transistoren durchgesteuert bleibt, hört man das schön am fehlenden 
Klackern des entsprechenden Relais.

@Falk: Die Relais, die ich verwende (Finder Subminiatur-Relais 12V), 
haben 400 Ohm Spulenwiderstand und sollten laut Datenblatt bei 18V ca. 
45mA benötigen. Das wäre, zumindest was die Verstärkung der Transistoren 
angeht, noch in einem sicheren Rahmen. Ich werde aber trotzdem die 
Transistoren mal gegen passende BC-Typen tauschen. Mal sehen, ob ich 
davon noch welche in meiner Bastelkiste habe. Melde mich, ob's dann 
besser funktioniert.

von Chris (Gast)


Lesenswert?

Ooops, C&P-Unfall. Aber ich glaube, man kann entziffern, was gemeint 
war...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

@ Falk
>dass das Ding bei hohen Strömen massiv mit der Stromverstärkung einknickt...
>...absinken der Stromverstärkung kommt...
hfe hatte ich auch schon gesehen,
aber der schaltet ja nicht nicht ein.
Will sagen: er schaltet nicht aus.

Beim BC847 kippt hfe bei höheren Strömen auch ganz hübsch nach unten 
weg. Die bekannten 100-300 gelten bei 2mA Kollektorstrom, das packt 
dieser FMMT auch noch. Und bei Erwärmung steigt hfe....

@ Chris
>..durchgesteuert, und zwar über die gesamten 60 Sekunden...
Und geht dann wieder aus???
Sind da noch Interrupts unterwegs?

von Chris (Gast)


Lesenswert?

> Und geht dann wieder aus???
Nein. Ein paar Zyklen klappts, dann bleibt das erste Relais für den Rest 
der Laufzeit angezogen. Wie oben beschrieben hört man das, da die 
anderen Relais noch eine weile fleißig weiterklackern, bis auch sie 
später angezogen bleiben usw. Die bleiben dann angezogen, bis ich den 
Strom abziehe und neu einstecke. Dann geht das Spiel von vorne los. 
Interrupts sind keine konfiguriert...

von Volker (Gast)


Lesenswert?

Die +12V Leitung ist schlecht verlegt und entkoppelt,
mach da mal ein paar Kondensatoren rein, natürlich in
der Nähe der Relais.

Was sagt denn eine testweise angeschlossene LED am Portpin des
ATMEGA? Blink die dann weiter oder bleibt die auch stehen?

von Andreas K. (a-k)


Lesenswert?

Hast du kontrolliert, dass das Programm noch läuft, oder kann es sein 
dass der Controller wegfliegt?

von Wolf (Gast)


Lesenswert?

Kann Chris auch mal nur 1 Relais betreiben und die Anzahl dann steigern?

von Karl B. (gustav)


Lesenswert?

Also, die Basiswiderstände müßten schon bei 5 V Betriebsspannung bei 
Verwendung eines BC547 mindestens 4700 Ohm betragen.
Man fährt den Transistor gnadenlos in die Sättigung sonst.

von Andreas K. (a-k)


Lesenswert?

Karl B. wrote:

> Man fährt den Transistor gnadenlos in die Sättigung sonst.

Und was stört dich daran?

von Chris (Gast)


Lesenswert?

@Volker / Andreas: Der Controller läuft weiter. Eine Status-LED blinkt 
kontinuierlich im "Solltakt" des Relais mit. Das sieht so weit richtig 
aus.

@Wolf: Nur ein Relais anzusteuern habe ich auch schon probiert. Ist dann 
genau der selbe Effekt.

Ich habe die Transistoren nun gegen bedrahtete BC337er getauscht. Die 
sind mit 800mA Kollectorstrom zwar etwas überdimensioniert, davon hatte 
ich aber noch einige in meiner Bastelkiste herumliegen. Damit 
funktioniert alles einwandfrei. Liegt also scheinbar an den 
Transistoren.

Danke an alle, die sich mit meinem Problem beschäftigt haben.

Gruß,
Christian

von Vizequistore (Gast)


Lesenswert?

> Man fährt den Transistor gnadenlos in die Sättigung sonst.

> Und was stört dich daran?

Das ist eine ineffiziente Schaltungsdimensionierung.
Erhöhter Stromverbrauch, die die Treiberschaltung(MCU) auf bringen muss.

Auch die Basisvorwiderstände im Artikel: "Relais mit Logik ansteuern" 
sind diese Widerstände pauschal, viel zu niedrig.

Für die Relaisansteuerung kann man locker 10k nehmen(ein B>100 
vorausgesetzt).

von Andreas K. (a-k)


Lesenswert?

Vizequistore wrote:

> Für die Relaisansteuerung kann man locker 10k nehmen(ein B>100
> vorausgesetzt).

Wenn es nicht stört, dass dann auch mal 0,5V im Transistor draufgehen. 
Bei 12V ist das kein Problem, bei 5V ist mir ein gesättigter Schalter 
lieber. Und man sollte dann auch das Datasheet vom konkret verwendeten 
Exemplar verwenden, weil bei kritischer Dimensionierung schon wichtig 
ist, ob beim gleichen Typ der Hersteller A ein B>=100 und der Hersteller 
B ein B>=70 garantiert.

von Wolf (Gast)


Lesenswert?

Chris,
würde mich interessieren, ob Du noch Messungen an dem FMMT-Transistor 
durchgeführt hast und nicht mehr tolerierbare Unterschiede oder 
verwunderliche Werte festgestellt hast.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

@ Chris
>Liegt also scheinbar an den Transistoren.
Da hätte ich jetzt aber ein mulmiges Gefühl im Bauch...

von Chris (Gast)


Lesenswert?

> Da hätte ich jetzt aber ein mulmiges Gefühl im Bauch...
Habe ich auch. Aber ich habe den Relais gestern Abend und heute morgen 
gelauscht, und keine Aussetzer oder Hänger mehr heraushören können. Ich 
hoffe mal, dass das ganze jetzt ok ist.

> würde mich interessieren, ob Du noch Messungen an dem FMMT-Transistor
durchgeführt hast
Da Gerät + Software am 1.8. fertig sein muss, bin ich etwas unter 
Zeitdruck und hatte das Oszi nicht mehr dran gehabt. Die Transistoren 
habe ich vorsichtig ausgelötet. Bei nächster Gelegenheit baue ich die 
mal auf die Ersatzplatine und messe noch einmal mit dem Oszi nach. Bin 
auch gespannt, was da genau schief gegangen ist...

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.