I just bought a new stepper motor (400 steps for revolution, 0.9°/step) and I would like make a turn of 180° by 200 steps, but it doesn't work as expected. It looks like the motor needs only 110 steps to make a turn of 180° and I don't know the cause. The driver motors is the Keyes L298. It is wired to my Arduino UNO rev3.
In order to clarify, please see the image below:
The code is as follows:
#define negativeSteps -55
#define positiveSteps 55
#define Speed 7500
int motorPin1 = 11;
int motorPin2 = 10;
int motorPin3 = 9;
int motorPin4 = 8;
int steps;
unsigned int tmp2;
byte modeR[] = {B00001001, B00001010, B00000110, B00000101};
byte modeF[] = {B00000101, B00000110, B00001010, B00001001};
void setup() {
Serial.begin(115200); //Opens serial connection at 115200 baud.
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);
pinMode(3,OUTPUT); // Enable pin motorA
pinMode(2,OUTPUT); // Enable pin motorB
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
}
void loop()
{
while (Serial.available())
{
char cmd = (char)Serial.read();
if (cmd == 's') while(1) Seek();
}
}
void motorR(){
int bitMask=B00001111; // bitmask to modify only last 4 bit
for (int id = 0; id <4; id++) {
PORTB = (PORTB &~bitMask) | modeR[id];
while (tmp2++<Speed);
tmp2=0;
}
}
void motorF(){
int bitMask=B00001111; // bitmask to modify only last 4 bit
for (int id = 0; id <4; id++) {
PORTB = (PORTB &~bitMask) | modeF[id];
while (tmp2++<Speed);
tmp2=0;
}
}
void Seek() {
steps = negativeSteps; //Init Steps
while (1)
{
while (steps<positiveSteps) // starts from "negative" steps to "positive" steps ( -55 to +55)
{
if (steps<0) motorF(); // if steps = 0 it will change the direction
else motorR();
Serial.println(steps);
steps++;
}
}
}