PWM (Pulse Width Modulation) o modulación de ancho de pulso es una tecnología estandarizada que tiene diversas aplicaciones tanto industriales como académicas.
Una de las aplicaciones más frecuentes es el control de la velocidad y la aceleración de motores de corriente directa (DC Motors) tanto para las implementaciones de una sola dirección como para las implementaciones más sofisticadas en dos direcciones usando circuitería de puente H. Esto incluye desde juguetes hasta los más avanzados sistemas industriales.
De acuerdo con nuestros amigos de Kompulsa, las aplicaciones de PWM se extienden a sistemas como:
- Controladores de abanicos de velocidad variable.
- Compresores VRF/HVAC.
- Control de motores DC para vehículos híbridos y eléctricos.
- Atenuadores de luces LED
Principios de Funcionamiento
PWM es un principio muy sencillo. Se trata de suministrar voltaje en una línea de potencia por un periodo y una frecuencia variable.
Así, mientras una implementación sencilla de control de motores sería encender o apagar el motor, suministrando voltaje continuo el 100% del tiempo, con PWM ajustamos la cantidad de tiempo para suministrar voltaje durante un periodo (ancho de pulso) determinado (10%, 20%, 50% etc.)
La figura 1 anterior ilustra la entrega de voltaje en un modelo PWM. El término «Ciclo de Trabajo» se refiere al porcentaje de tiempo en que el pulso se encuentra encendido. Así, un ciclo de trabajo del 100% es equivalente a suministrar voltaje al motor todo el tiempo.
En el caso de micro-controladores Arduino, se cuenta con diversos pines GPIO que son compatibles con protocolos PWM. Arduino cuenta con la función analogWrite(pin,value) que recibe un número de pin y un valor correspondiente al ciclo de trabajo. Se trata de un número entero entre cero (completamente apagado) y 255 (siempre encendido) de forma que si queremos usar un ciclo de trabajo del 50% usaríamos un valor de 128.
Ejemplo de Aceleración
Para proveer un efecto de aceleración en motores DC se suele modificar el valor del ciclo de trabajo a través del tiempo, por ejemplo la siguiente rutina lleva al ciclo de trabajo desde cero hasta 100% en un periodo de 2 segundos.
void accelerateInTwoSeconds(pin){ int intervalo = 10; //incremento de la velocidad por vez. int espera = 120000 / intervalo; // 120000 milisegundos distribuidos en internvalos n for (int velocidad=0; velocidad < 255; velocidad=velocidad + intervalo ){ analogWrite(pin, s); delay(espera); } }
Combinado con un puente H se puede producir un efecto de des-aceleración o frenado al invertir la polaridad del motor y aumentar gradualmente el suministro de energía al motor desde cero hasta 100% en polaridad inversa por un periodo corto de tiempo para luego apagar el motor.
Referencias:
- https://www.kompulsa.com/introduction-pwm-pulse-width-modulation-works/
- https://en.wikipedia.org/wiki/Pulse-width_modulation
- https://cdn.sparkfun.com/assets/resources/4/4/PWM_output_Arduino.pdf
- https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/
7,711 total views, 1 views today
Comentarios
Es un principio válido.