Problema con driver passo passo hy-div268n-5a

Ciao a tutti sono gianni, ho il problema di far funzionare un motore passo passo nema 17 con il driver hy-div268n-5a e arduino uno, comprato tutto da futura elettronica. Il problema è che non fa gli step che gli dico di fare, in poche parole per fare una rivoluzione ci vogliono 200 step, ne metto 800 e mi fa mezzo giro e per quanto riguarda la direzione in cui pilotarlo (senso orario e antiorario) questo funziona bene. Ho provato a programmare in diversi modi ma senza successo, per ora non ho idee su come risolvere la cosa e spero che qualcuno mi aiuti, ecco l'ultimo sketch fatto

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
 // set the speed at 60 rpm:
 myStepper.setSpeed(120);
 // initialize the serial port:
 Serial.begin(9600);
}

void loop() {
 // step one revolution  in one direction:
 Serial.println("clockwise");
 myStepper.step(50);
 delay(1000);

 // step one revolution in the other direction:
 Serial.println("counterclockwise");
 myStepper.step(-100);
 delay(1000);
}

Un sentito grazie a chiunque mi aiuti, è la prima volta che programmo questi motori :slight_smile:

Buongiorno e benvenuto sul forum,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Zef

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

... dopo di che, in conformità al suddetto regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

fatto questo, dici di fare 800 passi ma nel codice sono indicati prima 50 e poi -100, hai controllato che sul driver non sia settato il microstepping

Il driver che stai usando supporta il microstepping, verifica come sono impostati i relativi dip switch perché se stai usando un motore da 200 step/turn e con 800 fa solo mezzo giro vuol dire che è attivo il microstepping 1/8, per fare un giro completo servono 200*8 = 1600 step.

-zef-:
Buongiorno e benvenuto sul forum,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Zef

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

... dopo di che, in conformità al suddetto regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

fatto questo, dici di fare 800 passi ma nel codice sono indicati prima 50 e poi -100, hai controllato che sul driver non sia settato il microstepping

1)Scusa e grazie, è più di una riga va bene?
2)Grazie per i link, avendo fatto elettronica alle superiori il 90% di quella roba la so ma ammetto che in fondo alla lista c'è qualcosa a cui darò più di un'occhio
3)Fatto mi sembra vada bene, sennò cambio ancora
4)Hai ragione sul codice c'è scritto 100 sul movimento antiorario (ho provato a cambiare molte cose) ma 100 step sarebbe mezzo giro e credimi ne fa a malapena 1/4

astrobeed:
Il driver che stai usando supporta il microstepping, verifica come sono impostati i relativi dip switch perché se stai usando un motore da 200 step/turn e con 800 fa solo mezzo giro vuol dire che è attivo il microstepping 1/8, per fare un giro completo servono 200*8 = 1600 step.

La cosa che più non mi spiego è che mettendo il microstepping a 1/16 lui faccia un movimento molto più ampio rispetto a impostarlo ad 1, magari per voi la soluzione è semplice ma mentre per arduino non ho grossi problemi, con i motori passo passo ho molte lacune evidenziate per l'appunto con questo semplice esperimento.

se il motore nei movimenti che fa è preciso nel senso che non perde passi per la troppa velocità o alimentazione insufficiente l'unica che mi viene in mente è che hai il microstepping impostato diversamente da come credi, il fatto che impostandolo a 1/16 dici che compie un movimento più ampio a parità di passi sembra anche confermarlo :confused:

Il driver viene alimentato a 12V e 0,5A e arduino tramite presa usb del portatile, se quello che dici è vero allora il microstepping non è settato a 1/16 come io credevo ma a 1, che secondo lo schema che serve per impostare gli switch sono diametralmente opposti. Poi ci sarebbe un'altro problema il motore scalda un casino, c'è un errore lo so, ma non ho la più pallida idea di quale sia, comunque domani farò esperimenti con quanto detto fino ad ora.

Se il motore scalda troppo è impostata male la corrente massima sul driver, ci dovrebbe essere un trimmer o una serie di interruttori per impostare la corrente massima, se puoi metti il link preciso di motore e driver che hai preso, che sul sito con la sigla hy-div268n-5a non trova nulla

Questo è il driver

questo è il motore

questo arduino uno

tutti comperati nel negozio fisico e non online.

E' un motore a bassa potenza che richiede poca corrente, solo 280 mA, devi settare il driver per il valore 0.2A, tramite i relativi switch, qualunque altro valore porta il motore a scaldare molto e nel breve termine lo distrugge.
Ma perché hai preso un driver come quello per un motore di quel tipo ?; è come voler far funzionare un motorino (lo stepper) col motore di una superbike (il driver). :slight_smile:

Ho impostato gli switch a 0,2A e in effetti il motorino non scalda più (neanche dopo un'ora di funzionamento) e di questo vi devo ringraziare. Tenuto presente che gli switch della alimentazione adesso sono sicuramente giusti, so per certo quale sia la posizione on e off degli switch, impostando quelli del microstepping a 1, mi sono accorto che è la medesima impostazione di quello che io credevo essere 1/16. Per quanto riguarda il numero di step la situazione non cambia, gli metto 100 step e ne fa 12/13 al massimo, quindi adesso sono più che sicuro di aver impostato giusto il driver per le mie esigenze. Ho provato anche a cambiare i collegamenti di arduino e del motore (disperazione), con però la stessa aggravante, che il motore girava all'incontrario.

Gia'.... come lo hai collegato il driver ad Arduino ?

Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

pin 8 a PUL+

pin 9 a PUL-

pin10 a DIR+

pin11 a DIR-

Scusa, ma perchè non lo colleghi normalmente ?

Stepper myStepper ( stepsPerRevolution , 8 , 9 );

collega anche il pin enable ad arduino, così nei periodi di inattività eviti di scaldare il motore, sempre se hai periodi di inattività, inoltre utilizza almeno il mezzo passo (switch su ON-OFF-ON) così il motore girà meno a scatti.

brunello22:
Scusa, ma perchè non lo colleghi normalmente ?

Stepper myStepper ( stepsPerRevolution , 8 , 9 );

Gira semplicemente all'incontrario di come ha fatto fino ad ora, gli step sono come prima.

-zef-:
collega anche il pin enable ad arduino, così nei periodi di inattività eviti di scaldare il motore, sempre se hai periodi di inattività, inoltre utilizza almeno il mezzo passo (switch su ON-OFF-ON) così il motore girà meno a scatti.

per adesso devo semplicemente imparare a pilotarlo, le altre cose le imparerò volentieri ma dopo aver imparato almeno le basi. Il programma deve fare un loop 50 step in senso orario, pausa di 1 secondo, 100 step in senso antiorario, pausa di 1 secondo e poi ricomincia il loop. Comunque è solo un esperimento per imparare, e a esercitarmi a pilotare un passo passo con il driver in questione.

giannimesse:
Gira semplicemente all'incontrario di come ha fatto fino ad ora, gli step sono come prima.

Penso che Brunello22 intendesse che ad arduino devi collegare solo Dir+ e Pul+ mentre Dir- e Pul- li devi collegare al GND di arduino e quindi modificare:

il tuo listato da così

Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

a così

Stepper myStepper(stepsPerRevolution, 8, 9);

Infatti è stato fatto come come hai detto tu, il risultato è che il motore si muove degli stessi step di prima, ma con il senso di rotazione opposto.
Ho provato ad invertire il pin 8 e 9 ed è tornato tutto come prima.
Dalle ultime osservazioni fatte sembra ci sia una precisione in quello che fa, lo noto soprattutto nel movimento antiorario che è il più ampio. Dovrebbe fare 100 step quindi mezzo giro, ma si vede benissimo che fa esattamente 1/4 di mezzo giro, in tutto ciò la forma squadrata del motore aiuta a rendere visibile il fenomeno, come se da qualche parte ci fosse un demoltiplicatore di 1/4.

C'è un grosso errore di fondo, la libreria stepper di Arduino non è pensata con l'uso tramite driver con ingresso STEP e DIR, è pensata per lavorare direttamente sulla sequenza delle fasi motore, p.e. il classico azionamento tramite L298.
Per usare un driver con DIR e STEP occorre usare una libreria diversa come la accellstepper.

Non riesco a trovare una documentazione esaustiva riguardo la libreria accelstepper, per ora sto provando gli esempi modificando il numero dei pin, e fino ad ora sa solamente muoversi a scatti oppure vibrare in modo vistoso.

La accelstepper è facilissima da usare:

// define per pin, al posto di pinchevuoi mettere il numero del pin
#define STEP_step pinchevuoi // pin impulsi
#define STEP_dir pinchevuoi   // pin direzione 
#define STEP_en pinchevuoi   // pin per enable (opzionale)


// init libreria, 1 è il modo operativo)
AccelStepper stepper1(1,STEP_step,STEP_dir);


// imposta velocità massima e accelerazione in step/sec
stepper1.setMaxSpeed(5000.0);
stepper1.setAcceleration(5000.0);

Per i comandi di movimento guarda gli esempi a corredo della libreria, quando la scarichi al suo interno c'è anche tutta la documentazione nella cartella doc.