Liebes Forum,
vor kurzem habe ich das iTead dual Stepper Motor Driver Shield gekauft. Leider bin ich auf unvorhergesehenes Verhalten gestoßen, zu dem ihr vielleicht die Ursache oder eine Lösung habt. Vielleicht ist ja auch mein Shield defekt.
Setup 1: Ein Stepper hängt am Y-Ausgang, die einzige Stromquelle ist der USB-Anschluß am Arduino Uno SMD. Der Stepper tut was er soll, nur der Arduino wird in der Nähe der externen Strombuchse (die nicht angeschlossen ist) sehr heiß.
Setup 2: Nach dem Anschließen einer externen Stromversorgung an das Shield (12V, 1500mA max.) und dem Neustart des Arduino beginnt der Stepper Schritte zu verlieren. Der Arduino wird weiterhin heiß. Auch die beiden Chips auf dem Shield werden heiß (normal?)
Setup 3: Der zweite Stepper ist angeschlossen, Schield und Arduino haben nur über USB Strom. Obwohl der zweite Stepper im Programm nicht angesprochen wird, zuckt er ab und zu. Der benutzte Stepper verliert viele Scritte. Die Hitzeprobleme bleiben.
Setup 4: Wie Setup 3, nur mit einer Stromversorgung am Schield. Die Probleme bleiben wir bei 3.
Auch das Hinzuschalten einer zweiten Stromversorgung am Arduino oder nur am Arduino ändern nichts.
Hier das Programm, das ich zum Testen verwendet habe. Die Einstellungen des Shields sind unverändert im Auslieferungszustand (5V für Logik, Vref-Potis sind in Mittelposition, alle Jumper liegen auf High).
Hinweis: Der iTead wird NICHT durch Berührung mit der USB-Buchse des Arduino kurzgeschlossen.
Danke, Stefan.
// ******************************************************
// Micro Robotics
// Test Procedure to test Y channel
// www.robotics.org.za
// written by : Frikkie du Toit
// For Stepper Shield ver 1.0
//
// To test Y Channel To test X Channel
// STEP_PIN 6 STEP_PIN 2
// DIR_PIN 7 DIR_PIN 3
// YMS1 8 YMS1 4
// YMS2 9 YMS2 5
// ******************************************************
#define STEP_PIN 6
#define DIR_PIN 7
#define YMS1 8
#define YMS2 9
void step_mode(byte yms1, byte yms2)
{
// Set the pins to select the step mode
digitalWrite(YMS1, yms1); // Set pin YMS1 to the parameter given
digitalWrite(YMS2, yms2); // Set pin YMS2 to the parameter given
}
void step(int steps, float speed)
{
// Take the amount of steps specified
// Negative value for opposite direction
byte dir;
float micro_sec_delay;
if (steps > 0) // If steps are positive
{
dir = HIGH; // Set direction
}
else // If steps are negative
{
dir = LOW; // Set direction
}
steps = abs(steps); // Set steps to absolute value
digitalWrite(DIR_PIN, dir); // Set the direction pin to dir
micro_sec_delay = 1 / (speed / 100) * 70; // Calculate delay between step pin toggles
for (int i = 0; i < steps; i++)
{
// Takes all the steps in the specified direction
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(micro_sec_delay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(micro_sec_delay);
}
}
void setup()
{
// Set all the pin modes
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(YMS1, OUTPUT);
pinMode(YMS2, OUTPUT);
}
void loop()
{
step_mode(LOW, HIGH);
step(400, 25);
delay(500);
step(200, 25);
delay(500);
step(200, 25);
delay(500);
step(200, 25);
delay(500);
step(-800, 10);
delay(500);
}