Motori passo-passo bipolari con Arduino controlla la velocità

Oggi ho fatto qualche esperimento con il mio motore bipolare, Arduino e l’SN754410NE, nel precedente articolo: Motori passo-passo bipolari con Arduino – seconda parte hai imparato a pilotare un motore bipolare con Arduino, oggi imparerai come regolarne la velocità.

Motore Stepper Bipolare Schema

Nello schema in alto ho rappresentato il collegamento tra

  • Arduino Duemilanove;
  • SN754410NE driver Brige H;
  • Il motore bipolare (riciclato da una stampante);
  • Un potenziometro da 10KΩ

Oltre a questi componenti ti serviranno una breadboard e dei cavetti per l’assemblaggio.

Per facilitare il collegamento del motore all’SN754410NE ed Arduino puoi leggere l’articolo: Motori passo-passo bipolari con Arduino – prima parte in cui ho scattato delle foto passo dopo passo su come eseguire il collegamento.

Per collegare il potenziometro puoi seguire lo schema in alto, in cui vedi che gli estremi del potenziometro sono connessi al positivo e negativo dell’alimentazione, in pratica la resistenza fissa di 10KΩ è tra positivo e negativo ed il pin centrale, quello relativo al cursore del potenziometro lo devi collegare al pin analogico 0 (A0) di Arduino, utilizzerai questo pin per rilevare il valore della resistenza assunta dal potenziometro.

Dovrai fare anche alcune modifiche allo sketch proposto in precedenza:

Aggiungi una nuova variabile al gruppo delle variabili già impostate:

int pinPot = 0;

serve a definire a quale pin hai collegato il potenziometro, nell’esempio è collegato al pin 0;

Nella funzione setup() devi aggiungere una nuova linea dopo le altre che indichi ad Arduino di utilizzare il pin 0 (pinPot) come INPUT, ossia per leggere il valore di resistenza impostato:

pinMode(pinPot, INPUT);

Ed infine alcune modifiche alla funzione loop(), in primo luogo aggiungi subito dopo la definizione della funzione loop() le seguenti linee:

int readPin = analogRead(pinPot);
int delayTime=map(readPin,0,1024,0,500);

Il cui significato è per la linea 01 l’impostazione di una nuova variabile di tipo integer in cui farai confluire il valore letto sul pinPot mediante l’utilizzo della funzione analogRead, se vuoi maggiori dettagli su questa funzione e sul suo utilizzo puoi leggere l’articolo Programmare con Arduino – leggere un segnale analogico; la linea 2 imposta il delayTime, in italiano tempo di attesa, uguale alla proporzione matematica tra lo 0 letto e lo 0 impostato e il valore 1024 letto e il 500 come valore massimo, in pratica la funzione map() restituisce in tempo reale la rimappatura del valore minimo e massimo letto rispetto ai valori minimo e massimo desiderati, quando sul pin 0 leggerai un valore 0 -> map restituirà 0; quando leggerai 1024 -> map restituirà 500; quando leggerai 512 -> map restituirà 250; e così via per tutti i valori intermedi da 0 a 1024.

Non occorrono altre modifiche in quanto il tempo calcolato su delayTime è già impostato come quello da attendere tra un passo e quello successivo.

Ora hai chiaro anche il perchè della proporzione inversa tra resistenza e velocità di rotazione, il motivo è che al crescere della resistenza aumenta il tempo di attesa tra un passo ed il successivo per cui una velocità più lenta; al diminuire della resistenza diminuisce anche il tempo di rotazione comportando una velocità maggiore di rotazione.

Riporto lo sketch intero per semplificarti la vita:

int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int pinPot = 0;

void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  
  pinMode(pinPot, INPUT);
}

void loop() {
  int readPin = analogRead(pinPot);
  int delayTime=map(readPin,0,1024,0,500);
  
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
}

Ho realizzato anche un piccolo video in cui puoi osservare come lo sketch appena visto si comporta in pratica.

Buon divertimento.

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

Permanent link to this article: https://www.mauroalfieri.it/elettronica/motori-passo-passo-bipolari-con-arduino-controlla-la-velocita.html

80 pings

Skip to comment form

  1. […] un motore passo-passo con due interruttori. Nei precedenti articoli hai imparato a collegare e regolare la velocità di un motore passo-passo bipolare con […]

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.