Motori passo-passo bipolari comandati da interruttori – quinta parte

Il tuo esperimento con i motori passo-passo bipolari inizia a diventare interessante, se hai seguito i precedenti articoli avrai realizzato il tuo controllo motore passo-passo bipolare con Arduino e un SN754410NE.

Motore stepper bipolare due pulsanti e un potenziometro

Nella quarta parte hai affrontato il problema della velocità di rotazione ed una prima soluzione per risolvere l’inconveniente dovuto ad una eccessiva velocità di successione dei segnali alle bobine che hanno come effetto collaterale la completa immobilità del motore e l’emissione di un sibilo.

L’aracano per evitare tutto questo è l’introduzione di un delay o tempo di ritardo tra una fase e la successiva.

Se il motore vuoi che compia un giro completo in un tempo da te stabilito puoi calcolare prima di impostare lo sketch, ad esempio se vuoi che il tuo motore compia un giro completo in un secondo non hai che da dividere il secondo per le fasi ( passi o step ) che il motore impiega per eseguir un giro completo.

Siccome il delay di Arduino lavora in millisecondi ossia 1 secondo = 1000 millisecondi, se il motore con cui stai lavorando è un 200 step ossia impiega 200 passi per compiere un giro, il calcolo è presto fatto: 1000/200 => 10/2 = 5 millisecondi; imposta quindi a 5 il delay.

Il problema vero è quando non sai a quale velocità devi far ruotare il motore, per cui non puoi calcolare anticipatamente il valore del delay da impostare.

Ed ecco che lo schema in figura:

Motore stepper bipolare due pulsanti e un potenziometro

ti mostra una possibile soluzione, inserendo un potenziometro da 10KΩ, come nello schema potrai regolare la velocità di rotazione mediante lo sketch presentato nella quarta parte di questa serie di articoli con qualche piccola modifica:

#define LED 13
#define ORARIO 2
#define ANTIOR 3

int motorPinx[] = {8, 9, 10, 11};
int sequenza[] = {1,3,2,4};
int countX  = 0;
int count2X = 0;
int ora = 0;
int ant = 0;
int delayTime = 100;
int pinPot = 0;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(ORARIO, INPUT);
  pinMode(ANTIOR, INPUT);
  for (countX=0; countX<4; countX++)
  {
    pinMode(motorPinx[countX], OUTPUT);
  }
  pinMode(pinPot, INPUT);
 } 

void loop() {
  ora = digitalRead(ORARIO);
  ant = digitalRead(ANTIOR);
  int readPot = analogRead( pinPot );
  int delayTime = map(readPot,0,1024,10,1000);

  if (ora == HIGH) {
    orario();
  } 

  if (ant == HIGH) {
    antiorario();
  }
  delay(delayTime);
}

void orario()
{
  int val = LOW;
  for (countX=0; countX<4; countX++)
  {
    if (countX == sequenza[count2X]) val = HIGH;
    else                             val = LOW;

    digitalWrite(motorPinx[countX], val);
  }
  count2X++;
  if (count2X == 4) count2X = 0;
}

void antiorario()
{
  int val = LOW;
  for (countX=3; countX>=0; countX--)
  {
    if (countX == sequenza[count2X]) val = HIGH;
    else                             val = LOW;

    digitalWrite(motorPinx[countX], val);
  }
  count2X--;
  if (count2X < 0) count2X = 3;
}

Avrai già visto la modifica da fare, riguarda le linee 12, 22, 28 e 29.

linea 12: definisci una nuova variabile di tipo integer in cui memorizzare il numero di pin a cui hai collegato il pin centrale del potenziometro, nella figura il pin è connesso al pin A0 (analogico 0);

linea 22: è all’interno della funzione setup() per cui è una istruzione di settaggio eseguita all’avvio dello sketch, imposti il  pinPot, assegnato alla linea 12, in modalità INPUT indicando ad Arduino di leggere da questo pin i valori analogici che gli saranno inviati attraverso il potenziometro.

linea 28: leggi il valore del potenziometro attraverso il pin 0 analogico, e memorizzi il valore nella variabile readPot;

linea 29: utilizzi la funzione map(valore,valmin,valmax,outputvalmin,outputvalmax) per rimappare dei valori di input su dei valori di output, in pratica questa funzione accetta come primo parametro il valore da rimappare (readPot) il cui valore oscilla tra valmin ( 0 ) e valmax (1024 ) il passaggio da 0 a 1024 è il valore acquisito dal pin 0 in base alla posizione dell’alberino del potenziometro; tale valore viene rimappato in funzione dei valori di output min e max ( parametro 4 e 5 della funzione map ); nell’esempio i valori da 0 a 1024 sono rimappati da 10 a 1000 ma puoi provare a variare questi valori per adattarli al tuo progetto.

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-comandati-da-interruttori-quinta-parte.html

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.