AccelStepper cambio velocità ed accelerazione

Ciao a tutti,
Con Arduino Nano sto pilotando un motore stepper tramite driver DM542T.
Ho trovato utile la libreria AccelStepper.h che gestisce le accelerazioni in start e stop.
Nel progetto che sto realizzando il motore dovrebbe andare ad una velocità 'alta' fino a quando arriva al sensore di low_speed, quindi rallentare e fermarsi sul sensore di home.

Con lo sketch test che ho fatto la velocità cambia immediatamente in low senza decellerare, muovendomi invece in senso opposto , se il sensore low_speed è copero, non appena si scopre la velocità incrementa gradualmente in base all'accelerazione impostata.

#include <AccelStepper.h>

// stepper1
#define STEPPER1_DIR_PIN 3
#define STEPPER1_STEP_PIN 13
// stepper2
#define STEPPER2_DIR_PIN 7
#define STEPPER2_STEP_PIN 6
AccelStepper stepper1(AccelStepper::DRIVER, STEPPER1_STEP_PIN, STEPPER1_DIR_PIN);
AccelStepper stepper2(AccelStepper::DRIVER, STEPPER2_STEP_PIN, STEPPER2_DIR_PIN);

//variabili velotità
unsigned long m1_max_speed = 100000;
unsigned long m1_min_speed = 500;

//PIN
int bt =2; // pulsante muove a dx
int bt2 = 4; //pulsante muoe a sx
int limitdx = 5; // sensore near to home
int homedx = 8; // sensore home

void setup()
{  
    stepper1.setMaxSpeed(m1_max_speed);
    stepper1.setAcceleration(500.0);
    stepper1.moveTo(50000);
    
    stepper2.setMaxSpeed(100.0);
    stepper2.setAcceleration(100.0);
    stepper2.moveTo(100);

    pinMode(bt,INPUT_PULLUP);
    pinMode(bt2,INPUT_PULLUP);
    pinMode(limitdx,INPUT_PULLUP);
    pinMode(homedx,INPUT_PULLUP);
     
 
}

void loop()
{

if(digitalRead(limitdx)== HIGH){stepper1.setMaxSpeed(m1_max_speed);}else{stepper1.setMaxSpeed(m1_min_speed);}// se basso low speed, vicino ad home
if(digitalRead(homedx)== HIGH){stepper1.run();}else{stepper1.setCurrentPosition(stepper1.currentPosition());} // home raggiunto, fermo  il motore

if(digitalRead(bt)==LOW){stepper1.moveTo(stepper1.currentPosition()-5000);}// muove a dx

if(digitalRead(bt2)==LOW){stepper1.moveTo(stepper1.currentPosition()+5000);}// muove a sx

if((digitalRead(bt2)==HIGH)&&(digitalRead(bt)==HIGH)){stepper1.moveTo(stepper1.currentPosition());}//se pulsanti rilasciati rallento e stop
}

Nel passaggio da alta a bassa velocità la libreria non mi applica la decellerazione, viceversa si.
è possibile risolvere? grazie

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.