Error distancia recorrida de carro corredizo con motor Stepper

Hola, soy nuevo en esto de la programacion de arduino y estoy haciendo un actuador lineal con un carro corredizo usando un motor stepper nema 17 (1.7 A).
mi problema es que al darle una cierta cantidad de pasos para que el carro se mueva desde un punto HOME que es D=0 este se mueve hasta cierta distancia y se detiene, pero la distancia recorrida tiene 3,7 mm de mas, y necesito que la distancia sea mas precisa.
De antemano muchas gracias.

Mi codigo hasta el momento.

int STEP = 2; //pin encargado de los pasos (movimiento).
int DIR = 3;  //pin encargado de la direccion.
int VEL = 4;  //pin encargado de la velocidad.
int SWITCH = 8; //pin encargado del switch 
int D=0;
float t=1;
boolean x=true;
int lg=62;
int pasos= (400/62)*lg;

//pasos=(400/62)*long
//---------------------------------------------------------------------------------------------//
void setup() {
//señal digital:
//se declaran los pin 2, 3 y 4 como salida 
Serial.begin(9600);
pinMode(STEP, OUTPUT); //(pin, modo)
pinMode(DIR, OUTPUT); 
pinMode(VEL, OUTPUT);
//se escribe los valores logicos en los pin de salida
digitalWrite(STEP, LOW);//(pin, valor)
digitalWrite(DIR, LOW);
digitalWrite(VEL, LOW);
}
//---------------------------------------------------------------------------------------------------//
void loop() {
  
HOME();//se llama a la subrutina para que el carro quede en la posicion D=0
delay(1000);


  digitalWrite(DIR,HIGH);

  for(D=0; D<=800; D++){ 
  digitalWrite(STEP,HIGH);
  delay(t);
  digitalWrite(STEP,LOW);
  delay(t);   
  }
  
  D=0;
  delay(50000);
}
 





//------------------------------------------------------------------------------------------------//
//------------------------------------------------------------------------------------------------//
//subrutina de inicio:
              
void HOME(){
pinMode(STEP,OUTPUT);
pinMode(SWITCH,INPUT);
  

  while(x==true){
    digitalWrite(DIR,LOW);
    digitalWrite(STEP,HIGH);
    delay(t);
    digitalWrite(STEP,LOW);
    delay(t);
    D++;
   if (digitalRead(SWITCH)==HIGH){
    x=false; 
   }
    
   }
   D=23;           
}