PWM: un pin que solo puede estar encendido o apagado, simulando un punto intermedio
- 465componentes en el banco de trabajo
- 43placas funcionando ahora
- 1.00xtiempo real, en todas las placas
Un pin de salida digital tiene exactamente dos estados. No puede quedarse en 2.5 V para que un LED brille a la mitad. La modulación por ancho de pulso logra el mismo efecto de otra forma: enciende y apaga el pin lo bastante rápido, y cambia cuánto tiempo de cada ciclo pasa encendido, y cualquier cosa conectada que no pueda reaccionar tan rápido como la conmutación solo ve el promedio, que se comporta como un voltaje intermedio real.
El circuito de arriba es el programa integrado fade del Arduino Uno, ejecutándose de verdad. analogWrite() en el pin 9 pone el timer 1 en PWM de 8 bits con corrección de fase y un preescalador de 64, lo que da 16 MHz dividido entre 64 por 510, unos 490 Hz. Ese número no es una suposición; es lo que el hardware del timer realmente produce con ese preescalador y ese modo, y una vez configurado, el timer mantiene el ciclo útil por sí solo. El sketch solo cambia el registro de comparación, treinta veces por segundo, recorriendo una tabla de 64 valores con la forma de un ciclo de (1 - coseno) dividido entre 2, y eso es lo que hace que la luz parezca respirar en lugar de subir en línea recta: el ojo percibe el brillo de forma más o menos logarítmica, así que una rampa lineal parece apresurarse en la componentee alta.
Eso es PWM por hardware: una vez configurado el timer, el CPU queda libre para hacer otra cosa entre actualizaciones, y la forma de onda del pin nunca falla aunque el sketch esté ocupado un momento. El PWM por software, la alternativa en un pin que no tiene un timer detrás, hace que el CPU cambie el pin él mismo según un horario, lo que cuesta tiempo de CPU en proporción a la frecuencia y puede tener variaciones si otra cosa necesita el procesador en el momento equivocado.
Lo que ves en el LED tampoco es la conmutación instantánea de encendido y apagado. La sonda del LED de Mokxi es un promedio de corta duración de su propio brillo, con una constante de tiempo cercana a 8 milisegundos, que está en el mismo rango de lo que tarda el ojo en responder a un cambio. A 490 Hz, cada ciclo de PWM dura unos 2 milisegundos, bastante más rápido de lo que ese promedio puede seguir, así que el LED muestra su ciclo útil con un margen de un par de por ciento en lugar de parpadear una vez por ciclo. No es un truco visual que imita un desenfoque; es el mismo promedio que hace una retina real, calculado de la misma forma.
Abre el circuito y mira cómo la respiración toma su ritmo. La comparación que vale la pena hacer después es con el ESP32-C3, que trae la misma respiración de dos formas: fade la genera por software y pwmfade se la pasa a LEDC, el controlador PWM del propio chip, en cualquier pin en lugar de solo seis fijos. Los dos están en las páginas del simulador de placas.
Ármalo en la vida real
Abre el editor, cambia un valor y mira cómo el número cambia con él. Nada que instalar y sin necesidad de cuenta.