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.
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:
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:
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
51 pings
Skip to comment form
[…] precedente articolo dedicato alla motor shield FE fornita da robot-domestici.it hai imparato a pilotare un motore […]