Duda con motores paso a paso

Hola, he estado trabajando en un proyecto que utiliza tres motores paso NEMA 57HS13 (1.8º por paso) y para hacerlos funcionar he utilizado la libreria stepper, pero note que cada vez que los motores completan una vuelta, se escucha un golpeteo, asi que me decidi a hacerlo con delays, y de esta forma los motores trabajan excelente, lo malo que al usar los delay el programa se detiene cada vez que se usan. He intentado utilizar la función millis() para tratar de realizar un timer, pero obtuve el mismo resultado que con la librería stepper, que por alguna razón que desconzco los motores hacen ese golpeteo despues de cada revolución. Bueno les dejo anexado los códigos que he estado usando.

Programa con librería Stepper:

#include <Stepper.h>

Stepper stepper_X(200, 8, 9); //Entrada de datos driver X
Stepper stepper_Y(200, 10, 11); //Entrada de datos driver Y
Stepper stepper_Z(200, 6, 7); //Entrada de datos driver Z

int ENX = 5; //Enable X
int ENY = 4; //Enable Y
int ENZ = 3; //Enable Z


void setup()
{
  //Se establece las salidas de los enables
  pinMode(ENX, OUTPUT);
  pinMode(ENY, OUTPUT);
  pinMode(ENZ, OUTPUT);
  
  //Enables en alto para activar el driver
  digitalWrite(ENX, HIGH);
  digitalWrite(ENY, HIGH);
  digitalWrite(ENZ, HIGH);
  
  //Funciones para establecer la velocidad de los motores paso
  stepper_X.setSpeed(120);
  stepper_Y.setSpeed(54);
  stepper_Z.setSpeed(150);
 
}

void loop()
{
  
  stepper_X.step(-1);
  stepper_Y.step(1);
  stepper_Z.step(-1);
  
}

Programa con delay (En este caso solo he agregado la etapa de un motor, solo como ejemplo):

int ENX = 5;
int ENY = 4;
int ENZ = 3;
int mSecPaso=2000;

void setup()
{
  //Enables
  pinMode(ENX, OUTPUT);
  pinMode(ENY, OUTPUT);
  pinMode(ENZ, OUTPUT);
  
  //Salidas motor 1
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  
  //Salidas motor 2
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  
  //Salidas motor 3
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  
  digitalWrite(ENX, HIGH);
  digitalWrite(ENY, LOW);
  digitalWrite(ENZ, LOW);
  
  
 
}

void loop()
{
 digitalWrite(8, LOW);
 digitalWrite(9, LOW);
 delayMicroseconds(mSecPaso);
 digitalWrite(8, HIGH);
 digitalWrite(9, LOW);
 delayMicroseconds(mSecPaso);
 digitalWrite(8, HIGH);
 digitalWrite(9, HIGH);
 delayMicroseconds(mSecPaso);
 digitalWrite(8, LOW);
 digitalWrite(9, HIGH);
 delayMicroseconds(mSecPaso);
}

Programa utilizando millis():

int ENX = 5;
int ENY = 4;
int ENZ = 3;
unsigned long previousMillis = 0;
const long interval = 2; //milisegundos

const int bob1= 8;
const int bob2 = 9;

const int bob3 = 10;
const int bob4 = 11;

int bobState1 = LOW;
int bobState2= LOW;

int bobState3 = LOW;
int bobState4= LOW;

void setup()
{
  
 
  //Enables
  pinMode(ENX, OUTPUT);
  pinMode(ENY, OUTPUT);
  pinMode(ENZ, OUTPUT);
  
  //Salidas motor 1
  pinMode(bob1, OUTPUT);
  pinMode(bob2, OUTPUT);
  
  //Salidas motor 2
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  
  //Salidas motor 3
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  
  digitalWrite(ENX, LOW);
  digitalWrite(ENY, LOW);
  digitalWrite(ENZ, LOW);
  
}

void loop(){
  unsigned long currentMillis = millis();
       
      if(currentMillis - previousMillis >= interval)
      {
       previousMillis = currentMillis;
       //////////////////////////////////////////
       if (bobState1 == LOW || bobState2 == HIGH)
       {
         if(bobState1 == LOW && bobState2 == LOW)
          {
          bobState1 = HIGH;
          bobState2 = LOW;        
          }
         if(bobState1 ==LOW && bobState2 == HIGH)
          {
            bobState1 = LOW;
            bobState2 = LOW;         
          }
          if(bobState1 == HIGH && bobState2 == HIGH)
          { 
            bobState1 = LOW;
            bobState2 = HIGH;           
          }
          
         } 
       
       else
       {
        bobState1 = HIGH;
        bobState2 = HIGH;
       }
       digitalWrite(bob1, bobState1);
       digitalWrite(bob2, bobState2);
       
       //MOTOR Y
       if (bobState3 == LOW || bobState4 == HIGH)
       {
         if(bobState3 == LOW && bobState4 == LOW)
          {
          bobState3 = HIGH;
          bobState4 = LOW;
          }
         if(bobState3 ==LOW && bobState4 == HIGH)
          {
            bobState3 = LOW;
            bobState4 = LOW;
          }
          if(bobState3 == HIGH && bobState4 == HIGH)
          { 
            bobState3 = LOW;
            bobState4 = HIGH;
          }
          
         } 
       
       else
       {
        bobState3 = HIGH;
        bobState4 = HIGH;
       }
       
       digitalWrite(bob3, bobState3);
       digitalWrite(bob4, bobState4);
       
     }
  
}

Entonces mi pregunta es, ¿Se puede realizar una función parecida a delay, solo que esta sea un temporizador de la siguiente forma?

digitalWrite(8, LOW);
digitalWrite(9, LOW);
timer(mSecPaso);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
timer(mSecPaso);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
timer(mSecPaso);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
timer(mSecPaso);

Nota:
El driver que utilizo para los motores es el siguiente (utilizo tres de esos, uno para cada motor):

Donde:

ENAB = Pin 5, Pin 4 y Pin 3 en arduino.
D1 = pin 8, pin 10 y pin 6 en arduino.
D2 = pin 9, pin 11 y pin 7 en arduino.

Cualquier respuesta se agradece.