Generación de Señales Simuladas de Tipo Analógico con PWM
¿Qué significa una señal "simulada"?
Los microprocesadores y microcontroladores son dispositivos digitales por naturaleza, lo que significa que no pueden generar señales analógicas directamente. Sin embargo, podemos utilizar una técnica llamada Modulación por Ancho de Pulso (PWM, por sus siglas en inglés) para simular una señal analógica utilizando sistemas digitales.
¿Cómo funciona la Modulación por Ancho de Pulso (PWM)?
El principio de PWM se basa en el comportamiento de las cargas eléctricas en los dispositivos electrónicos. Para entenderlo mejor, observemos cómo se representa una señal en una gráfica:
- Eje horizontal: Representa el tiempo y muestra cómo evoluciona la señal.
- Eje vertical: Representa el voltaje. En este caso, tomaremos un ejemplo de 0 a 5V.
La señal se divide en ciclos repetitivos. Dentro de cada ciclo, podemos ajustar el tiempo en que la señal permanece en alto (5V) y en bajo (0V).
Por ejemplo:
- Si la señal está activa el 25% del tiempo, el dispositivo percibirá 1.25V en promedio.
- Si está activa el 50% del tiempo, el dispositivo percibirá 2.5V en promedio.
- Si está activa el 75% del tiempo, el dispositivo percibirá 3.75V en promedio.
Aunque la señal siempre oscila entre 0V y 5V, el receptor la percibe como un promedio de voltaje, similar a una señal analógica.
Frecuencia y Ciclo de Trabajo (Duty Cycle)
Para que este efecto funcione correctamente, la señal debe alternarse a una frecuencia muy alta (miles de veces por segundo).
- La frecuencia se mide en Hertz (Hz) o kilohertz (kHz).
- El ciclo de trabajo indica el porcentaje del tiempo que la señal permanece en alto dentro de un ciclo.
En el ESP32, por ejemplo, si configuramos un ciclo de trabajo del 50%, el dispositivo recibirá 2.5V en promedio, aunque en realidad solo recibe pulsos de 0V y 5V.
Implementación de PWM en ESP32
Para configurar el PWM en ESP32, utilizaremos la librería LEDC, la cual sigue esta estructura:
- Timer: Genera la señal base con una frecuencia específica.
- Canal: Controla el ciclo de trabajo de la señal.
- GPIO: Envía la señal al dispositivo (por ejemplo, un LED).
Configuración del Timer
El ESP32 permite elegir entre dos tipos de relojes para el PWM:
La elección entre estos dos métodos dependerá de la precisión y estabilidad necesarias para el proyecto.
Configuración del Canal PWM
El canal nos permite establecer qué porcentaje de uso tendrá la señal en un pin específico.
- El ciclo de trabajo puede ajustarse en tiempo real para modificar la señal de salida.
- Podemos definir valores como 25%, 50%, 75%, etc.
Resolución del PWM
La resolución determina qué tan preciso será el control del ciclo de trabajo. Se define en bits, lo que permite dividir el tiempo en fracciones más pequeñas:
- 8 bits: 256 niveles de intensidad.
- 12 bits: 4096 niveles de intensidad.
- Mayor número de bits = Mayor precisión.
No todas las aplicaciones requieren alta precisión, pero en ciertos casos puede ser útil.
Funciones Adicionales (Opcionales)
Aunque no las utilizaremos en este caso, el ESP32 ofrece otras funciones avanzadas:
- Fade Control: Permite hacer transiciones suaves entre diferentes niveles de PWM, útil para efectos de atenuación en luces o motores.
- Sistema de Interrupciones: Genera una señal a intervalos regulares, funcionando como una especie de alarma interna en el microcontrolador.
Salida de la Señal PWM
Una vez configurada, la señal sale por el GPIO y puede utilizarse para controlar dispositivos como LEDs, motores o sistemas de audio.
Por ejemplo, podemos regular la iluminación de un LED entre 0% y 100% ajustando el ciclo de trabajo de la señal PWM.