PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was fehlt hier? (Schrittmotorsteuerung)



martfilm
28.03.2013, 14:51
Moin Moin
Ich bin Filme Macher und neu auf dem Gebiet
ich möchte eine Kamera für eine Zeitrafferaufnahme mit einem Schrittmotor so langsam wie möglich drehen
ich habe mir diesen hier gekauft http://www.ebay.de/itm/2in1-DC-5V-Stepper-Step-Motor-ULN2003-Driver-Test-Module-Board-5-Line-4-Phase-/261172331689?pt=Bauteile&hash=item3ccf1584a9
und dazu ein adruino uno
ich möchte ihn mit dem unten angegebenen Programmcode steuern, wenn ich ihn anschalte beginnt er auch zu vibrieren dreht sich aber, egal was ich eingebe nicht! weiß jemand was fehlt? oder gibt es irgendjemanden der den code vervollständigen kann?
der Code stammt von
http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino

Viele Grüße und schon mal vielen dank

Marc


int Pin0 = 10;
int Pin1 = 11;
int Pin2 = 12;
int Pin3 = 13;
int _step = 0;
boolean dir = true;// gre
void setup()
{
pinMode(Pin0, OUTPUT);
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
}
void loop()
{
switch(_step){
case 0:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
case 1:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, HIGH);
break;
case 2:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 3:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 4:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 5:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 6:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 7:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
default:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
}
if(dir){
_step++;
}else{
_step--;
}
if(_step>7){
_step=0;
}
if(_step<0){
_step=7;
}
delay(1);
}

Geistesblitz
28.03.2013, 22:53
Hast du die Pins denn auch in der richtigen Reihenfolge angeschlossen? Wenn da ein paar Pins vertauscht sind, dann kann da auch nichts sinnvolles herauskommen. Wie genau du die einstecken musst, das musst du aber selber herausfinden.

robo_tom_24
01.04.2013, 01:46
Bist du sicher, dass du nur rund 1ms warten solltest? Dann müsstest du in 7ms eine Umdrehung gemacht haben -> 142 U/s => ~8500 U/min
Ich denke nicht, dass das deine gewünschte Drehzahl ist ;)

Geistesblitz
01.04.2013, 12:58
Stimmt nicht ganz, dann macht er in 8ms eine elektrische Umdrehung, also 4 Vollschritte. Bei 64 Schritten pro Umdrehung wäre das also 128ms für eine Umdrehung, womit man dann eine Drehzahl von ~469 U/min erhält (bzw. 7,3 U/min hinter dem Getriebe). Sollte also eigentlich im Rahmen liegen. Ich frag mich nur, warum die Schaltfolge für den Schrittmotortreiber vom µC generiert werden soll, denn für diese Aufgabe gibts doch auch schon fertige ICs (zB. den L297). Aber wenn der µC nicht so viel anderes machen braucht ist es durchaus gerechtfertigt, sich das Geld so für ein zusätzliches Bauteil zu sparen.

robo_tom_24
01.04.2013, 13:00
Ok, dann hab ich das falsch verstaden...
;)