Motor Shield FE e motore bipolare

Continua la serie di articoli su come utilizzare la “Motor Shield Fe” ed Arduino iniziata qualche settimana fa con il primo articolo: Tutorial: Motor Shield FE – prima parte.

motor-shield-fe-e-bipolare

In queste settimane hai sperimentato come costruirla, testarla e pilotare due motori in CC ( Corrente Continua) ma la motor shield FE può essere utilizzata che per pilotare un motore passo-passo, unipolare o bipolare, e quindi la puoi usare per la tua CNC o stampante 3D autocostruita.

Inizio dai motori bipolare perchè sono più difficili da gestire ma anche più semplici da trovare nelle stampanti di recupero, non a caso la maggior parte dei commenti ai miei articoli giungono proprio da appassionati in possesso di questo tipo di motore, più che dei motori unipolari.

La motor shield ha 2 moresetti, da due contatti ciascuno, a cui connettere le 2 fasi del motore.

Ti starai chiedendo come due fasi, non possiede 4 fasi un motore bipolare? si, ma in realtà gli avvolgimenti sono pilatati a due a due, ciascuno polarizzando correttamente la bobina corrispondente, se ti occorrona magiori informazioni su questo tipo di motori e sulla loro geometria ti invito a leggere: Motori passo-passo unipolari, riconoscerne le fasi – prima parte.

Collegamento:

individua le fasi del motore la prima, la seconda, la terza e la quarta, collega la prima e la terza ai morsetti del motore A e la seconda e quarta ai morsetti del motore B, come in figura:

connettori-motor-shield-fe

ed ecco lo sketch di esempio che puoi utilizzare:

/*
 * Sketch Test Motori Shield FE
 *
 * @author: Alfieri Mauro
 * @see:    https://www.mauroalfieri.it
 *
 * @licenze: Creative common
 */

int motorPinDirA = 2;
int motorPinDirB = 8;
int motorPinPwmA = 3;
int motorPinPwmB = 9;
int delayTime = 100;

void setup() {
  pinMode(motorPinDirA, OUTPUT);
  pinMode(motorPinDirB, OUTPUT);
  pinMode(motorPinPwmA, OUTPUT);
  pinMode(motorPinPwmB, OUTPUT);
}

void loop() {

  digitalWrite(motorPinDirA, HIGH);
  digitalWrite(motorPinDirB, LOW);
  digitalWrite(motorPinPwmA, HIGH);
  digitalWrite(motorPinPwmB, LOW);
  delay(delayTime);

  digitalWrite(motorPinDirA, LOW);
  digitalWrite(motorPinDirB, HIGH);
  digitalWrite(motorPinPwmA, LOW);
  digitalWrite(motorPinPwmB, HIGH);
  delay(delayTime);

  digitalWrite(motorPinDirA, LOW);
  digitalWrite(motorPinDirB, LOW);
  digitalWrite(motorPinPwmA, HIGH);
  digitalWrite(motorPinPwmB, LOW);
  delay(delayTime);

  digitalWrite(motorPinDirA, LOW);
  digitalWrite(motorPinDirB, LOW);
  digitalWrite(motorPinPwmA, LOW);
  digitalWrite(motorPinPwmB, HIGH);
  delay(delayTime);

}

Faccio una premessa, la motor shield fe si basa sul driver a ponte H L298, in particolare questo driver accetta 4 segnali di input: IN1, IN2, IN3, IN4 e 2 segnali di enable EN1 ed EN2.

A cosa server tutto questo: nella motor shield fe i pin ENx sono ciascuno l’abilitazione della coppia di INx corrispondente, in pratica perchè IN1 e IN2 accettino un segnale e lo commutino su OUT 1 e OUT2 (uscite corrispondenti) è necessario che EN1 sia ad un livello logico alto (+5v); uguale situazione è valida per IN3 e IN4 con EN2.

Devi considerare anche che IN1 e IN2 sono pilotati da segnali invertiti mediante l’utilizzo di transistor ripetto ad un unico pin che li collega ad Arduino, analogamente avviene per IN3 e IN4.

Questo comporta che se IN1 è a livello logico alto ( +5v ) IN2 è certamente a livello logico basso  ( 0v ).

Compresa questa premessa ecco come funziona lo sketch:

linee 10-11: definisci le due variabili di tipo integer a cui sono collegati i pin di controllo della direzione A e B, ossi a IN1 e IN3, e di conseguenza sono invertiti IN2 e IN4, questi pin puoi modificarli sulla motor shield spostando i ponticelli illustrati nella figura sotto;

linee 12-23: definisci i pin collegati ai segnali PWM, in questo esempio non li utilizzerai come tali per cui sono solo i pin di enable EN1 e 2, anche questi li puoi modificare grazie ai ponticelli di selezione presenti sulla scheda e rappresentati in figura:

jumper-dir-e-pwmmotor-shield-fe

in figura i pin DIRA è connesso al pin 2 di arduino, DIRB al pin 8, PWMA al pin 3 e PWMB al pin 9 come nello sketch, puoi spostare tutti i ponticelli come preferisci, ricorda di cambiare le impostazioni dei pin nello sketch;

linea 14: definisci un tempo di attesa, nell’esempio di 100 millisecondi, di attesa tra una fase e la successiva;

linee 17-20: imposta tutti i pin definiti alle linee precedenti come pin di OUTPUT mediante il comando pinMode di arduino.

linee 25-28: è la prima fase del motore, abilita la conduzione degli input IN1 e 2 portando a livello logico alto il PWM corrispondente, a sua volta connesso all’EN1, quindi PWMA impostato a livello logico alto ( +5v ), e IN1 a livello logico alto (PinDirA), di conseguenza IN2 andrà da solo a livello logico basso portando l’uscita OUT2 a 0v;

linea 29: imposta il tempo di attesa delayTime come definito alla linea 14;

linee 31-34: è la seconda fase, ad essere interssati in questo caso sono i pin DirB e PwmB che vanno a livello logico alto per consentire a IN3 e EN2 di andare a livello logico alto e di conseguenza all’OUT3;

linea 35: imposta il tempo di attesa come alla linea 29;

linee 37-40: è la fase 3 e il segnale su EN1 deve tornare ad essere alto, per portare in conduzione IN1 e IN2 secondo il segnale impostato su DirA, quindi imposta DirA a LOW ( 0v ) per ottenere che IN1 vada a livello logico basso e IN2 alto;

linea 41: imposta il tempo di attesa come alla linea 29;

linee 43-46: è l’ultima fase del motore, ad essere coinvolto è tutto il canale B, per cui PwmB va a livello logico alto e DirB a livello logico alto, tradotto sul tuo L298 significa IN3 a 0v e IN4 a +5v;

linea 47: imposta il tempo di attesa come alla linea 29;

a questo punto il ciclo ricomincia dalla linea 25, facendo compiere all’albero motore altri 4 passi.

E’ importante che ti sia chiaro che ogni fase corrisponde da un passo del motore ma che allo stesso tempo 4 passi non è detto che facciano compiere un giro completo al motore, quando il motore è un 48 passi, ad esempio, sono necessari 12 cicli loop() di arduino per compiere un giro completo ( 48 / 4 = 12 ).

Guarda il video dimostrativo dello sketch:

Buon divertimento.

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

Permanent link to this article: https://www.mauroalfieri.it/elettronica/motor-shield-fe-e-motore-bipolare.html

51 pings

Skip to comment form

  1. […] precedente articolo dedicato alla motor shield FE fornita da robot-domestici.it hai imparato a pilotare un motore […]

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.