Omet navegació

6.1.- Integrat L293

 

1- Esquema elèctric.

El següent esquema elèctric ens permet treballar amb motor connectats a fonts d'alimentació externes o piles de 6 a 19V.

Recorda que cal connectar el negatiu de la font d'alimentació al GND en la placa Arduino.

Esquema L293DNE i Arduino

2. Funcionament del integrat L293D. Taula de la veritat

A l'explicació que segueix anem a esmentar sols les potes de l'integrat L293D. (No els confongau amb el pins d'Arduino). 

S'alimenta d'un voltatge de 5V a les potes 8 i 16.

El pol negatiu o GND es posa a les potes 4 , 5, 12, i 13.

El motor A és posa a les potes 3 i 6. El motor B és posa a les potes 11 i 14.

Si la pota 1 no rep alimentació elèctrica no funciona el motor A.  Si la pota 9 no rep alimentació elèctrica no funciona el motor B. 

Les potes 2 i 7 determinen amb si el funcionament del motor A és avant o enrere. Mireu la taula de la veritat.

Les potes 10 i 15 determinen amb si el funcionament del motor B és avant o enrere. Mireu la taula de la veritat.

Taula de la veritat:

Pota 2 Pota 7
Motor A
Aturat (LOW) Aturat (LOW) Aturat
Engegat (HIGH)
Aturat (LOW)
Engegat i avant
Aturat (LOW)
Engegat (HIGH) Engegat i enrrere
Engegat (HIGH) Engegat (HIGH) Aturat
     
Pota 15
Pota 10
Motor B
Aturat (LOW) Aturat (LOW) Aturat
Engegat (HIGH)
Aturat (LOW)
Engegat i avant
Aturat (LOW)
Engegat (HIGH) Engegat i enrrere
Engegat (HIGH) Engegat (HIGH) Aturat

3. Shield per Arduino Uno i Arduino clònica

Aquest és el shield i la forma d'alimentar-lo de forma externa si li posem fins a dos motors, o de forma interna si sols volen utilitzar les clemes per fixar els fils a la targeta Arduino.

Alimentació Shield Arduino

El procediment per tindre el nostre circuit és:

  • Agafem paper de transferència tèrmica comprat en una tenda de electrònica, i imprimim amb una impressora lasser el dibuix amb el Shield per Arduino Uno o per Clòniques d'Arduino (amb més pins).
  • Retallen el paper per fer sols un circuit.
  • Posem el paper sobre la placa i el enganxem amb cita aïllant.. Posem a sobre un drap net i planxem amb la planxa a mitja temperatura. No moveu el paper.
  • En acabar de transferir tot el dibuix, preparem la barreja d'àcid sulfúric (1 part) , peròxid d'hidrogen (1 part) i aigua (2 parts).
  • Introduïm la plaqueta i esperem que es dissolga tot el coure llevat del que està protegit per el dibuix.
  • Amb unes pinces traguem el circuit, el llavem amb aigua, el eixuguem.
  • Netegem el circuit amb acetona.
  • El eixuguem i fem els forats amb un trepant elèctric petit.
  • Soldem el socal del L293D i els 6 connector per als cables.
  • Posem el integrat L293D al socal, connectem el cables com es veu al començament d'aquest full i provem el programa de baix.

 

4. Programa de mostra per provar el motors A i B connectats mitjançant el Shield Arduino2Motor

// Copyleft (C) 2015 Carles Ferrando Garcia
// License: GNU GPL v3 http://www.gnu.org/copyleft/gpl.html 
// funcions motorA i motorB
// En aquest programa utilitzem les funcions motorAonH() , motorAoff() , motorAonA() , motorAonHpols(x) , motorAonApols(x)  [on x varia de 0 a 100]
// En aquest programa utilitzem les funcions motorBonH() , motorBoff() , motorBonA() , motorBonHpols(x) , motorBonApols(x)  [on x varia de 0 a 100]

//definim ports motor A
int contacte1motorA = 11;    
int contacte2motorA = 12;    
int activamotorA = 9;

//definim ports motor B
int contacte1motorB = 4;    
int contacte2motorB = 7;    
int activamotorB = 3;

void setup() {
 
// Configura els ports motor A con eixides
pinMode(contacte1motorA, OUTPUT);
pinMode(contacte2motorA, OUTPUT);
pinMode(activamotorA, OUTPUT);

// Configura els ports motor B con eixides
pinMode(contacte1motorB, OUTPUT);
pinMode(contacte2motorB, OUTPUT);
pinMode(activamotorB, OUTPUT);


    }
      
void loop() 
{
motorAonH(); 
delay(2000); 
motorAoff(); 
delay(2000); 

motorAonA();
delay(2000);  
motorAoff(); 
delay(2000); 

//motorAonHpols(56);
//delay(1000);
//motorAoff();
//delay(1000);

//motorAonApols(56);
//delay (1000);
//motorAoff();
//delay(1500);

motorBonH(); 
delay(1000); 
motorBoff(); 
delay(2000);

motorBonA();
delay(2000);  
motorBoff(); 
delay(2000);

//motorBonHpols(56);
//delay(1000);
//motorBoff();
//delay(1000);

//motorBonApols(56);
//delay (1000);
//motorBoff();
//delay(1500);

}

//___________ FUNCIONS MOTOR A
      
//
//anem a crear la funció activar el motor A en sentit Horari   
void motorAonH()
    {
// activa el motorA per poder engegar-lo
digitalWrite(activamotorA, HIGH);
// engeguem  el motorA en sentit Horari
digitalWrite(contacte1motorA, LOW);   
digitalWrite(contacte2motorA, HIGH);  
    }
      
//
//anem a crear la funció per aturar el motor A
void motorAoff()
  {
// desactivem el motorA per poder parar-lo
digitalWrite(activamotorA, LOW); 
  }

//
//anem a crear la funció engega motor A en sentit Antihorari
void motorAonA()
  {
// activa el motorA per poder engegar-lo
digitalWrite(activamotorA, HIGH);
// engeguem el motorA en sentit Antihorari
digitalWrite(contacte1motorA, HIGH);  
digitalWrite(contacte2motorA, LOW);     
   }


//Anem a crear la funcio engega el motor A en sentit Horari polsat al «pols %» polsat
void motorAonHpols (int pols)
  {
 float escriuD= pols/100.0*255.0;
 int escriuE=int(escriuD);  
// activa el motorA per poder engegar-lo
digitalWrite(activamotorA, HIGH);
// engeguem  el motorA en sentit enrere al pols% del puls possible
analogWrite(contacte1motorA,0);   
analogWrite(contacte2motorA,escriuE);  
  }


//Anem a crear la funcio engega el motor A en sentit Antihorari polsat al «pols %» polsat
void motorAonApols (int pols)
  {
 float escriuD= pols/100.0*255.0;
 int escriuE=int(escriuD);  
// activa el motorA per poder engegar-lo
digitalWrite(activamotorA, HIGH);
// engeguem  el motorA en sentit enrere al pols% del puls possible
analogWrite(contacte1motorA,escriuE);   
analogWrite(contacte2motorA,0);  
  } 
//_________ FUNCIONS MOTOR B
      
//
//anem a crear la funció activar el motor B en sentit Horari   
void motorBonH()
    {
// activa el motor B per poder engegar-lo
digitalWrite(activamotorB, HIGH);
// engeguem  el motor B en sentit Horari
digitalWrite(contacte1motorB, LOW);   
digitalWrite(contacte2motorB, HIGH);  
    }
      
//
//anem a crear la funció per aturar el motor B
void motorBoff()
  {
// desactivem el motor B per poder parar-lo
//digitalWrite(activamotorB, LOW); 
digitalWrite(contacte1motorB, LOW);  
digitalWrite(contacte2motorB, LOW); 
  }

//
//anem a crear la funció engega motor B en sentit Antihorari
void motorBonA()
  {
// activa el motorB per poder engegar-lo
digitalWrite(activamotorB, HIGH);
// engeguem el motorB en sentit Antihorari
digitalWrite(contacte1motorB, HIGH);  
digitalWrite(contacte2motorB, LOW);     
   }


//Anem a crear la funcio engega el motor B en sentit Horari polsat al «pols %» polsat
void motorBonHpols (int pols)
  {
 float escriuDB= pols/100.0*255.0;
 int escriuEB=int(escriuDB);  
// activa el motorB per poder engegar-lo
digitalWrite(activamotorB, HIGH);
// engeguem  el motorB en sentit enrere al pols% del puls possible
analogWrite(contacte1motorB,0);   
analogWrite(contacte2motorB,escriuEB);  
  }


//Anem a crear la funcio engega el motor B en sentit Antihorari polsat al «pols %» polsat
void motorBonApols (int pols)
  {
 float escriuDB= pols/100.0*255.0;
 int escriuEB=int(escriuDB);  
// activa el motorB per poder engegar-lo
digitalWrite(activamotorB, HIGH);
// engeguem  el motorB en sentit enrere al pols% del puls possible
analogWrite(contacte1motorB,escriuEB);   
analogWrite(contacte2motorB,0);  
  } 
  

Ací tens el programa en un format més optim per Arduino IDE: MotorAB.ino.zip

Les funcions del Motor A utilitzades al programa tenen el significat:

  • motorAonH()--> Engega el motor A en sentit Horari
  • motorAoff() --> Atura el motor A
  • motorAonA()--> Engega el motor A en sentit Antihorari
  • motorAonHpols(x) --> Engega el motor A en sentit Horari polsat al x%,  on x varia de 0 a 100
  • motorAonApols(x)  --> Engega el motor A en sentit Antihorari polsat al x%,  on x varia de 0 a 100

Les funcions del Motor B utilitzades al programa tenen el significat:

  • motorBonH()--> Engega el motor B en sentit Horari
  • motorBoff() --> Atura el motor B
  • motorBonA()--> Engega el motor B en sentit Antihorari
  • motorBonHpols(x) --> Engega el motor B en sentit Horari polsat al x%,  on x varia de 0 a 100
  • motorBonApols(x)  --> Engega el motor B en sentit Antihorari polsat al x%,  on x varia de 0 a 100

Si sols anem a utilitzar el motor A, no definirem ni les variables globals del motor B ni configurarem els ports del motor B a la secció void setup, així comentarem  aquestes línies, les funcions del motor B no cal que les comentem, recordeu sols comentarem les definicions de les variables globals i la secció setup que no anem a gastar, d'aquesta forma no perdrem pins que podrem utilitzar amb altres dispositius.

A continuació tens un vídeo mostrant-te el funcionament del shield amb Arduino amb aquest programa.