Hallo Community,
ich stehe vor einem Problem und hoffe, dass jemand hier mir helfen kann. Mein Projekt beinhaltet die Steuerung eines Schrittmotors, um eine bestimmte Menge Flüssigkeit zu dosieren. Dies hat ohne Probleme funktioniert, als ich den Schrittmotor direkt mit dem Arduino angesteuert habe. Der Motor bewegte sich einwandfrei.
Nun habe ich ein LCD Keypad Shield (standardmäßige Pins für RS, E, D4, D5, D6, D7) hinzugefügt, um das Volumen auf dem Display anzuzeigen. Nachdem ich den Code angepasst habe, bewegt sich der Motor jedoch nicht mehr, obwohl der Bildschirm korrekt funktioniert.
Hier sind einige Details zu meinem Projekt:
- Ich verwende einen Schrittmotor mit Mikroschritten (16 Mikroschritte pro Schritt).
- Die Gesamtanzahl der Schritte pro Umdrehung beträgt 3.200 (3200 Schritte entsprechen 1 ml).
- Die Schrittmotorkonfiguration wurde mit
AccelStepper(Bibliothek) vorgenommen, und der Motor wird auf Pins 6 (DIR) und 5 (PUL) angeschlossen. - Der Treiber ist ein tb6600 mit 9-42V
- Der Steppermotor ein 42BYG mit 1.7 A Phase Current
Hier ist der ursprüngliche Code:
tippeconst int microsteps = 16; // Anzahl der Mikroschritte pro Schritt
const int fullStepsPerRevolution = 200; // Anzahl der vollen Schritte pro Umdrehung des Schrittmotors
const int stepsPerRevolution = microsteps * fullStepsPerRevolution; // Gesamtschritte pro Umdrehung einschließlich Mikroschritte
const int motorPin = 5; // Nur Pin 5 wird verwendet
void setup() {
// Konfiguration des Pins als Ausgang
pinMode(motorPin, OUTPUT);
}
void loop() {
// Bewegung des Schrittmotors, um das Volumen zu entleeren
float targetVolume = 5.0; // Das Zielvolumen, das entleert werden soll (in Millilitern)
int targetSteps = int(targetVolume * stepsPerRevolution);
// Bewege den Schrittmotor zuerst in die Richtung "Vorwärts"
for (int i = 0; i < targetSteps; i++) {
digitalWrite(motorPin, HIGH);
delayMicroseconds(500); // Setzen Sie die gewünschte Geschwindigkeit (Sie können dies anpassen)
digitalWrite(motorPin, LOW);
delayMicroseconds(500); // Setzen Sie die gewünschte Geschwindigkeit (Sie können dies anpassen)
}
// Hier können Sie weitere Aktionen hinzufügen, nachdem das Volumen entleert wurde
// Endlosschleife beenden
while (true) {
// Hier können Sie weitere Aktionen ausführen, wenn nötig
}
}
Hier ist der angepasste Code:
#include <LiquidCrystal.h>
#include <AccelStepper.h>
// Konfiguration für das LCD Keypad Shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Standardpins für RS, E, D4, D5, D6, D7
const int microsteps = 16; // Anzahl der Mikroschritte pro Schritt
const int fullStepsPerRevolution = 200; // Anzahl der vollen Schritte pro Umdrehung des Schrittmotors
const int stepsPerRevolution = microsteps * fullStepsPerRevolution; // Gesamtschritte pro Umdrehung einschließlich Mikroschritte
AccelStepper myStepper(1, 5, 6); // Pin 5 für PUL und Pin 6 für DIR
float targetVolume = 10.0; // Das Zielvolumen, das entleert werden soll (in Millilitern)
void setup() {
// Initialisierung des LCD
lcd.begin(16, 2); // 16 Zeichen x 2 Zeilen
// Konfiguration des Schrittmotors
myStepper.setMaxSpeed(500); // Setzen Sie die gewünschte Geschwindigkeit (Sie können dies anpassen)
myStepper.setAcceleration(100); // Setzen Sie die gewünschte Beschleunigung (Sie können dies anpassen)
// Berechnen der Schritte für das Zielvolumen
long targetSteps = long(targetVolume * stepsPerRevolution);
// Anzeigen des Zielvolumens auf dem LCD
lcd.setCursor(0, 0);
lcd.print("Target (ml): ");
lcd.print(targetVolume, 1); // 1 Dezimalstelle anzeigen
}
void loop() {
// Bewegung des Schrittmotors, um das Volumen zu entleeren
long targetSteps = long(targetVolume * stepsPerRevolution);
myStepper.moveTo(targetSteps);
while (myStepper.distanceToGo() != 0) {
myStepper.run();
}
// Endlosschleife beenden
while (true) {
// Hier können Sie weitere Aktionen ausführen, wenn nötig
}
}
Wenn ich den Schrittmotor direkt am Arduino anschließe, funktioniert er einwandfrei. Aber wenn das LCD Keypad Shield mit dem oben angegebenen Code angeschlossen ist, bewegt sich der Motor nicht, obwohl die LCD-Anzeige funktioniert.
Habe ich möglicherweise ein Problem mit der Verdrahtung oder gibt es eine mögliche Konfliktquelle im Code? Ich wäre für jeden Hinweis oder Ratschlag sehr dankbar.
Vielen Dank im Voraus für Ihre Unterstützung!