Módulo 4

PWM: Control de servomotores y velocidad de motores DC

Periféricos Digitales

ESP32 Mecatrónica IoT UNAM

Introducción Teórica

La modulación por ancho de pulso (PWM) es una técnica que se utiliza para controlar la cantidad de energía entregada a un dispositivo electrónico. En Mecatrónica y en Internet de las Cosas (IoT), PWM es de particular importancia ya que es la base para el control de servomotores y la velocidad de motores DC. Permite el control preciso de la posición y la velocidad, lo cual es crucial en aplicaciones de automatización y robótica.

En la industria, el PWM se utiliza para regular la velocidad de motores de corriente continua en cintas transportadoras, grúas, vehículos eléctricos, entre otros. También se utiliza en servomotores que se encuentran en robots y sistemas de posicionamiento.

Importancia: Dominar el PWM es esencial para cualquier ingeniero mecatrónico.

Explicación Técnica Detallada

El ESP32 es un microcontrolador de bajo costo con capacidades de PWM integradas. Para configurar el PWM, se deben configurar varios registros importantes:

Temporizador
Genera la señal PWM base
Canal PWM
Configuración del canal específico
Pin de salida
Configuración del pin físico

A continuación, se muestra un código de ejemplo utilizando la biblioteca ESP32Servo:

C++ - Control de Servomotor
#include 

Servo myservo;  // create servo object

void setup() {
  myservo.attach(2);  // attaches the servo on pin 2
}

void loop() {
  myservo.write(90);  // tell servo to go to 90 degrees
  delay(1000);        // wait 1 second
  myservo.write(0);   // tell servo to go to 0 degrees
  delay(1000);        // wait 1 second
}

Este código configura un servomotor en el pin 2 y lo mueve entre 0 y 90 grados con intervalos de 1 segundo.

Ejercicios Prácticos Visuales

1

Control de servomotor

Básico 30 min

Objetivo: Controlar la posición de un servomotor usando PWM.

Materiales: ESP32, Servomotor SG90, cables, protoboard.

Conexiones: Servomotor al pin 2 del ESP32, VCC y GND.

Resultados esperados: El servomotor se mueve entre 0 y 90 grados.

2

Control de velocidad motor DC

Intermedio 40 min

Objetivo: Controlar la velocidad de un motor DC usando PWM.

Materiales: ESP32, Motor DC, Módulo L298N, fuente de alimentación, cables.

Resultados esperados: El motor DC cambia su velocidad gradualmente.

C++ - Control de Motor DC con PWM
// Control de velocidad de motor DC con L298N
int motor1Pin1 = 27; 
int motor1Pin2 = 26; 
int enable1Pin = 14; 

// Setting PWM properties
const int freq = 30000;
const int pwmChannel = 0;
const int resolution = 8;
int dutyCycle = 200;

void setup() {
  // Configure PWM functionalities
  ledcSetup(pwmChannel, freq, resolution);
  ledcAttachPin(enable1Pin, pwmChannel);
  
  // Set motor direction pins as outputs
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  
  Serial.begin(115200);
}

void loop() {
  // Move the DC motor forward at maximum speed
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH); 
  
  // Gradually increase speed
  for(dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    ledcWrite(pwmChannel, dutyCycle);
    delay(15);
  }
  
  delay(1000);
  
  // Gradually decrease speed
  for(dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    ledcWrite(pwmChannel, dutyCycle);   
    delay(15);
  }
  
  delay(1000);
}

Proyecto Aplicado

Robot seguidor de líneas con PWM

Aplicación práctica en mecatrónica: Desarrollo de un robot autónomo que sigue una línea utilizando control PWM para ajustar la velocidad de los motores según las lecturas de los sensores.

Integración con sensores/actuadores: Sensores infrarrojos de línea y motores DC con control de velocidad variable.

Lista de materiales:
  • ESP32
  • 2x Motores DC con reductora
  • Módulo driver L298N
  • 2-4 Sensores IR de línea
  • Fuente de alimentación (7.4V)
  • Chasis robótico
  • Cables y conectores
  • Protoboard
Funcionalidades del proyecto:
  • Detección automática de línea
  • Ajuste dinámico de velocidad
  • Corrección de trayectoria con PWM
  • Manejo de curvas y intersecciones

Evaluación y Troubleshooting

Problemas comunes:
  • Servo no se mueve o tiembla
  • Motor DC no responde al PWM
  • Alimentación insuficiente
  • Conexiones incorrectas
  • Frecuencia PWM inadecuada
  • Interferencia electromagnética
Soluciones:
  • Verificar alimentación externa para servos
  • Revisar configuración de canales PWM
  • Usar fuente de alimentación adecuada
  • Verificar conexiones VCC, GND y señal
  • Ajustar frecuencia según componente
  • Usar capacitores de filtrado
Criterios de evaluación:
  • El servomotor se mueve a diferentes ángulos precisos
  • El motor DC varía su velocidad suavemente
  • Control estable sin oscilaciones
  • Respuesta adecuada a comandos de control
  • Integración exitosa con sensores