Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Motori Passo-Passo (step)
Prof.ri Ponte Vincenzo Ovazza Sergio MAKER-INO Lezione 8°
2
Pilotare Motore CC con Serial Monitor
Gestire la PWM con la scheda in dotazione. Collegando gli ingressi digitali (IN1,IN2…..) a Pin PWM e gestendoli con analogWrite invece che con digitalWrite,risolviamo il problema. Vedremo anche come impartire comandi da SerialMonitor.
3
Pilotare Motore CC con Serial Monitor
int IN1=10; int IN2=11; int IN3=5; int IN4=6; void setup() { pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); Serial.begin(9600); Serial.print("Digita seguenti opzioni:"); Serial.print("1 AVANTI VELOCE"); Serial.print("2 RETRO VELOCE:"); Serial.print("3 STOP"); Serial.print("4 AVANTI BASSA VELOCITA"); Serial.print("5 RETRO BASSA VELOCITA"); Serial.println(); }
4
Avanti Veloce void Forward() //Avanti veloce { analogWrite(IN1,250);
Serial.print("Motore 1 AVANTI"); Serial.println(); analogWrite(IN3,250); analogWrite(IN4,0); Serial.print("Motore 2 AVANTI"); }
5
Avanti Piano void ForwardB() { analogWrite(IN1,100);
Serial.print("Motore 1 AVANTI PIANO"); Serial.println(); analogWrite(IN3,100); analogWrite(IN4,0); Serial.print("Motore 2 AVANT PianoI"); }
6
Retro Veloce void Reverse() { analogWrite(IN1,0);
Serial.print("Motore 1 Retro"); Serial.println(); analogWrite(IN3,0); analogWrite(IN4,250); Serial.print("Motore 2 Retro"); }
7
Retro Piano void ReverseB() { analogWrite(IN1,0);
Serial.print("Motore 1 Retro Piano"); Serial.println(); analogWrite(IN3,0); analogWrite(IN4,100); Serial.print("Motore 2 Retro Piano"); }
8
STOP void Stop() { analogWrite(IN1,0); analogWrite(IN2,0);
Serial.print("Motore 1 Fermoo"); Serial.println(); analogWrite(IN3,0); analogWrite(IN4,0); Serial.print("Motore 2 Fermo"); }
9
LOOP void loop() { char user_input; while(Serial.available()) {
user_input=Serial.read(); digitalWrite(IN1,0); digitalWrite(IN2,0); if(user_input=="1") { Forward(); } else if(user_input=="2") { Reverse();
10
LOOP else if(user_input=="3") { Stop(); } else if(user_input=="4") {
ForwardB(); else if(user_input=="5"){ ReverseB(); else{ Serial.println("Opzione non valida");
11
Motori passo-passo, come riconoscerli
Hanno minimo 4 fili:
12
Il principio di funzionamento
Sono motori che,a differenza di tutti gli altri, hanno come scopo quello di mantenere fermo l'albero in una posizione di equilibrio: se alimentati si limitano infatti a bloccarsi in una ben precisa posizione angolare. Solo indirettamente è possibile ottenerne la rotazione: occorre inviare al motore una serie di impulsi di corrente, secondo un'opportuna sequenza, in modo tale da far spostare, per scatti successivi, la posizione di equilibrio.
13
Il principio di funzionamento
È così possibile far ruotare l'albero nella posizione e alla velocità voluta semplicemente contando gli impulsi ed impostando la loro frequenza, visto che le posizioni di equilibrio dell'albero sono determinate meccanicamente con estrema precisione. È la scelta ideale per tutte quelle applicazioni che richiedono precisione nello spostamento angolare e nella velocità di rotazione, quali la robotica, le montature dei telescopi ed i servomeccanismi in generale.
14
Motori passo-passo, come riconoscerli
I motori passo passo sono classificati in due tipologie distinte: unipolari bipolari i motori unipolari sono più semplici da pilotare in quanto la sequenza della rotazione è espressa dal succedersi dell’eccitazione delle bobine di cui è composto; i motori bipolari sono di maggiore complessità in quanto la rotazione avviene con un campo magnetico generato dalla corrente che percorra in entrambi i versi le bobine.
15
Motori passo-passo, come riconoscerli
Il numero di fili di cui un motore passo-passo possono essere 4,5,6 o 8 e sono direttamente legati alla caratteristica unipolare (5,6 o 8 conduttori) o bipolare (4 o 8 conduttori) del motore stesso.
16
Motore a fili Come si rappresentano:
17
Motore a 8 fili I motori a 8 fili possono essere utilizzati sia in configurazione unipolare sia in configurazione bipolare. Lo schema di costruzione riportato in Figura mostra le bobine ciascuna con due terminali indipendenti. L’utilizzo di tali motori in modalità unipolare o bipolare deve essere eseguito in funzione della complessità del progetto, delle forze in gioco e dell’ambito applicativo in cui il motore va collocato.
18
Motore passo passo Arduino
motore passo passo 28YBJ-48 e relativo driver Caratteristiche: motore a 4 fasi alimentazione volt, da una fonte che puo’ essere esterna ad Arduino assorbimento: 320 mA rapporto di riduzione 1/64
19
Motore passo passo Arduino
Questo motore puo’ operare in due modalita’: a 64 oppure a 32 impulsi per rotazione dell’albero motore. Le librerie di Arduino gestiscono la modalita’ a 32 impulsi per cui ad ogni impulso l’albero motore ruota di gradi.
20
Motore passo passo Arduino
Il motore e’ pilotato da un driver che, operando sotto il controllo di Arduino, lancia gli impulsi necessari al movimento. Il motore e’ dotato di un riduttore con rapporto 1/64, per cui, per una rotazione completa del perno in uscita, sono necessarie 64 rotazioni dell’albero motore e quindi 32*64 = 2048 impulsi .
21
Motore passo passo Arduino
La connessione tra il driver ed il motore e’ assicurata da un cavo a 4 fili che termina in uno spinotto da inserire nell’alloggiamento bianco presente sulla scheda driver La connessione ad Arduino e’ realizzata attraverso i 4 pin (IN1 – IN4) di input. L’alimentazione (da 5 a 12 volt, eventualmente esterna ad Arduino), corre invece sui due spinotti posti nella parte bassa della scheda, contrassegnati da un – ed un + Per ottenere il corretto funzionamento del motore, bisogna attivare e disattivare le porte di ingresso (IN1 – IN4) rispettando la sequenza 1, 3, 2, 4.
22
Motore passo passo Arduino
Il senso di rotazione (orario o antiorario) e’ gestito dal segno associato al numero di impulsi. Se il numero di impulsi e’ negativo, l’albero motore gira in senso antiorario. In questo esercizio ci si limitera’ ad azionare un motore passo passo, facendo fare al perno in uscita un mezzo giro in senso orario seguito da un mezzo giro in senso antiorario e a velocita’ piu’ elevata. Prima dei due mezzi giri verra’ mostrata, per quattro volte, a velocita’ molto bassa e tramite i led presenti sul driver, la sequenza di lancio degli impulsi
23
Motore passo passo Arduino
Schema Collegare le porte 8, 9, 10 ed 11 di Arduino rispettivamente agli ingressi In1, In2, In3 ed In4 del driver. Alimentare il driver con una tensione da 5 volt e connettere il motore passo passo al driver mediante lo spinotto di cui e’ dotato. Visto il basso assorbimento previsto per questo esercizio, e’ possibile utilizzare le fonte di alimentazione da 5 volt fornita da Arduino
24
Motore passo passo Arduino
Programma #include <Stepper.h> // richiama la libreria con le funzionalita’ int impulsi; // definizione di una variabile intera chiamata "impulsi" /* nella prossima istruzione sono forniti il numero di impulsi (32) necessari per far compiere un giro dell’albero motore e vengono definite le porte da associare al driver con la loro sequenza di attivazione. Le porte 8, 9, 10 ed 11 di Arduino sono collegate, rispettivamente, ai pin In1, In2, In3 ed In4 del driver ma la sequenza di attivazione deve essere In1, In3, In2 ed In4 per cui la dichiarazione delle porte e' 8, 10, 9, e 11 */ Stepper small_stepper(32, 8, 10, 9, 11); void setup() { // non e' necessaria alcuna dichiarazione iniziale poiche' le porte // di Arduino vengono automaticamente dichiarate dalle routine presenti in libreria }
25
Programma void loop() {
// parte 1 - visualizzazione della sequenza di lancio degli impulsi small_stepper.setSpeed(1); // imposta una bassa velocita' dell'albero motore // (1 impulso al secondo) per mostrare, lentamente, la sequenza di lancio degli impulsi // (osservare la sequenza di illuminazione dei led sulla scheda driver) impulsi = 4; // imposta 4 nel contatore di impulsi small_stepper.step(impulsi); // lancia 4 impulsi, facendo muovere l'albero motore di // 45 gradi (11,25 gradi per 4 volte) ed il perno esterno di 0,7 gradi delay(2000); // aspetta 2 secondi prima di attivare il successivo movimento
26
Programma // parte 2 - rotazione del perno in uscita di 180 gradi in senso orario a velocita' moderata impulsi = 1024; // inserisce nella variabile impulsi il valore 1024, // e cioe' il numero di impulsi necessari per far compiere mezzo giro al perno di uscita small_stepper.setSpeed(100); // imposta una bassa velocita' di rotazione dell'albero // motore (100 impulsi al secondo, pari a 3,125 giri al secondo dell’albero motore e ad // una rotazione di 17,5 gradi al secondo del perno in uscita.) small_stepper.step(impulsi); // ripete per 1024 volte la sequenza di lancio degli impulsi // (la variabile "impulsi" contiene il valore 1024) delay(1000); // aspetta un secondo prima di attivare il successivo movimento
27
Programma // Parte 3 - rotazione del perno in uscita di 180 gradi, a velocita' elevata ed in senso antiorario impulsi = ; // inserisce in "impulsi" il valore negativo -1024, // in modo da imprimere un movimento antiorario al perno di uscita small_stepper.setSpeed(700); // imposta un'alta velocita' di rotazione dell'albero motore // (700 impulsi al secondo, pari a 21,85 giri al secondo dell’albero motore e 123 gradi al secondo // del perno in uscita) small_stepper.step(impulsi); // ripete per 1024 volte la sequenza di lancio degli impulsi che, // essendo negativa, fa girare l'albero in senso antiorario delay(2000); // attende due secondi prima di ripetere l'intera sequenza }
28
Programma:consiglio Spesso il numero degli step termina lasciando alcune bobine (per intenderci quelle attivate da IN1,IN2,IN3,IN4.) sotto tensione provocando un riscaldamento del motore con assorbimento eccessivo di corrente. Si consiglia, al termine del ciclo inserire una procedura stop() con il seguente codice: digitalWrite(8,0); digitalWrite(9,0); digitalWrite(10,0); digitalWrite(11,0);
29
Utilizziamo un motorino slitta CD
E’ un motore stepper classico a due fasi e quattro fili (A+ A- B+ B-) che puoi, quindi, pilotare solo in bipolare mancando il centro degli avvolgimenti. (1 – 2) Si potrebbe pilotare con le uscite della scheda Arduino, non lo consiglio in quanto le correnti potrebbero bruciarla. Utilizziamo piuttosto un Dual Channel DC Motor Driver Module L298N PWM Speed Control.
30
Utilizziamo un motorino slitta CD
31
Utilizziamo un motorino slitta CD
Codice:avanti,fermo 1sec e poi torna indietro int coila1 = 10; int coila2 = 11; int coilb1 = 12; int coilb2 = 13; int i=0; int v=10; void setup() { pinMode(coila1, OUTPUT); pinMode(coila2, OUTPUT); pinMode(coilb1, OUTPUT); pinMode(coilb2, OUTPUT); }
32
Utilizziamo un motorino slitta CD
void loop() { for (i=0; i<65; i++){ digitalWrite(coila1, HIGH); digitalWrite(coila2, LOW); digitalWrite(coilb1, LOW); digitalWrite(coilb2, LOW); delay(v);
33
Utilizziamo un motorino slitta CD
digitalWrite(coila1, LOW); digitalWrite(coila2, LOW); digitalWrite(coilb1, HIGH); digitalWrite(coilb2, LOW); delay(v); digitalWrite(coila2, HIGH); digitalWrite(coilb1, LOW);
34
Utilizziamo un motorino slitta CD
digitalWrite(coila1, LOW); digitalWrite(coila2, LOW); digitalWrite(coilb1, LOW); digitalWrite(coilb2, HIGH); delay(v); } delay (1000);
35
Utilizziamo un motorino slitta CD
for (i=0; i<65; i++) { digitalWrite(coila1, LOW); digitalWrite(coila2, LOW); digitalWrite(coilb1, LOW); digitalWrite(coilb2, HIGH); delay(v); digitalWrite(coila2, HIGH); digitalWrite(coilb2, LOW);
36
Utilizziamo un motorino slitta CD
for (i=0; i<65; i++){ digitalWrite(coila1, LOW); digitalWrite(coila2, LOW); digitalWrite(coilb1, LOW); digitalWrite(coilb2, HIGH); delay(v); digitalWrite(coila2, HIGH); digitalWrite(coilb2, LOW); } delay(1000); }
37
Arduino HC-06 Bluetooth module
Piedinatura e cablaggio La disposizione ed il numero dei pin potrebbero variare da modulo a modulo, ma i più importanti sono : VCC, GND, TX, RX. La tensione di alimentazione può variare da 3.3V a 5V, le linee di comunicazione sono tolleranti ai 5V e funzionano anche a 3v3. L’alimentazione del modulo può essere fornita direttamente da Arduino, gli assorbimenti sono bassi ed è sicuro. GND va collegato a massa, occorre una massa comune tra il modulo e il dispositivo che lo utilizza.
38
Arduino HC-06 Bluetooth module
Una cosa importante è ricordasi di incrociare i pin TX e RX. Informazione scontata per chi sa come funziona una comunicazione seriale, tuttavia vale la pena di esplicitarlo. Il pin TX del modulo va collegato al pin RX del dispositivo, allo stesso modo, il pin RX del modulo va collegato al pin TX del dispositivo.
39
Accendere 3 led con App L’App in questione è Bluetooth RC Controller
Utilizzeremo le quattro frecce. Tre per accendere i led e una per spegnerli
40
Accendere 3 led con App Come si vede dalle impostazioni i codici (lettere) sono: F accende Led Giallo L accende led verde R accende led rosso B Spegne led
41
Accendere 3 led con App Codice: int LEDR = 8; int LEDV = 9; int LEDG = 10; int state; int flag=0; //si assicura che il seriale stampi //solo una volta lo stato
42
Accendere 3 led con App void setup() { // sets the pins as outputs: pinMode(LEDR, OUTPUT); pinMode(LEDV, OUTPUT); pinMode(LEDG, OUTPUT); Serial.begin(9600); }
43
Accendere 3 led con App void loop() {
//se viene inviata un dato, lo legge e lo salva in state if(Serial.available() > 0) { state = Serial.read(); flag=0; } if (state == 'R') { digitalWrite(LEDR, HIGH); if(flag == 0){ Serial.println("LED Rosso ON"); flag=1; }
44
Accendere 3 led con App else if (state == 'L') { digitalWrite(LEDV, HIGH); if(flag == 0){ Serial.println("LED Verde ON"); flag=1; }
45
Accendere 3 led con App else if (state == 'F') { digitalWrite(LEDG, HIGH); if(flag == 0){ Serial.println("LED Giallo ON"); flag=1; }
46
Accendere 3 led con App else if (state == 'B') {
digitalWrite(LEDR, LOW); digitalWrite(LEDV, LOW); digitalWrite(LEDG, LOW); if(flag == 0){ Serial.println("LED: off"); flag=1;} }
47
Accendere 3 led con App Prima di caricare il codice sulla scheda Staccare l’alimentazione alla scheda bluetooth. Avviare l’App sul cellulare e nella ricerca dispositivi selezionare HC-05. Il Pin è 1234
48
Fine………! Buon lavoro. Prof. Ponte Vincenzo Ovazza Sergio
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.