Omet navegació

6.6 Integrat L293 PWM - Escut A_UNO

Una mica de teoria

Si volem disminuir  la velocitat de gir del motor podem utilitzar la ordre PWM. Aquesta ordre fa que la eixida digital en lloc de ser 0V o 5V passe a estar modulada per un pols d'amplada variable.

Mira la gràfica de  Timothy Hirzel.

PWM
Timothy Hirzel


La ordre és analogWrite(pin,amplada); on l'amplada varia entre 0 i 255. Mira els exemples següents de més avall.

1) Motor 1 (D) (H) port 8 PWM port 10

Usarem el escut A_UNO per fer anar el motor 1 amb el port 8 de forma horària (H) i amb PWM (port 10).

// Motor_1-2 PWM
// Copyleft (C) 2019 Carles Ferrando Garcia
// License: GNU GPL v3 http://www.gnu.org/copyleft/gpl.html 
// Control d'un o dos motors amb el driver motor L293DNE i Arduino, amb el shield A_UNO

//definim ports motor 1 o motor dret
//Recorda que el Motor 1 el fem girar horariament si activem el pin 8, i el fem girar anti horariament  si activem el pin 9. Si activem el PWM 10 i el motor 1 tindrà una ona quadrada
int contacte1motor1 = 8;    
int contacte2motor1 = 9;    
int activaPWMmotor1 = 10;

//definim ports motor 2 o motor esquerre
// Recorda que el Motor 2 el fem girar horariament si activem el pin 12, i el fem girar anti horariament si si activem el pin 13. Si activem el PWM 11 i el motor 1 tindrà una ona quadrada
int contacte1motor2 = 12;    
int contacte2motor2 = 13;    
int activaPWMmotor2 = 11;



void setup() {
// Configura els ports motor 1 con eixides
pinMode(contacte1motor1, OUTPUT);
pinMode(contacte2motor1, OUTPUT);
pinMode(activaPWMmotor1, OUTPUT);

// Configura els ports motor 2 con eixides
pinMode(contacte1motor2, OUTPUT);
pinMode(contacte2motor2, OUTPUT);
pinMode(activaPWMmotor2, OUTPUT);
  
  
}

 
void loop() {

  //Activem els PWM
  digitalWrite(activaPWMmotor1, HIGH);
  digitalWrite(activaPWMmotor2, HIGH);


 // Engega el motor_1 H i el polsem
analogWrite(contacte1motor1, 127);//Reduïm velocitat M1 al 50% Pols va de 0 a 255
delay(2000); //Mantin-lo engegat dos segons

//Atura el motor 1
digitalWrite(contacte1motor1, LOW);
digitalWrite(contacte2motor1, LOW);
delay(2000); //Mantin-lo aturat dos segons
  
}// Final bucle infinit

2) Motor 1 (D) (aH) port 9 PWM port 10

Usarem el escut A_UNO per fer anar el motor 1 amb el port 9 de forma anti horària (H) i amb PWM (port 10).

Motor1 PWM (D) (aH) p9p10
C. Ferrando (CC BY-NC-SA)

// Motor_1-2 PWM
// Copyleft (C) 2019 Carles Ferrando Garcia
// License: GNU GPL v3 http://www.gnu.org/copyleft/gpl.html 
// Control d'un o dos motors amb el driver motor L293DNE i Arduino, amb el shield A_UNO

//definim ports motor 1 o motor dret
//Recorda que el Motor 1 el fem girar horariament si activem el pin 8, i el fem girar anti horariament  si activem el pin 9. Si activem el PWM 10 i el motor 1 tindrà una ona quadrada
int contacte1motor1 = 8;    
int contacte2motor1 = 9;    
int activaPWMmotor1 = 10;

//definim ports motor 2 o motor esquerre
// Recorda que el Motor 2 el fem girar horariament si activem el pin 12, i el fem girar anti horariament si si activem el pin 13. Si activem el PWM 11 i el motor 1 tindrà una ona quadrada
int contacte1motor2 = 12;    
int contacte2motor2 = 13;    
int activaPWMmotor2 = 11;



void setup() {
// Configura els ports motor 1 con eixides
pinMode(contacte1motor1, OUTPUT);
pinMode(contacte2motor1, OUTPUT);
pinMode(activaPWMmotor1, OUTPUT);

// Configura els ports motor 2 con eixides
pinMode(contacte1motor2, OUTPUT);
pinMode(contacte2motor2, OUTPUT);
pinMode(activaPWMmotor2, OUTPUT);
  
  
}

 
void loop() {

  //Activem els PWM
  digitalWrite(activaPWMmotor1, HIGH);
  digitalWrite(activaPWMmotor2, HIGH);


 // Engega el motor_1 aH i el polsem
analogWrite(contacte2motor1, 127);//Reduim velocitat M1 al 50%  Pols va de 0 a 255
delay(2000); //Mantin-lo engegat dos segons

//Atura el motor 1
digitalWrite(contacte1motor1, LOW);
digitalWrite(contacte2motor1, LOW);
delay(2000); //Mantin-lo aturat dos segons
  
}// Final bucle infinit

3) Motor 2 (E) (H) port 12 PWM port 11

Usarem el escut A_UNO per fer anar el motor 2 amb el port 12 de forma horària (H) i amb PWM (port 11).

Motor2 PWM (E) (H) p12p11
C. Ferrando (CC BY-NC-SA)

// Motor_1-2 PWM
// Copyleft (C) 2019 Carles Ferrando Garcia
// License: GNU GPL v3 http://www.gnu.org/copyleft/gpl.html 
// Control d'un o dos motors amb el driver motor L293DNE i Arduino, amb el shield A_UNO

//definim ports motor 1 o motor dret
//Recorda que el Motor 1 el fem girar horariament si activem el pin 8, i el fem girar anti horariament  si activem el pin 9. Si activem el PWM 10 i el motor 1 tindrà una ona quadrada
int contacte1motor1 = 8;    
int contacte2motor1 = 9;    
int activaPWMmotor1 = 10;

//definim ports motor 2 o motor esquerre
// Recorda que el Motor 2 el fem girar horariament si activem el pin 12, i el fem girar anti horariament si si activem el pin 13. Si activem el PWM 11 i el motor 1 tindrà una ona quadrada
int contacte1motor2 = 12;    
int contacte2motor2 = 13;    
int activaPWMmotor2 = 11;



void setup() {
// Configura els ports motor 1 con eixides
pinMode(contacte1motor1, OUTPUT);
pinMode(contacte2motor1, OUTPUT);
pinMode(activaPWMmotor1, OUTPUT);

// Configura els ports motor 2 con eixides
pinMode(contacte1motor2, OUTPUT);
pinMode(contacte2motor2, OUTPUT);
pinMode(activaPWMmotor2, OUTPUT);
  
  
}

 
void loop() {

  //Activem els PWM
  digitalWrite(activaPWMmotor1, HIGH);
  digitalWrite(activaPWMmotor2, HIGH);


 // Engega el motor_2 H i el polsem
analogWrite(contacte1motor2, 128);//Reduim velocitat M1 al 50% Pols va de 0 a 255
delay(2000); //Mantin-lo engegat dos segons

//Atura el motor 2
digitalWrite(contacte1motor2, LOW);
digitalWrite(contacte2motor2, LOW);
delay(2000); //Mantin-lo aturat dos segons
  
}// Final bucle infinit

4) Motor 2 (E) (aH) port 13 PWM port 11

Usarem el escut A_UNO per fer anar el motor 2 amb el port 13 de forma anti horària (aH) i amb PWM (port 11).

Motor2 PWM (E) (aH) p13p11
C. Ferrando (CC BY-NC-SA)

// Motor_1-2 PWM
// Copyleft (C) 2019 Carles Ferrando Garcia
// License: GNU GPL v3 http://www.gnu.org/copyleft/gpl.html 
// Control d'un o dos motors amb el driver motor L293DNE i Arduino, amb el shield A_UNO

//definim ports motor 1 o motor dret
//Recorda que el Motor 1 el fem girar horariament si activem el pin 8, i el fem girar anti horariament  si activem el pin 9. Si activem el PWM 10 i el motor 1 tindrà una ona quadrada
int contacte1motor1 = 8;    
int contacte2motor1 = 9;    
int activaPWMmotor1 = 10;

//definim ports motor 2 o motor esquerre
// Recorda que el Motor 2 el fem girar horariament si activem el pin 12, i el fem girar anti horariament si si activem el pin 13. Si activem el PWM 11 i el motor 1 tindrà una ona quadrada
int contacte1motor2 = 12;    
int contacte2motor2 = 13;    
int activaPWMmotor2 = 11;



void setup() {
// Configura els ports motor 1 con eixides
pinMode(contacte1motor1, OUTPUT);
pinMode(contacte2motor1, OUTPUT);
pinMode(activaPWMmotor1, OUTPUT);

// Configura els ports motor 2 con eixides
pinMode(contacte1motor2, OUTPUT);
pinMode(contacte2motor2, OUTPUT);
pinMode(activaPWMmotor2, OUTPUT);
  
  
}

 
void loop() {

  //Activem els PWM
  digitalWrite(activaPWMmotor1, HIGH);
  digitalWrite(activaPWMmotor2, HIGH);


 // Engega el motor_2 aH i el polsem
analogWrite(contacte2motor2, 128);//Reduim velocitat M1 al 50% Pols va de 0 a 255
delay(2000); //Mantin-lo engegat dos segons

//Atura el motor 2
digitalWrite(contacte1motor2, LOW);
digitalWrite(contacte2motor2, LOW);
delay(2000); //Mantin-lo aturat dos segons
  
}// Final bucle infinit