Arduino vor zu viel Ausgangsstrom schützen

Hallo!

Ich möchte mit einem Arduino Nano verschiedene Module betreiben.
Dazu gehören:

BYJ48 Schrittmotor
L293D Motor Treiber
DS3231 Echtzeituhr-Modul
Infineon Hall-Sensor

Die Energieversorgung erfolgt von einem 12V 2A Netzteil über einen MP1584 DC-DC Buck Converter, der auf 5V eingestellt ist.

Den Aufbau könnt ihr auch im Bild sehen (Problem_Arduino.png):

Der Code zum Testen des Motors sieht folgendermaßen aus:

// Arduino Stepper Beispiel Code
#include <Stepper.h>

const int stepsPerRevolution = 4096;

Stepper myStepper(stepsPerRevolution, 2, 3, 4, 5);

void setup() {
  myStepper.setSpeed(60);
}

void loop() {
  myStepper.step(stepsPerRevolution);
  delay(500);

  myStepper.step(-stepsPerRevolution);
  delay(500);
}

Nun zu meinem eigentlichen Problem:
Zum Testen des Motors habe ich den Arduino via USB programmiert und das Kabel stecken gelassen. Dann habe ich den 12V Netzstecker reingesteckt und dann den Motor verbunden. Soweit funktioniert auch alles.

Am nächsten Tag wollte ich einen anderen Sketch ausprobieren und habe einen Fehler gemacht:
Der Motor war angeschlossen, das Netzteil nicht. Also habe ich das USB Kabel verbunden, um den Arduino zu programmieren. Ich vermute, dass der Motor Treiber dann zu viel Strom aus dem +5V Pin des Arduino gezogen hat und somit der Arduino kaputt gegangen ist. Es hat auch ein bisschen gestunken.
Den Arduino werde ich nun durch einen neuen ersetzen.

Um das Problem in Zukunft vorzubeugen möchte ich meine Schaltung ändern. Das Ziel soll sein, dass ich den Arduino programmieren kann

  • mit angeschlossenem Motor und
  • ohne angeschlossene 12V Versorgung

Dazu sind mir drei Ideen gekommen:

1. Eine Diode, die den Arduino schützt (Idee_Diode.png)

Idee: Mit einer Diode vom Buck Converter zum Arduino soll nur Strom in den Arduino fließen. Die Bauteile werden nie über den Arduino sondern immer über den externen Netzanschluss versorgt. Wenn der Arduino also am USB Port angeschlossen ist, kann er keine 5V über den +5V Anschluss ausgeben sondern nur programmiert werden. Wenn der Arduino nur über das Netzteil funktionieren kann wäre für meinen Anwendungsfall okay.

Mögliches Problem: Über der die Diode fällt eine Vorwärtsspannung ab und am Arduino liegen weniger als 5V an. Das könnte ein Problem sein?

2. Ein Transistor der erkennt, ob das Netzteil angeschlossen ist (Idee_Transistor.png)

Idee: Die Basis eines Transistors wird direkt an die 12V Versorgung des Netzteils angeschlossen. Am Kollektor liegen 5V vom Buck Converter an und der Emitter ist an einen digital-Pin vom Arduino angeschlossen. Über den digitalen Pin kann nun geprüft werden, ob das Netzteil angeschlossen ist oder nicht. Wahrscheinlich sind dafür noch ein Pull-Down Widerstand und ein Basis-Vorwiderstand erforderlich?

void setup() {
  pinMode(8, INPUT);
  while(digitalRead(8) == LOW) {
  // mache nichts
  }
}

Mögliches Problem: Ich weiß nicht, ob an der Eingangsseite vom Buck Converter eine Spannung anliegt, wenn am Ausgang 5V vom Arduino anliegen. Wenn das der Fall ist würde der Transistor immer schalten.

3. Arduino über VIN versorgen (Idee_VIN.png)

Die Spannungsversorgung vom Arduino erfolgt über den VIN Pin direkt vom Netzteil. Die Bauteile werden von dem 5V Pin versorgt. Lediglich der Anschluss "VCC für Motor" wird über den Buck Converter versorgt.

Mögliches Problem: Die maximale VIN-Grenze für den Arduino liegt bei 12V. Das könnte der Arduino überlasten. Statt dem 12V Netzteil könnte ich jedoch ein 9V Netzteil benutzen.

Ich würde mich sehr über eine Lösung oder Anmerkungen zu meinen Ideen freuen.

Hi,

bevor der Arduino in den Schrott geht, prüfe mal, ob der noch über den 5V-Pin läuft, also ganz direkt, ohne über den USB und der vermutlich durchgebrannten Schutzdiode. Letztere trennt die 5V des Arduino vom USB, daß auf Rechner-Seite nichts kaputt geht. Aber Achtung, USB und 5V am 5V-Pin nicht gleichzeitig anschließen, oder dafür sorgen, daß der Arduino keine +5V vom PC bekommen kann!

Gruß André

Hallo André,
danke für deine Antwort!

SpaghettiCode:
bevor der Arduino in den Schrott geht, prüfe mal, ob der noch über den 5V-Pin läuft, also ganz direkt, ohne über den USB und der vermutlich durchgebrannten Schutzdiode. Letztere trennt die 5V des Arduino vom USB, daß auf Rechner-Seite nichts kaputt geht.

Ich habe gerade mal versucht, bei angeschlossenem Motor das Netzteil einzustecken. Leider ist der Motor nicht gelaufen. Um ehrlich zu sein weiß ich aber auch nicht genau, welchen Sketch ich hochgeladen hatte bevor nichts mehr funktioniert hat. Deshalb kann ich nicht wirklich prüfen, ob der Arduino doch noch funktioniert. Die "ON"-LED am Board leuchtet zumindest. Das tut sie aber auch, wenn ich den Arduino über USB anschließe. Außerdem ist mir aufgefallen, dass der USB-Port am Arduino sehr schnell ziemlich heiß wird, sobald USB oder Netzteil eingesteckt sind.

SpaghettiCode:
Aber Achtung, USB und 5V am 5V-Pin nicht gleichzeitig anschließen, oder dafür sorgen, daß der Arduino keine +5V vom PC bekommen kann!

Warum darf ich das nicht machen? Kann ich so den Port an meinem PC beschädigen?

ArduinoOnFire:
Warum darf ich das nicht machen? Kann ich so den Port an meinem PC beschädigen?

Nicht unbedingt den PC aber den Arduino.

Fertige dir ein spezielles USB-Programmierkabel an, an dem du die 5-Volt-Leitung durchtrennst.
Dann kannst du deinen Arduino immer mit externer Spannung speisen und das USB-Kabel angeschlossen lassen.

HotSystems:
Nicht unbedingt den PC aber den Arduino.

Fertige dir ein spezielles USB-Programmierkabel an, an dem du die 5-Volt-Leitung durchtrennst.
Dann kannst du deinen Arduino immer mit externer Spannung speisen und das USB-Kabel angeschlossen lassen.

Hallo HotSystems, das ist eine super Idee! Dankeschön!

SpaghettiCode:
Hi,

bevor der Arduino in den Schrott geht, prüfe mal, ob der noch über den 5V-Pin läuft, also ganz direkt, ohne über den USB und der vermutlich durchgebrannten Schutzdiode. Letztere trennt die 5V des Arduino vom USB, daß auf Rechner-Seite nichts kaputt geht.

Kontrollier man das was SpaghettiCode vorschlägt.
Grüße Uwe

uwefed:
Kontrollier man das was SpaghettiCode vorschlägt.
Grüße Uwe

Hallo Uwe, danke für deine Antwort!
Das habe ich gemacht und hier geschrieben was passiert ist:

ArduinoOnFire:
Ich habe gerade mal versucht, bei angeschlossenem Motor das Netzteil einzustecken. Leider ist der Motor nicht gelaufen. Um ehrlich zu sein weiß ich aber auch nicht genau, welchen Sketch ich hochgeladen hatte bevor nichts mehr funktioniert hat. Deshalb kann ich nicht wirklich prüfen, ob der Arduino doch noch funktioniert. Die "ON"-LED am Board leuchtet zumindest. Das tut sie aber auch, wenn ich den Arduino über USB anschließe. Außerdem ist mir aufgefallen, dass der USB-Port am Arduino sehr schnell ziemlich heiß wird, sobald USB oder Netzteil eingesteckt sind.

Das meinte SpaghettiCode doch, oder?

Gruß
Michael