I have a 12-volt, 6-wire stepper motor from an old scanner that I am running with an EasyDriver 4.4. After testing with a multimeter, I have found the 2 common wires, which I have ignored. The remaining four wires I have hooked up to the EasyDriver. I can get the motor to work quite nicely, but the problem is that it will not turn nearly as fast as it does in the scanner. I suspect that when this motor was used in the scanner, the other two wires enabled more advanced control of the motor.
Using Dan Thompson's stepper motor tutorial code as a base (see below), I can drive the motor as follows:
Full Step: Minimum Microseconds Delay is 1800
Half Step: Minimum Microseconds Delay is 1000
Quarter Step: Minimum Microseconds Delay is 500
Eighth Step: Minimum Microseconds Delay is 300
(Note that these values are all without and load or strain placed on the motor...it is just sitting on the workbench. Also, the motor is supplied with 12-volt external power.)
If I set the delay to less than these values, the motor just grinds and freezes. The speed I can achieve even at full step is a fraction of the speed that the motor can achieve in the scanner.
So, my question is: Is there anything I can do to improve how I drive the motor?
I suspect that this is a unipolar motor, that can be driven as if it is bipolar...is this the underlying problem causing slow speeds?
Alternately, is there a motor driver out there that could utilise all six of the leads?
// Based on code from Dan Thompson: 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
void setup()
{
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
digitalWrite(13, LOW); // MS1 ...These two lines set
digitalWrite(9, HIGH); // MS2 ...it to 1/4 stepping
}
void loop()
{
int i;
digitalWrite(DIR, LOW);
delay(5000);
for (i = 0; i<5000; i++)
{
digitalWrite(STEP, LOW);
digitalWrite(STEP, HIGH);
delayMicroseconds(500);
}
}