Приобрел недавно драйвер шагового двигателя DM420A
http://www.longs-motor.com/produ...l_12_80_148.html
Так же шаговый двигатель 17HS8401.
Отсюда скачал прошивку управления двумя шаговыми двигателями для ардуины
http://www.cerebralmeltdown.com/...d-to-an-arduino/
Подключил все это дело и ничего не работает)
Потом подключил светодиоды на pin4 (step), pin5 (dir), pin6 (enable) и вот что получилось.
http://vimeo.com/56631417
Конечно, извиняюсь за качество, но зеленый - это ENABLE; красный слева - это DIR; красный справа - это STEP.
Это вообще нормально? Кто-нибудь знает как работать со step/dir/enable?
Помогите пожалуйста разобраться.
Вот код программы
CODE:
//TWO WIRE STEP/DIR DRIVER BOARD CODE
int Motor1StepPin = 4;
int Motor1DirPin = 5;
int Motor2StepPin = 2;
int Motor2DirPin = 3;
//The number of steps required for your stepper to make one revolution. (Don't forget to take into
//account the settings on your driver board. i.e. Microstepping, half stepping etc.)
float steps = 96;
//Set the travel speed for your stepper motors here. (In Rev/Min)
//Note: There is a limit to how fast or slow this code is able to spin the stepper motors.
//You can try experimenting with the "delayMicroseconds" code if you need different speeds.
int altSpeed=60;
int azSpeed=60;
////////////////////////////////
float Motor1Delay, Motor2Delay, doSteps;
void setup()
{
Serial.begin(9600);
////////////////////////////////
//TWO WIRE STEP/DIR DRIVER BOARD CODE
pinMode(Motor1StepPin, OUTPUT);
pinMode(Motor1DirPin, OUTPUT);
pinMode(Motor2StepPin, OUTPUT);
pinMode(Motor2DirPin, OUTPUT);
Motor1Delay = ( 1000000 * ( 60 / (steps * altSpeed) ) ) / 2;
Motor2Delay = ( 1000000 * ( 60 / (steps * azSpeed) ) ) / 2;
////////////////////////////////
pinMode(6, OUTPUT);
// pinMode(7, OUTPUT);
// pinMode(13, OUTPUT);
}
void loop()
{
delay(1000);
digitalWrite(6, LOW);
delay(100);
moveToPosition(1, 0, -steps * 1);
moveToPosition(1, 0, steps * 1);
moveToPosition(1, -steps * 1, 0);
moveToPosition(1, steps * 1, 0);
digitalWrite(6, HIGH);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This code moves the stepper motors
void moveToPosition(int limitSearch, long altsteps, long azsteps){
// Serial.println("altsteps");
// Serial.println(altsteps);
// Serial.println("azsteps");
// Serial.println(azsteps);
////////////////////////////////
//TWO WIRE STEP/DIR DRIVER BOARD CODE
if (abs(azsteps)==azsteps){digitalWrite(Motor2DirPin, HIGH);}else{digitalWrite(Motor2DirPin, LOW);}
if (abs(altsteps)==altsteps){digitalWrite(Motor1DirPin, HIGH);}else{digitalWrite(Motor1DirPin, LOW);}
for (doSteps=1; doSteps <= abs(azsteps); doSteps++){
digitalWrite(Motor2StepPin, HIGH);
delayMicroseconds(int(Motor2Delay));
digitalWrite(Motor2StepPin, LOW);
delayMicroseconds(int(Motor2Delay));
}
for (doSteps=1; doSteps <= abs(altsteps); doSteps++){
digitalWrite(Motor1StepPin, HIGH);
delayMicroseconds(int(Motor1Delay));
digitalWrite(Motor1StepPin, LOW);
delayMicroseconds(int(Motor1Delay));
}
}
int Motor1StepPin = 4;
int Motor1DirPin = 5;
int Motor2StepPin = 2;
int Motor2DirPin = 3;
//The number of steps required for your stepper to make one revolution. (Don't forget to take into
//account the settings on your driver board. i.e. Microstepping, half stepping etc.)
float steps = 96;
//Set the travel speed for your stepper motors here. (In Rev/Min)
//Note: There is a limit to how fast or slow this code is able to spin the stepper motors.
//You can try experimenting with the "delayMicroseconds" code if you need different speeds.
int altSpeed=60;
int azSpeed=60;
////////////////////////////////
float Motor1Delay, Motor2Delay, doSteps;
void setup()
{
Serial.begin(9600);
////////////////////////////////
//TWO WIRE STEP/DIR DRIVER BOARD CODE
pinMode(Motor1StepPin, OUTPUT);
pinMode(Motor1DirPin, OUTPUT);
pinMode(Motor2StepPin, OUTPUT);
pinMode(Motor2DirPin, OUTPUT);
Motor1Delay = ( 1000000 * ( 60 / (steps * altSpeed) ) ) / 2;
Motor2Delay = ( 1000000 * ( 60 / (steps * azSpeed) ) ) / 2;
////////////////////////////////
pinMode(6, OUTPUT);
// pinMode(7, OUTPUT);
// pinMode(13, OUTPUT);
}
void loop()
{
delay(1000);
digitalWrite(6, LOW);
delay(100);
moveToPosition(1, 0, -steps * 1);
moveToPosition(1, 0, steps * 1);
moveToPosition(1, -steps * 1, 0);
moveToPosition(1, steps * 1, 0);
digitalWrite(6, HIGH);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This code moves the stepper motors
void moveToPosition(int limitSearch, long altsteps, long azsteps){
// Serial.println("altsteps");
// Serial.println(altsteps);
// Serial.println("azsteps");
// Serial.println(azsteps);
////////////////////////////////
//TWO WIRE STEP/DIR DRIVER BOARD CODE
if (abs(azsteps)==azsteps){digitalWrite(Motor2DirPin, HIGH);}else{digitalWrite(Motor2DirPin, LOW);}
if (abs(altsteps)==altsteps){digitalWrite(Motor1DirPin, HIGH);}else{digitalWrite(Motor1DirPin, LOW);}
for (doSteps=1; doSteps <= abs(azsteps); doSteps++){
digitalWrite(Motor2StepPin, HIGH);
delayMicroseconds(int(Motor2Delay));
digitalWrite(Motor2StepPin, LOW);
delayMicroseconds(int(Motor2Delay));
}
for (doSteps=1; doSteps <= abs(altsteps); doSteps++){
digitalWrite(Motor1StepPin, HIGH);
delayMicroseconds(int(Motor1Delay));
digitalWrite(Motor1StepPin, LOW);
delayMicroseconds(int(Motor1Delay));
}
}