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.