Simpler N-MOSFET schalter

Hallo zusammen,

Ich hab da ein kleines Problem
Eigentlich will ich einfach nur einen einfachen Schalter mit einem MOSFET basteln der meine Kaltlichtkathoden ein- und ausschaltet.

  • Ein Selbstsperrender N-MOSFET (irlz34npbf)
  • Eine Kaltlichtkathode die geschaltet werden will (12V, 3W daher 0.25A)
  • Ein Arduino MEGA ADK der den MOSFET schalten soll

Das Datenblatt für den MOSFET: https://www.distrelec.ch/ishop/Datasheets/irlz34npbf_eng_tds.pdf

Folgendes stellte ich mir vor. Ich verbinden den Arduino Digital port 40 mit einem kleinen Sicherungswiederstand (220 Ohm) an das gate des Mosfets, die Source an den minus pol meines PC Netzteils, Drain an Minus von der Kaltlichtkathode und die vom Netzteil gelieferten 12V+ an den +Pol von der Kaltlichtkathode.
Noch als weitere Info, der Arduino ist mit USB an meinem PC angeschlossen.

Folgendes kleines Testprogramm habe ich dem Arduino beigebracht, er soll ja nicht doof sterben.

#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#include <Arduino.h>

#define LED PB7
int statusPower = 40;

void setup() {
    pinMode(statusPower, OUTPUT);
}

void initIO(void)
{
	DDRB |= (1<<LED);
}

int main(void)
{
    initIO();
	while (1)
	{
          PORTB |= (1<<LED); // set
                digitalWrite(statusPower, HIGH);
		_delay_ms(5000);
		PORTB &= ~(1<<LED); // clear
                digitalWrite(statusPower, LOW);
		_delay_ms(5000);

	}
	return 0;
}

Das ist der BlinkBlink demo code erweitert damit, dass er meinen digitalen Port 40 auf HIGH stellt sobald die Power LED an ist und auf LOW wenn sie aus ist jeweils im 5 Sekunden abschnitt.

Schalte ich nun Arduino und Netzteil an so schaltet der MOSFET schön durch und meine Kaltlichtkathode leuchtet hübsch. Hach hab ich mich gefreut, aber nun kommen die 5-Sek. LOW und was passiert? Gar nix!! Die Kaltlichtkathode brennt fröhlich weiter.
Dachte ich mir "Nun gut, testen wir mal den MOSFET". Habe das Kabel vom Port 40 raus genommen und auf irgendeinen GND des Arduino's gehalten. Gefreut wie ein Schlosskönig, mit dem wissen, mein MOSFET funktioniert da die Lampe ausging.
Weitere Überlegungen fanden statt mit dem Ergebnis "Hey vielleicht ist das GND Potential auf dem Arduino komisch", Also ein weitere versuch, das Minus-Kabel vom PC-Netzteil an einen GND vom Arduino, getestet und das gleiche wie vorhin, die Lampe brennt fröhlich weiter, auch wenn der Port LOW hat.
Dann habe ich noch versucht mit einem Widerstand den Port 40 und GND zu verbinden um vielleicht dem MOSFET beizubringen "Hey schau mal, da ist GND musst nur einen kleinen Widerstand überwinden, dann kannst du dich so richtig schön entladen." Stur wie der MOSFET nun mal ist sagt er "Pustekuchen" und es funktioniert immer noch nicht.

Bin hier nun am verzweifeln und weis nicht, was ich falsch mache.
Lustigerweise hat es irgendwie so halbwegs funktioniert, als ich mein Multimeter zwischen GND PORT des Arduino's und dem MOSFET gate angelegt hatte, kann aber auch nur Zufall gewesen sein.

Kann mir irgend ein kluges Köpfchen weiterhelfen? Bin mit meinem Latein am ende, kommt aber wohl daher, dass ich nie Latein hatte

Hast du mal einen 20-100kOhm Widerstand von Gate nach Masse probiert? Also direkt von Gate zwischen R1 und G. Nicht zwischen Pin und R1.

Einen 20 - 100 kOhm habe ich aktuell hier nicht liegen, nur einen 10 kOhm.
Habe das gerade noch einmal getestet das kabel was vom Gate kommt direkt an den Pin 40 und dazwischen eine Abzweigung mit dem 10 kOhm wiederstand zu GND vom Arduino, damit bleibt die kaltlichtkathode aus, geht aber bei +5V auch nicht an.

Hast Du GND des Arduino mit dem Minuspol des 12V Netzteils verbunden?
Grüße Uwe

Jap habe ich.
Habe aber beides mal probiert, ohne die GND / Minus netzteil und auch mit, beides mal gleicher Effekt.

prdatur:
Lustigerweise hat es irgendwie so halbwegs funktioniert, als ich mein Multimeter zwischen GND PORT des Arduino's und dem MOSFET gate angelegt hatte, kann aber auch nur Zufall gewesen sein.

Hallo,

die Ladung am Gate des Mosfet muss ausgeräumt werden. Ich denke das hat Dein Multimeter getan. Genauso wie Du das angeschlossen hast, solltest Du einen Widerstand - so wie Serenifly geschrieben hat - als Pulldown am Gate des Mosfet anschließen.

Gruß,
Ralf

Hast Du den MOSFET richtig angeschlossen oder die Anschüße vertauscht?
Mach uns mal ein Foto Deines Aufbaus

Ok ihr werdet euch aber im Grab rum drehen, wenn ihr das seht.
Einfach vorweg, das ist wirklich nur ein gaaaanz erster Test. Natürlich weis ich, dass das später so nicht aussehen sollte :stuck_out_tongue: habe mir auch eine nette entwicklerplatine mit kreuzverbindungen besorgt, kommt aber erst morgen / übermorgen bei mir an. Habe leider kein Breadboard.

Unten am arduino sieht man ein graues kabel wo 2 schwarze stecker sind, da zwischen ist der 10kOhm der zu GND geht der weiter gehende stecker steckt in pin 40. rechts der rote ist der minus der in GND in den arduino rein geht, er ist vom Molex minus abgegriffen. Bitte nicht verwundern, dass am MOSFET gelb / rot als kabel farbe liegt, das ist minus :stuck_out_tongue:

Und nochmal: Bitte bitte nicht für die Art des aufbau's schlagen :slight_smile:
Achso links oben der schwarze kasten da sind die kathoden angeschlossen

prdatur:
Ok ihr werdet euch aber im Grab rum drehen, wenn ihr das seht.

Das sollte schon noch etwas dauern, etwas länger dauern..

Mach bitte ein besseres Bild. Geht der Gate wirklich auf Pin 40?

Grüß Uwe

OK... PIN40 geht über ein kabel in die Maus, raus aus der Maus in den Molex dann raus und in den schwarzen Kasten, an dem die lichterkette befestigt ist. Ab in den fet, der die adernfarben von rot nach schwarz nach gelb wechselt über ein weiteres kabel nach irgendwas... Hmm.

Mach ein besseres Bild.

Also:

  • Der GND vom Arduino und die Masse des 12V-Netzteiles (=Source des Fet) MUSS verbunden sein!
  • Der Angesprochene Widerstand zwischen Gate und Source ist sinnvoll, aber für die reine Funktion nicht notwendig. Aber sorgt dafür, dass wenn das Kabel zum Arduino abgezogen wird, dass dann der FET zuverlässig sperrt.
  • Ist das verwendete PC-Netzteil das des Rechners der die USB-Schnittstelle betreibt ? Nicht dass sich hier irgendwelche Spannungsunterschiede ergeben.

Ja der Arduino ist mit USB am PC verbunden.
Hier sind nun 3 Dateien die hoffentlich den Aufbau klarer machen, habe die Kabel versucht gerader zu verlegen.
Beim Bild mit dem Gesamtaufbau das Rote kabel was im GND vom arduino ist ist NICHT mit dem Widerstand oder ähnliches verbunden, es geht direkt an das Graue welches an das blaue geht. Das Blaue Kabel ist in die Masse des PC Netzteils eingesteckt. die 12 Volt dort an diesem Stecker ist ungebraucht. Ansonsten sollte es eigentlich klar sein.

Die Schaltung scheint richtig aufgebaut zu sein. Intuitiv würde ich auf eine schlechte Verbindung bzw Wackelkontakt der Verbindungen der einzelnen Kabslestücke untereinander, die Du mit Isolieband umwickelt hast, tippen.
Grüße Uwe

Hmm, also die Kabel habe ich immer in einem V verzwirbelt, lassen sich auch schwer auseinanderziehen.
Wenn ich in diesem Aufbau einfach den pin 40 rausstecke dann geht die Kathode auch wie gewünscht aus, stecke ich den stecker wieder in pin 40 und warte bis der Arduino den pin 40 auf HIGH schaltet leuchtet sie wieder.
Nur wenn ich beide eingesteckt lasse und der Arduino auf LOW schaltet, dann bleibt die lampe an, auch hier natürlich, sobald ich den pin 40 rausziehe geht die Kathode aus.
Noch irgend jemand eine Idee ?

Vieleicht solltest Du es mit dem einfachen blink Beispiel versuchen und das Gate auf Pin 13 schalten.
Grüße Uwe

Das auch. Den Code hast du von einer AVR Seite kopiert. Sieht man an den Headern, der main Methode oder der direkten Port-Ansteuerung.

AVR Sprachelemente ist manchmal nötig für Details, aber nicht für sowas einfaches.

@uwe
Wieso auf Pin 13 und welches blink meinst du? Ich habe nur dieses BlinkBlink demo wo die Power LED an bzw. aus geht.

@serenifly
Ja das war der BlinkBlink Demo code, den habe ich zum testen genommen. Allerdings war dort keine port ansteuerung, die habe ich nachträglich hinzugefügt.
Was meinst du mit "AVR Sprachelemente ist manchmal nötig für Details, aber nicht für sowas einfaches." ?

Die Arduino IDE bietet dir Abstraktionen für vieles. z.B. digitalWrite() statt direkten Zugriff auf die Port Register. Oder attachInterrupt() statt die Masken-Register anzusprechen. Du solltest diese Funktionen verwenden wenn sie ausreichen. DigitalWrite() ist zwar langsam, aber hier ist das lange gut. Direkten Zugriff auf die Register braucht man fast nur wenn man Pins ganz schnell oder gleichzeitig schalten will. Oder wenn man interne Funktionen wie die Timer oder den Analog-Komparator direkt programmiert.

Und die IDE macht für dich schon vieles im Hintergrund. Die brauchst die Standard Header nicht zu inkludieren. Und auch keine main() Methode und while(1) schreiben. Dafür gibt es loop().

Das kann so aussehen:

const int statusPower = 40;
const int LED = 13;

void setup()
{
    pinMode(statusPower, OUTPUT);
    pinMode(LED, OUTPUT);
}

void loop()
{  
      digitalWrite(statusPower, HIGH);
      digitalWrite(LED, HIGH);
      delay(5000);
      digitalWrite(statusPower, LOW);
      digitalWrite(LED, LOW);
      delay(5000);
      
}

prdatur:
@uwe
Wieso auf Pin 13 und welches blink meinst du? Ich habe nur dieses BlinkBlink demo wo die Power LED an bzw. aus geht.

Du geht in der Arduino IDE auf das Symbol "Öffnen" (Der Pfeil nach oben), gehts auf "01.Basics" und dort auf den Sketch "Blink".

Dieses Beispiel läßt die LED auf dem Board blinken, (die aber auch an Pin13 hängt.)
Wenn du also deinen Fet dann an Pin13 anschliesst, anstatt an Pin40, sollte deine externe Leuchte synchron zur Arduino LED blinken.
Und, denke dran: GND muss verbunden sein.

Hey mein blink blink geht :stuck_out_tongue: sogar mit grosser Kathode :slight_smile:

Habe nun mal das Blink example genutzt.
Minus vom Netzteil an irgend ein GND und dann einfach Gate mit dem 10kOhm wiederstand auf Pin 13. Funktioniert einwandfrei :stuck_out_tongue:
Bin ja fast stolz :stuck_out_tongue:

Ich danke euch allen für die Hilfreichen tipps, man lernt nun mal nie aus, warum allerdings das mit pin 40 nicht ging ist mir noch ein rätzel vlt wegen der komischen main function. oder dem direkt zugriff, habe nun nämlich den pin 40 mal mit aktiviert und es funktioniert hier dann genauso gut wie mit pin 13..

Nochmals vieeeeeelen dank, ein Christian mehr der glücklich ist :stuck_out_tongue:

Grüsse,
Christian

PS: Sehr nettes Forum was mich nicht gleich getötet hat mit meinen Kabelsalat :stuck_out_tongue: