I have used the great tutorial from Dan Thompson. http://danthompsonsblog.blogspot.com/2010/05/easydriver-42-tutorial.html
I have built the breadboard identically as per
however the only difference is the stepper motor that I am using and my external power supply to the EasyDriver board.
My stepper motor is... 4 Lead Bipolar Hybrid Stepper Motor ETS535 Step Angle: 0.9d full step Rated Voltage 4.25Vdc Rated Current 0.425A/phase Winding Resistance 10ohms Holding Torque 7.5N-cm Step Accuracy 5% Rotor Inertia 15g-cm2
The power supply is a 9v 0.6A 5.4W Max as supplied by oomlout. http://www.oomlout.co.uk/wall-power-adapter-9v-600-ma-p-236.html
As my motor is a 400 step (360/0.9) and not the one in Dan's example 200(360/1.8) I am having a little difficulty understand how to control the stepper at different speeds. I have played with changing
while(i<(modeType*200))
to replace 200 with 400
and also changing
delayMicroseconds(1600/modeType)
to replace 1600 with 3200
These changes do slow the motor down but no as much as I would like.
I am really looking to have a really slow speed of say 1 step(0.9deg) per second when Step Mode is Eighth, and then 2 steps when Step Mode is Quarter, 4 steps when Step Mode is Half and finally 8 steps when Step Mode is Full.
I have no idea of achieving this. Can someone help this poor little old newbie tweak the code.
PS, when running the code below the A3967 on the EasyDriver board gets very very hot, is this right or should it be cooler. The current adjuster pot on the EasyDriver board is set at the mid point between Min and Max
///////////////////////////////////////////////////////////
// Stepper Motor skecth for use with the EasyDriver v4.2 //
///////////////////////////////////////////////////////////
// Dan Thompson 2010
//
// Use this code at your own risk.
//
// For all the product details visit http://www.schmalzhaus.com/EasyDriver/
// For the full tutorial visit http://danthompsonsblog.blogspot.com/
////// ED_v4 Step Mode Chart //////
// //
// MS1 MS2 Resolution //
// L L Full step (2 phase) //
// H L Half step //
// L H Quarter step //
// H H Eighth step //
// //
////////////////////////////////////
int DIR = 3; // PIN 3 = DIR
int STEP = 2; // PIN 2 = STEP
int MS1 = 13; // PIN 13 = MS
int MS2 = 9; // PIN 9 = MS2
int SLEEP = 12; // PIN 12 = SLP
void setup() {
Serial.begin(9600); // open the serial connection at 9600bps
pinMode(DIR, OUTPUT); // set pin 3 to output
pinMode(STEP, OUTPUT); // set pin 2 to output
pinMode(MS1, OUTPUT); // set pin 13 to output
pinMode(MS2, OUTPUT); // set pin 9 to output
pinMode(SLEEP, OUTPUT); // set pin 12 to output
}
void loop()
{
int modeType = 1; // This number increases by multiple of 2 each through the while loop..
// ..to identify our step mode type.
while (modeType<=8){ // loops the following block of code 4 times before repeating .
digitalWrite(DIR, LOW); // Set the direction change LOW to HIGH to go in opposite direction
digitalWrite(MS1, MS1_MODE(modeType)); // Set state of MS1 based on the returned value from the MS1_MODE() switch statement.
digitalWrite(MS2, MS2_MODE(modeType)); // Set state of MS2 based on the returned value from the MS2_MODE() switch statement.
digitalWrite(SLEEP, HIGH); // Set the Sleep mode to AWAKE.
int i = 0; // Set the counter variable.
while(i<(modeType*200)) // Iterate for 200, then 400, then 800, then 1600 steps.
// Then reset to 200 and start again.
{
digitalWrite(STEP, LOW); // This LOW to HIGH change is what creates the..
digitalWrite(STEP, HIGH); // .."Rising Edge" so the easydriver knows to when to step.
delayMicroseconds(1600/modeType); // This delay time determines the speed of the stepper motor.
// Delay shortens from 1600 to 800 to 400 to 200 then resets
i++;
}
modeType = modeType * 2; // Multiply the current modeType value by 2 and make the result the new value for modeType.
// This will make the modeType variable count 1,2,4,8 each time we pass though the while loop.
delay(500);
}
digitalWrite(SLEEP, LOW); // switch off the power to stepper
Serial.print("SLEEPING..");
delay(1000);
Serial.print("z");
delay(1000);
Serial.print("z");
delay(1000);
Serial.print("z");
delay(1000);
Serial.println("");
digitalWrite(SLEEP, HIGH);
Serial.println("AWAKE!!!"); // Switch on the power to stepper
delay(1000);
}
int MS1_MODE(int MS1_StepMode){ // A function that returns a High or Low state number for MS1 pin
switch(MS1_StepMode){ // Switch statement for changing the MS1 pin state
// Different input states allowed are 1,2,4 or 8
case 1:
MS1_StepMode = 0;
Serial.println("Step Mode is Full...");
break;
case 2:
MS1_StepMode = 1;
Serial.println("Step Mode is Half...");
break;
case 4:
MS1_StepMode = 0;
Serial.println("Step Mode is Quarter...");
break;
case 8:
MS1_StepMode = 1;
Serial.println("Step Mode is Eighth...");
break;
}
return MS1_StepMode;
}
int MS2_MODE(int MS2_StepMode){ // A function that returns a High or Low state number for MS2 pin
switch(MS2_StepMode){ // Switch statement for changing the MS2 pin state
// Different input states allowed are 1,2,4 or 8
case 1:
MS2_StepMode = 0;
break;
case 2:
MS2_StepMode = 0;
break;
case 4:
MS2_StepMode = 1;
break;
case 8:
MS2_StepMode = 1;
break;
}
return MS2_StepMode;
}