Nel precedente articolo abbiamo imparato a utilizzare gli ingressi e le uscite analogiche di Arduino, abbiamo approfondito le tecniche utilizzate dal microcontrollore di Atmel per generare dei segnali variabili con continuità nel tempo, introducendo concetti come PWM e duty cycle, e abbiamo utilizzato queste nuove conoscenze per realizzare due progetti. In questo articolo andremo avanti, utilizzando i concetti appresi per pilotare un motore DC (direct current, a corrente continua).
Introduzione
Controllare un motore con Arduino è differente dall'accendere o spegnere dei led, o dal generare suono con un buzzer e i motivi sono essenzialmente due: innanzitutto un motore richiede una corrente maggiore di quanta non possa essere fornita da un pin di Arduino UNO; inoltre i motori sono dei carichi cosi detti induttivi e possono a loro volta generare corrente attraverso un fenomeno chiamato induzione, che può in alcuni casi essere in grado di danneggiare il circuito o la scheda se non preso nella dovuta considerazione. Per affrontare questi due nuovi aspetti del nostro progetto avremo bisogno di introdurre due nuovi componenti discreti: il transistor e il diodo: iniziamo questa lezione quindi con degli importanti richiami di elettronica ed elettrotecnica.
I motori DC e l'induzione elettromagnetica
I motori (e nello specifico il motore a corrente continua utilizzato in questo progetto) rientrano nei carichi definiti induttivi. L'induzione è un fenomeno per il quale una corrente che scorre in un conduttore (un filo di rame ad esempio), genera un campo magnetico; variando la corrente nel conduttore il campo magnetico varia e può a sua volta generare una corrente (più precisamente una forza elettro-motrice, come quella generata da una pila in un circuito) se questo campo magnetico passa attraverso un circuito chiuso (si dice che il flusso del campo magnetico si concatena con un conduttore elettrico): il campo elettrico e il campo magnetico sono pertanto intimamente collegati (per questo si parla di campo elettro-magnetico, figura 1).
Un motore DC è costituito internamente da degli avvolgimenti di rame (detti spire) all'interno dei quali viene fatta circolare della corrente; la corrente circolante nelle spire, come abbiamo appena detto, genera un campo magnetico il quale interagisce con quello generato da un piccolo magnete permanente situato all'interno della cassa del motore (il campo magnetico generato dalle spire ha le stesse caratteristiche di quello generato da una calamita, in particolare ha un polo Nord e un polo Sud, quindi i poli opposti dei due campi magnetici si attraggono e i simili si respingono, provocando il movimento); ad ogni giro del motore la polarità delle spire viene invertita da un collarino detto commutatore, si invertono quindi i poli del campo magnetico generato dalle spire che sono solidali all'albero del motore (detto rotore), ma non quelli del campo generato dal magnete solidale alla cassa del motore (per questo chiamato statore) e quello che ne risulta è un movimento continuo e senza interruzioni (figura 2).
Il fenomeno dell'induzione magnetica (o meglio elettromagnetica, vista la stretta relazione fra il campo elettrico e quello magnetico) è reversibile: così come un circuito percorso da corrente genera un campo magnetico, se poniamo un circuito (chiuso) in un campo magnetico e facciamo variare il campo (muovendo ad esempio il conduttore nel campo e variando il flusso del campo concatenato con il conduttore), il circuito si comporterà come se al suo interno fosse presente una pila (o meglio una forza elettro-motrice) che farà circolare corrente al suo interno. Se muoviamo l'albero del motore, scollegato da qualunque fonte di energia, il campo generato dal magnete al suo interno attraversa le spire avvolte intorno all'albero variando a seconda dell'angolo di rotazione e generando quindi una tensione ai capi del motore.
Questa tensione risulta molto piccola se ruotiamo l'albero con le nostre mani: la variazione del campo magnetico infatti è proporzionale alla velocità di rotazione. Come prova possiamo collegare un led ai capi del motore e provare a girare l'albero (se il led non si illumina provate a girare in senso opposto), il led dovrebbe accendersi: abbiamo appena azionato un generatore di corrente. Diventa necessario tenere conto di questo effetto nel momento in cui il motore è in funzione: se togliamo l'alimentazione al motore infatti, l'albero (che avrà acquistato una certa energia cinetica) continuerà a ruotare finchè non si fermerà e genererà quindi, per il fenomeno appena descritto, una tensione opposta a quella di alimentazione anche considerevole che può [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2355 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
L’argomento affrontato permette di gestire molte situazioni di azionamento elettrico, pensiamo alle classiche stampanti 3D ma anche a qualcosa di più “semplice” come una semplice movimentazione negli automatismi domestici ed industriali.
c’e un errore nella figura 7: h5 va sul positivo
Il pin 5 del ponte H va a GND come da data sheet.
ciao, scusa informazione sbagliata, dovevo scrivere che 15h va sul positivo che è già stato corretto.
L’errore è un altro: il pin 16 va collegato al positivo 5V : nella figura il cavallotto rosso è inserito nel negativo
Grazie per la segnalazione. Figura corretta. Nella figura 6 è indicato correttamente come da datasheet.
Salve,
mi risulta di essere un abbonato platinum ma non vengo riconosciuto come tale,
come devo fare ?
grazie
Salve Eduardo,
dal tuo avatar non risulti abbonato. Forse stai utilizzando due account differenti… Ti suggerisco di seguire le indicazioni del sito di supporto.emcelettronica.com dove in caso di necessità puoi aprire un ticket ed essere seguito nell’attivazione.
Ciao Emanuele,
riesco ad entrare in questo forum (per esempio) ma non riesco ad entrare nella pagina di supporto,
si riesce a risolvere ?
grazie dell’interessamento
Ritorno al discorso motore DC:
io ho seguito le istruzioni ( premesso che sono un neofita della programmazione) anzi in verità copiato nella scketch il listato, ma il motore si comporta in modo strano: cambia direzione da solo, dopo alcuni secondi si ferma.
Analizzando il programma non trovo nessun motivo per un comportamento del genere:
può essere che arduino tenga in memoria alcuni dati di programmazioni precedenti?
Si deve resettare in modo particolare la scheda prima di caricare un altro programma?
Grazie
Mauro
Ti consiglio di provare pezzi di codice alla volta. Studiando anche questo link come base molto semplice http://it.emcelettronica.com/controllo-motore-con-arduino-uno
Salve, ha provato ad aggiungere un piccolo condensatore come suggerito nell’articolo?
Basta un condensatore da 10-100 uF tra il positivo e il negativo de motore DC. Il motore collegato sulla breadboard è fonte di disturbi elettromagnetici e può provocare comportamenti “strani” (il micro può resettarsi ad esempio). Il condensatore funge da stabilizzatore e dovrebbe migliorare il comportamento del circuito.
Salve,
non riesco a fare nessun download ne ad entrare nella pagina del supporto tecnico,
riuscite a rimediare ?
grazie mille
Sono un neofita e trovo queste lezioni molto interessanti e spiegate con linguaggio semplice e chiaro. Mi permetto solo di suggerire di far precedere l’illustrazione dei collegamenti della breadboard da uno schemino elettrico del circuito che si intende realizzare. Quando il circuito è semplice lo schema elettrico potrebbe essere superfluo ma, quando il circuito si complica (e sicuramente le prossime lezioni mostreranno circuiti più complessi), uno schema elettrico sarà utilissimo per capire meglio la disposizione dei componenti e dei collegamenti circuitali.
Grazie per il commento e suggerimento 😉
Buonasera e buon anno.
Complimenti per l’articolo ! Magari uno schema elettrico sarebbe gradito.
Sono abbonato da poco, pensionato con la passione delle schede arduino e raspberry.
Le chiedo se sa dell’esistenza di driver per motori dc (max 12 v e max 25 W) pilotabili da I2C al fine di evitare l’utilizzo di molti pin di arduino.
Inoltre le chiedo come potrei modificare il programma per ottenere un avviamento e una fermata morbida del motore, diciamo come una specie di rampa di salita e di discesa del valore di alimentazione.
Grazie