Buon giorno
Ho fatto una schedina per pilotare tra le altre cose degli stepper da montarsi sui miei robottini e mi sono imbattuto nel solito puzle a cui non so a chi attribuire le colpe.
Eccolo: uso un driver DVR8825 impostato per 16 microstep connesso a umo stepper da 7,5 gradi/step a cui non è connesso nulla ed è alimentato a 24V. Programmino da manuale giusto per vedere come gira lo stepper.
*/
#include <Arduino.h>
#include "AccelStepper.h"
// Definisce gli stepper usati e gli eventuali pin associati
// definire i pin di fine corsa degli stepper, da scegliersi tra A2 e A5 su J6
#define end1 14 // PIN A0
//#define end2 17 // PIN A3
//#define end3 18 // PIN A4
#define enablePin 8 // pin di on/off degli stepper
AccelStepper stp1(1, 6, 7); // (Type:driver, STEP, DIR) - stepper M1
//AccelStepper stp2(1, 4, 5); // Stepper M2
//AccelStepper stp3(1, 3, 2); // Stepper M3
long pippo;
void setup() {
pinMode(enablePin, OUTPUT); // abilito il DRV anche se ha un pulldown interno
digitalWrite(enablePin, LOW);
pinMode(end1, INPUT_PULLUP); // abilito fine corsa
// ritorno lentamente fino a chiudere il fine corsa
stp1.setMaxSpeed(300.0);
stp1.setSpeed(-10);
do
{
stp1.runSpeed();
} while (digitalRead(end1 ) != 0);
stp1.stop(); // fermo tutto
stp1.setCurrentPosition(0); // resetto il contatore
// reimposto i dati
stp1.setMaxSpeed(300.0);
stp1.setAcceleration(100.0);
stp1.moveTo(384); // un giro (microstep 16)
}
void loop() {
if (stp1.distanceToGo() == 0){ // se è arrivato
pippo = stp1.currentPosition(); // Per debug
delay(100); // per debug
stp1.moveTo(-stp1.currentPosition()); //ritorna degli stessi passi
//stp1.moveTo(0); //per debug
}
stp1.run();
// stepper2.run();
// stepper3.run();
}
Il motore gira lentamente all'indietro chiude il fine corsa, cambia velocità e continua a fare un giro avanti e indietro accelerando e decelerando correttamente, ma..
Con l'istruzione " stp1.setCurrentPosition(0);" azzerando il contatore credevo di aver definito il
punto di partenza l'HOME tanto per capirci del sistema. Il contatore in effetti si resetta poi dovrebbe contare 348 passi e lo stepper fare un giro per poi ritornare di 348 passi quindi da dove è partito. Invece resetta il contatore dice di contare 348 passi lo stepper fa mezzo giro invece del giro completo poi correttamente ritorna di 348 passi facendo un giro completo e poi non sbaglia più.
Se però alla fine del primo conteggio dei 348 passi (il primo mezzo giro) gli dico "stp1.moveTo(0);" lui ritorna al punto dove aveva chiuso il finecorsa e azzerato il contatore, ritorna di mezzo giro. Il quesito è quindi a chi attribuire la colpa che al primo conteggio in contatore di accellStepper conta 348 ma lo stepper fa solo mezzo giro.
Saluti Paolo