motori passo-passo

2 Anni 2 Mesi fa #1 da elpablito
motori passo-passo è stato creato da elpablito
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

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
2 Anni 2 Mesi fa - 2 Anni 2 Mesi fa #2 da elpablito
Risposta da elpablito al topic motori passo-passo
buon giorno
era chiaro fin dal principio che c'era un errore grossolano bisognava solo trovarlo. Ma è banale, per fare un giro con un motore da 7.5 gradi/step servono 360/7,5 = 48 step Se microstep eguale a 16 gli impulsi diventano 48x16 = 768 Avendo invece impostato 384, il motore fa giustamente mezzo giro poi cicla tra 384 e il suo negato e quindi fa 768 passi cioé un giro.
Saluti Paolo
Ultima Modifica 2 Anni 2 Mesi fa da elpablito. Motivo: errore

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
Moderatori: Mauro LaurentiStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login