Ciao,
il problema credo che stia nel fatto che non utilizzi correttamente la libreria (credo tu stia utilizzando airspayce.com AccelStepper).
Leggiti bene come funziona, non capisco perché abiliti e disabiliti tu il pin dell'enable del driver, fallo fare alla libreria se è proprio necessario! (vedi setEnablePin()) se il driver necessita di enable invertito dillo alla libreria (vedi setPinsInverted), è superfluo che setti tu i pin ad OUTPUT, lo fa la libreria, poi utilizzi la variabile S1_escursione che non ho ben capito a cosa serve, perché dopo 300 iterazioni della funzione loop() disabiliti il driver? (300 iterazioni è un tempo brevissimo, sicuro sia quello che vuoi fare?), poi i motori vanno frenati con la funzione stop() non bloccati disabilitando il driver altrimenti non utilizzerai mai le funzioni di accelerazione e decelerazione (abilitare il driver con un segnale di step già avviato potrebbe far perdere passi al motore se la frequenza è abbastanza alta), la funzione runSpeed() va chiamata sempre all'interno del loop non solo se si verificano certe condizioni, sempre per il fatto che le accelerazioni e decelerazioni non vengono calcolate se non chiami quella funzione.
Forse dovresti anche studiarti un po' della teoria dei motori passo-passo per capire come funzionano, ti consiglio, almeno per capire le basi, di leggerti il tutorial di VincenzoV è semplice da capire e spiega sufficientemente bene le basi dei motori passo-passo.
Dino