PWM
PWM son las siglas de Pulse Width Modulation (modulación por ancho de pulso), es una una señal de voltaje de pulso rectangular y periódico (los pulsos se repiten a intervalos de tiempo fijo) y se utiliza para enviar información o para modificar la cantidad de energía que se envía a una carga (emulando una señal analógica).
Es muy común utilizarlas para:
- Regular la intensidad de LEDs.
- Controlar el funcionamiento de servomotores.
- Controlar velocidad de motores de corriente continua.
- Controlar motores eléctricos de inducción o asincrónicos.
Una señal PWM se se caracteriza por:
- Sus valores alto y bajo de tensión: son los valores mínimo –bajo– y máximo –alto– de tensión que alcanza el pulso. Se corresponden con los dos estados lógicos bajo=0 y alto =1.
- Su frecuencia –freq-: es la inversa del intervalo de tiempo que tarda en realizarse un ciclo completo freq=1/T, se mide en hercios (Hz = ciclos por segundo). T=T1=T2=T3…, es decir el tiempo tarda cada ciclo se denomina periodo .
- Su ciclo de trabajo –duty cicle-: indica el porcentaje de tiempo que el pulso está a nivel alto.
machine.PWM( )
El constructor de clase machine.PWM es:
class machine.PWM(Pin(p) [, freq=f] [, duty=d] )
Los argumentos son:
- p: número del GPIO para ser utilizado como salida PWM.
- f: opcional (por defecto 5000) – frecuencia.
- d: opcional (por defecto 512) – ciclo de trabajo.
Los métodos .init ([, freq=f] [, duty=d]) y .deinit ([, freq=f] [, duty=d]) sirven para iniciar y desinicializar el objeto, pudiendo modificar la frecuencia y el ciclo de trabajo.
REGULACIÓN DE LA INTENSIDAD DE UN LED
Un LED es un diodo, que emite luz cuando se el voltaje que circula por él logra la polarización directa.
El voltaje de polarización depende de cada tipo de LED y se obtiene de la hoja de especificaciones técnicas. En la gráfica que hay a continuación se recogen las curvas de funcionamiento de tres LEDs de 5mm (rojo, verde y azul) de un fabricante concreto. Los voltajes de polarización son 1.7V, 2.2V y 2.5V respectivamente.
Una vez que se alcanza el voltaje de polarización el LED empieza a consumir energía y lucir. A partir de este punto, si se produce un pequeño aumento del voltaje, sube muy rápidamente la intensidad necesaria que equilibra la curva de el funcionamiento -al igual que la luminosidad-, por lo que no es un buen método para regular su funcionamiento, especialmente por los siguientes motivos:
- El LED no trabaja en puntos óptimos de funcionamiento, pudiendo correr el riesgo de acortar su vida útil o quemarlo.
- Se puede quemar el microcontrolador si uno o varios PINs consumen más energía que la que puede soportar.
Es mejor buscar un buen punto de funcionamiento y regular la luminosidad a través de la modulación por ancho de pulsos – PWM.
En la gráfica se han dibujado con rayas discontinuas los puntos de equilibrio de los tres LEDs alimentados con 3.3V y protegidos cada uno de ellos una resistencia de 100Ω. Se puede comprobar que se cumple la ley de Ohm (I=V/R) en los tres casos: para el LED rojo 0,013A=(3.3V-2.0V)/100Ω, para el LED verde 0,006A=(3.3V-2.7V)/100Ω y para el LED azul 0,0045A=(3.3V-2.85V)/100Ω.
Utilizando el siguiente circuito se van a escribir tres ejemplos de programación por modulación por ancho de pulsos, para controlar el funcionamiento de LEDs:
- LED rojo, se programa en un paso.
- LED verde, se programa en un paso, con los valores de frecuencia y ciclo de trabajo por defecto (freq=5000 y duty=512), que se modifican inmediatamente. A los 2 segundos se apaga el PWM.
- LED azul, se programa haciendo que su intensidad suba desde 0 hasta el máximo (punto de equilibrio) y vuelva a bajar hasta 0.
from machine import Pin, PWM import time #________________________________________________________________________ # PIN ROJO - GPIO4 pwm4 = PWM(Pin(4), freq=20000, duty=512) # Crea el objeto PWM y lo configura en un paso # ======================================================================= # PIN VERDE - GPIO2 pwm2 = PWM(Pin(2)) # Crea el objeto PWM print(pwm2.freq()) # Imprime la frecuencia establecida por defecto pwm2.freq(10000) # Establece una nueva frecuencia print(pwm2.duty()) # Imprime el ciclo de trabajo establecido por defecto pwm2.duty(200) # Establece un nuevo ciclo de trabajo time.sleep(2) # Detiene el programa 2 segundos pwm2.deinit() # Apaga el PWM en el LED # ======================================================================= # PIN AZUL - GPIO15 pwm15 = PWM(Pin(15), freq=78100) # Crea el objeto PWM con una frecuencia de 78100 Hz. while True: # Inicia un bucle... for i in range(2**10): # Modifica la frecuencia desde 0 hasta 1023 (2**10=1024)... pwm15.duty(i) time.sleep(0.001) # ... cambiándola cada milisegundo. for i in range(2**10-1,-1,-1): # Modifica la frecuencia desde 1023 hasta 0 pwm15.duty(i) time.sleep(0.001) # ... cambiándola cada milisegundo.
Leave a Reply
Tu correo electrónico está seguro.
You must be logged in to post a comment.