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