I'm using this stepper motor and trying to simply get it to rotate once every minute. It does fairly well, but after a while it gets a little too fast. After only a few rotations actually. This stepper has 64 steps and is geared down to 1/64 so it should have 4096 steps. And even when testing to make sure that it makes that number of steps every rotation, it is still off sync. I've also tested to make sure it is not the timer accuracy. I'm also certain that this isn't too fast for the motor, I've had it going much faster before.
long count = 0;
int lastStep = 0;
int curStep = 0;
void setup(){
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
Serial.begin(9600);
Serial.println("0");
}
void loop(){
delay(1);
curStep = (long) 7 - map(millis()%60000,0,59999,0,4095)%8;
if(millis()%60000==0){Serial.println(millis()/60000); Serial.println(count); count=0;}//report minutes and step count, reset step count
if(lastStep != curStep){lastStep=curStep; count++;}//count if step changes
switch(curStep){
case 0:
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
break;
case 1:
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
break;
case 2:
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
break;
case 3:
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(13,LOW);
break;
case 4:
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
digitalWrite(13,LOW);
break;
case 5:
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
break;
case 6:
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,HIGH);
break;
case 7:
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,HIGH);
break;
}
}
This is my code. Am I doing anything obviously wrong or is there anything I can troubleshoot? Thanks.