Tutorial: Easy Driver Arduino riduzione del passo

Se hai già letto il mio tutorial sull’EasyDriver sai di cosa sto parlando e sai che anche in questo articolo potrai leggere come pilotare i motori passo-passo bipolari con easy driver.

EasyDriver montato

Sulla pagina ufficiale dell’Easy Driver prodotto dalla Sparkfun puoi leggere che è in grado di pilotare motori stepper bipolari o unipolari collegati come bipolari, sia in modalità full-step ossia passo per passo sia di ottenere delle riduzioni sui passi da 1/2 passo, 1/4 di passo e 1/8 di passo.

Ho voluto provare le caratteristiche del driver e riuscire a evidenziare con uno sketch come puoi utilizzare l’easy driver per realizzare la tua stampante 3D, dolly project, cnc casalinga o altro progetto in cui la precisione è un fattore importante.

Perché ridurre il passo con l’Easy Driver

I motori passo passo possiedono la capacità di essere pilotati con degli impulsi in modo da compiere un riro completo in un numero di passi stabilito. Se il motore passo passo che possiedi è un 200step ( 200 passi ) vuol dire che l’albero per tornare nella sua posizione iniziale dopo aver eseguito un giro completo impegna 200 piccoli passi da 1,8° ciascuno ( 360°/200 = 1,8° )

Quando trasferisci il movimento meccanico di rotazione ad una vite, il passo della vite identifica la distanza percorsa da un oggetto lungo la vite dopo una rotazione di 360° ( un giro di vite ):

vite easy driver

per convenzione mi riferirò a PASSO quando parlo di quello della vite e userò passo per indicare il singolo step del motore, in modo da evitare confusione.

Se conosci quanti mm è il PASSO puoi calcolare la precisione che puoi ottenere con il tuo motore; ad esempio nell’immagine della vite se il PASSO fosse di 5mm puoi calcolarti il grado di precisione come:

Precisione = ( PASSO / numero di step ) = ( 5 mm / 200 ) = 0,025 mm

A questo punto avrai già dedotto che se puoi incrementare il numero di passi dividendo il singolo passo per 1/2, 1/4 o 1/8 di passo puoi aumentare la precisione del tuo movimento meccanico in quanto otterrai:

  • 200 * 2 = 400 passi
  • 200 * 4 = 800 passi
  • 200 * 8 = 1600 passi

e di conseguenza, tornando al PASSO della vite:

  • 5mm / 400 passi = 0,0125 mm
  • 5mm / 800 passi = 0,00625 mm
  • 5mm / 1600 passi = 0,003125 mm

Ora sai il motivo per cui ho provato questo l’easy driver ed in particolare la caratteristica di riduzione dei passi.

Come l’easy driver demoltiplica il passo

Ridurre l’ampiezza del passo in modo che un giro sia compiuto in 400, 800 o 1600 passi è possibile utilizzando i terminali MS1 ed MS2 presenti sul driver, seguendo questo schema:

Terminali MS1 ed MS2

in pratica collegando questi terminali ai pin arduino ed utilizzando uno sketch puoi ottenere la divisione di un giro in un numero di passi superiori a quelli dichiarati dal costruttore.

Ecco lo schema dei collegamenti che io ho utilizzato per questo tutorial:

schema dei collegamenti dell'easy driver

avrai notato che sono presenti quattro pulsanti, il primo partendo da sinistra ( collegato ad arduino con il cavo di colore giallo ) è connesso al pin 8 e serve a far avanzare il motore di un passo alla volta; il secondo è connesso al pin 7 fa eseguire al motore 200 passi; il terzo ed il quarto sono collegati rispettivamente al pin 8 e 9 e serviranno per inviare segnali alto o basso all’easy driver sui terminali MS1 ed MS2 in funzione dei quali potrai dimezzare un passo o ridurlo di 1/4 o di 1/8.

Lo sketch per l’easy Driver

Puoi utilizzare lo sketch che ti propongo per eseguire i tuoi test con l’easy driver:

int DIR = 2;
int STEP = 3;
int MS1 = 4;
int MS2 = 5;

int Rotate = 7;
int pinGo = 8;
int pinMS1 = 9;
int pinMS2 = 10;

void setup() {
  Serial.begin(9600);
  pinMode(DIR, OUTPUT);
  pinMode(STEP, OUTPUT);
  pinMode(MS1, OUTPUT);
  pinMode(MS2, OUTPUT);

  pinMode( pinGo,INPUT );
  pinMode( pinMS1,INPUT );
  pinMode( pinMS2,INPUT );

  pinMode( Rotate,INPUT );
}

void loop()
{
    digitalWrite(MS1, digitalRead( pinMS1 ) );
    digitalWrite(MS2, digitalRead( pinMS2 ) );

    digitalWrite(DIR,HIGH);
    delay(50);

    if ( digitalRead( Rotate ) == HIGH ) {
      for ( int i=0; i<200; i++) { stepGo(); delay(10); }
    }
    if ( digitalRead( pinGo ) == HIGH ) {
        Serial.print( "Step MS1 " );
        Serial.print( digitalRead( pinMS1 ) );
        Serial.print( " MS2 " );
        Serial.print( digitalRead( pinMS2 ) );
        Serial.print( " \n" );
  delay( 300 );
        stepGo();
    }
}

void stepGo() {
        digitalWrite(STEP, HIGH);
        delayMicroseconds(100);
        digitalWrite(STEP, LOW);
        delayMicroseconds(100);
}

la base dello sketch non è molto differente da quella presentata nel primo articolo dedicato all’easy driver, a quello sketch ho aggiunto alcune linee:

linee 03-04: definici i pin a cui hai collegato i pin dell’easy driver MS1, MS2;

linee 06-09: definisci i pin a cui hai collegato i bottoni, se leggi il paragrafo precedente troverai ogni singolo bottone a cosa serve;

linee 13-22: definisci quali pin utilizzerai come INPUT e quali come OUTPUT;

linea 27: con il comando digitalRead( pin ) leggi il valore proveniente dal pulsante connesso al pinMS1 e con il comando digitalWrite( pin, value ) trasferisci questo valore al pin di OUTPUT, in pratica se premi il pulsante connesso al pinMS1 il valore letto sarà HIGH e il corrispondente pin MS1 dell’easy driver riceverà il segnale HIGH;

linea 28: fa la medesima operazione della linea 27 sul pulsante pinMS2;

linea 30: imposti la direzione di rotazione del motore, in questo test è di minore importanza per cui la puoi lasciare a HIGH;

linee 33-35: se premi il pulsante Rotate ossia quello connesso al pin 7 il ciclo for presente alla linea 34 fa eseguire al motore i 200 passi impostati nella condizione del for, per ciascun passo chiama la funzione goStep() definita alla linea 47 e attende 10 millisecondi prima di eseguire il passo successivo;

linne 36-44: imposti lo sketch in modo che alla pressione del pulsante connesso al pinGo ( pin 8 di arduino ) il motore esegua un solo step o passo;

Il video

per comprendere meglio il funzionamento dell’easy driver quando riduci i passi ho realizzato un video demo utilizzando un quadrante di cartoncino su cui ho disegnato delle linee a 0°, 180° ( 1/2 giro ), 90° ( 1/4 di giro ) e 45° ( 1/8 di giro ):

Quadrante Stepper Motor

guarda la demo:

nel video premendo il pulsante connesso al pin 7 lo sketch esegue sempre 200 passi, come hai visto, ma variando l’ampiezza di ogni singolo passo puoi notare che la lancetta esegue 360°, 180°, 90°, 45° rispondenti alle divisioni:

  • Passo intero -> 200 passi = 360° ( 360° / 1 = 360° )
  • Mezzo passo -> 200 passi = 180° ( 360° / 2 = 180° )
  • Un quarto di passo -> 200 passi = 90° ( 360° / 4 = 90° )
  • Un ottavo di passo -> 200 passi = 45° ( 360° / 8 = 45° )

Ora che ti è tutto più chiaro non ti resta che provare.

Buon divertimento !!!

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/tutorial-easy-driver-arduino-stepper.html

45 pings

Skip to comment form

  1. […] L’uso del driver pololu a4983 del tutto simile al modello a4988 che lo ha sostituito lo hai già letto nell’articolo dedicato a questo driver, ed in precedente articolo hai già visto come si possono dimezzare o ridurre a 1/4 ed 1/8 i passi di un motore bipolare con l’easy driver. […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.