venerdì 7 giugno 2013

Arduino Tutorial 9: Pilotare motore dc tramite ponteH

Con questo tutorial vorrei chiarire come pilotare un motore DC in modo bi-direazionale con 4 porte digitali di arduino (che possono essere ridotte a 2 con l'aggiunta di 2 ulteriori transistor), con un circuito composto da 4 transistor (di cui 2 NPN e 2 PNP) e 4 diodi. Come ben sapete i motori elettrici hanno bisogno di una "centralina" per essere comandati. Questo componente spesso è composto (se si parla di motori dc) da 4 transistor e 4 diodi (molto spesso sono presenti anche dei condensatori e resistenze), quindi una cosa realizzabile senza problemi in casa in pochi minuti. 

Lista dei componenti
  1. 2x BD177 transistor
  2. 2x BD178 transistor
  3. 4x IN4007 diodo
I transistor sono i componenti fondamentali e attivi del sistema. Ci sono due tipologie di transistor quelli NPN e quelli PNP. La differenza tra i due è che gli NPN funzionano permettendo alla corrente positiva di attraversarli (cioè corrente in arrivo da + e in uscita dal transistor verso motore) solo se il polo base è connesso al +, invece PNP permettono alla corrente in arrivo dal motore di attraversali e andare verso la massa, solo se la base è connessa al -.

NPNPNP

In cosa consiste
Il ponte ad H è cosi' chiamato per la forma dello schema, è formato da 4 transistor e 4 diodi che hanno il ruolo di permettere o no il flusso di corrente in un dato senso all'interno del sistema. Questi verranno accesi a coppie per ruotare il motore in un senso o nell'altro, gli altri due saranno opportunamente chiusi per evitare corti circuiti. In poche parole grazie a 4 switch è possibile decidere la direzione della corrente all'interno del motore e quindi trasformarla in movimento in un dato senso di rotazione. Ecco uno schema semplice di cosa si ottiene:

 transistor1  transistor2  transistor3  transistor4 Risultato sperimentale
1001 Rotazione in senso orario
0110 Rotazione in senso antiorario 
0000 Motore libero
0101 Frenata elettromagnetica
1010 Frenata elettromagnetica

Tutto ciò consiste in un Ponte ad H davvero minimale.
E' pensato per pilotare motori DC da 3 a 36v con un assorbimento massimo di 3A continui e 7A pulsati. L'architettura del sistema è pensata per ridurre il più possibile le possibilità di baking di componenti (bruciare tutto per errore di wiring). I Transistor consigliati sono enormi ed è impossibile bruciarli con una batteria da 6 volt in qualsiasi combinazione proviate.


Come potete vedere il circuito è molto semplice. Fate molta attenzione al wiring dei transistor, controllate sui datasheet linkati sopra la referenza dei pin e connettetela come spiegato. Testate prima il funzionamento di un singolo transistor delle due tipologie. Dopo aver chiarito i collegamenti di entrambi, iniziate con metodo a duplicare e specularizzare lo schema ; ). Dopo aver fatto il wiring come mostrato qui sopra, collegate le basi dei 4 transistor alle porte digitali  2 3 4 5 di Arduino e caricate lo sketch seguente:

int motorPin1 =  2;    
int motorPin2 =  3;    
int motorPin3 =  4;    
int motorPin4 =  5;    

void setup()   {                
  pinMode(ledPin1, OUTPUT);     
  pinMode(ledPin2, OUTPUT);     
  pinMode(ledPin3, OUTPUT);     
  pinMode(ledPin4, OUTPUT);            
}

void loop()                     {
  digitalWrite(ledPin1, HIGH);  //gira in senso orario per 1 sec
  digitalWrite(ledPin2, LOW);   
  digitalWrite(ledPin3, LOW);    
  digitalWrite(ledPin4, HIGH);  
  delay(1000);
  digitalWrite(ledPin1, LOW);   //gira in senso antiorario per 1 sec
  digitalWrite(ledPin2,HIGH);   
  digitalWrite(ledPin3, HIGH);    
  digitalWrite(ledPin4, LOW);   
  delay(1000);                  //l'uso di delay è deprecato, è solo un esempio ;)
}

Dopo aver alimentato il motore e caricato lo sketch dovreste ottenere 1 secondo di rotazione in un senso e 1 secondo di rotazione nel senso opposto. Questo è solo un piccolo esempio delle incredibili funzionalità di questo sistema, che permette di pilotare qualsiasi motore dc applicato alla robotica amatoriale senza avere problemi.
In questo caso per l'esempio ho utilizzato un motore delle amate MINI4WD e un alimentatore da 6v 1A.

Se avete dei problemi a far funzionare il circuito commentate o scrivete sul forum.

Nessun commento:

Posta un commento

Commenta