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
>irgendwann bleibt der Transistor durchgesteuert
keine Freilaufdiode am Relais?
Bist du sicher, dass noch Strom durch den Transistor geht oder bleibt das Relais vielleicht hängen, ohne dass Strom fliesst?
@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.
>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?
>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?
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.
@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?
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.
@Andreas: War der günstigste SMD-Transistor, den ich auf den ersten Blick bei Reichelt finden konnte. Sollte eigentlich auch mit geringeren Spannungen funktionieren...
Ist der ATmega auf der selben Masse? Ist da ein Steckverbinder zwischen Relais-Treiber und ATmega?
@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.
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... ;-)
Da reicht wohl die Auflösung nicht, denn ich sehe in der Abbildung bei einigen dieser Transistoren einen prima Kurzschluss zwischen C und E.
>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.
@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.
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.
>>Transistoren von Zetex sind eh was Anderes.
Was wolltest Du damit sagen?
>>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
> 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.
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.
@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.
Ooops, C&P-Unfall. Aber ich glaube, man kann entziffern, was gemeint war...
@ 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?
> 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...
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?
Hast du kontrolliert, dass das Programm noch läuft, oder kann es sein dass der Controller wegfliegt?
Kann Chris auch mal nur 1 Relais betreiben und die Anzahl dann steigern?
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.
Karl B. wrote:
> Man fährt den Transistor gnadenlos in die Sättigung sonst.
Und was stört dich daran?
@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
> 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).
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.
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.
@ Chris
>Liegt also scheinbar an den Transistoren.
Da hätte ich jetzt aber ein mulmiges Gefühl im Bauch...
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.