Introducción al PWM
( Pulse Whur Modulation) Es una técnica de modulación que genera impulsos de anchura variable para representar la amplitud de una señal de entrada analógica. Al igual que su ancho fijo la modulación de densidad de pulsos (PDM) primo, la salida de conmutación conmutación del transistor está en más de las veces por una señal de gran amplitud y se apague más de las veces por una señal de baja amplitud. La naturaleza digital (totalmente encendido o apagado) del circuito PWM es menos costoso de fabricar que un circuito analógico que no deriva con el tiempo.
Introducción PWM arduino
La modulación por ancho de pulsos (también conocida como PWM, siglas en inglés de pulsewidth modulation) de una señal o fuente de energía es una técnica en la que se modifica el ciclo de trabajo de una señal periódica. PWM tiene diferentes usos:
Atenuación de un LED.
Disponer de una salida analógica; si la salida digital está filtrada, esto proveerá de un voltaje entre el 0% y el 100%.
Generar señales de audio.
Proveer de un control de velocidad variable para motores.
Generar una señal modulada, por ejemplo para utilizar un LED infrarojo para control remoto.
Control paso a paso de Motores servo con una resolucion de 8 bits.
Si prendemos y apagamos la señal de alimentación de la carga (led o motor) lo suficientemente rápido como para que el parpadeo no se note, podríamos “simular” la
variación de luminosidad de un led o el cambio en la velocidad del motor:PWM para el pic
Esto funciona siempre y cuando no h agamos este “switcheo” más lento de 30 veces por segundo. A partir de ahí el “blink” del led se empezará a notar y el ojo humano captará ese
parpadeo. En el caso de un motor, éste se moverá en una forma pulsante. Lo que se hace con PWM es variar dinámicamente el “duty cycle” de manera que el tiempo de alta disminuya o aumente y en proporción inversa, el de baja aumente o disminuya dependiendo de si queremos una led más atenuado o más brillante, o un motor más lento o más rápido,
respectivamente. Esto lo podemos ver en un ejemplo práctico con Arduino, un led y una resistencia de 220 ohms.
Introducción al PWM para el PIC18F4550
El parámetro fundamental de una modulación PWM es la frecuencia (o su inverso el periodo) de modulación. En los PIC dicha frecuencia es programable (con ciertas limitaciones) en base a varias variables:
La frecuencia del oscilador principal Fosc
El pre-scaler (PRE) o divisor previo del timer TMR2 que puede tomar los valores 1:1, 1:4 o 1:16
El registro PR2 (0-255) asociado al timer TMR2
La frecuencia PWM responde a la fórmula: F_pwm = F_osc / [4 x PRE x (PR2+1)] o lo que es lo mismo, el periodo del PWM será el inverso de dicha frecuencia: T_pwm = [ (PR2+1) x 4 x PRE ] x Tosc El valor máximo del divisor previo PRE es 16 y el de (PR2+1) es 256. Por lo tanto la frecuencia PWM más baja posible será Fosc/16384. Para un oscilador de 20 MHz tenemos una Fpwm mínima de 1.22 KHz (20000/16384). Nota: el módulo PWM usa el timer TMR2, por lo que éste no podrá usarse como temporizador de propósito general mientras se esté usando PWM. Si que es posible usarlo (y ahorrarnos gastar otro timer) si queremos hacer saltar una interrupción cada cierto tiempo. El postscaler del TMR2 no tiene efecto sobre la frecuencia PWM, pero si influye sobre cuando salta (si está habilitada) la correspondiente interrupción (TMR2_flag). Si por ejemplo el post-scaler es 1:16 entonces la interrupción del TMR2 saltará cada 16 periodos del PWM. Introducción al ADC para el PIC18F4550
Un ADC convierte mide el voltaje V en un pin (que tendrá que estar declarado como entrada con el correspondiente registro TRISA) y lo convierte en un número. El voltaje se mide en referencia a un voltaje mínimo, Vref(-) , y a un voltaje máximo, Vref (+): V_norm = ( V – Vref(-) ) / (Vref(+) –Vref(-) )
La fórmula anterior corresponde a un voltaje normalizado. Si el voltaje V alcanza el máximo (Vref+) tendremos una salida de 1 y si se queda en el mínimo (Vref-) una salida de 0.
Normalmente Vref- suele ser Vss=GND=0V y Vref+ = Vcc = 5V, pero pueden usarse otros voltajes de referencia. Si por ejemplo queremos medir una señal que sabemos que oscila entre 2 y 3 voltios usaríamos Vref-=2 y Vref+=3. Así aprovecharíamos mejor el rango dinámico del conversor.
Como el microcontrolador no va a manejar números en coma flotante, el voltaje normalizado se expresa con un entero, convirtiendo el intervalo real [0,1] en el intervalo de niveles enteros entre [0 y Nmax-1]. La resolución del ADC es una característica fundamental y nos dice el número de niveles con los que cubrimos el intervalo [0,1]. Por ejemplo, en los PIC solemos tener una resolución de 10 bits, que representan 2^10=1024 niveles. El intervalo real [0,1) se aplicaría al intervalo [0,1023]. Si asumimos un rango de 5V, tendremos que la resolución de cada nivel es de r=5/1024 V=4.88 mV. Según la documentación de Microchip (esto puede variar para otros microcontroladores) cualquier voltaje entre [0 y r] (o por debajo de 0, lo que corresponde a V
Nivel
Voltaje
0
1
[r,2r]
2
[2r,3r]
…
…
1023
>1023r
Aunque un PIC puede tener del orden de 8-12 posibles canales (pines) de entrada analógica, solo tiene normalmente un único módulo ADC, lo que significa que no podemos tomar medidas simultáneas de varios canales. Si es necesario, lo que podemos hacer es ir conectando (seleccionando) los sucesivos canales al ADC para ir midiendo sus voltajes.
El proceso de una conversión ADC se divide en un tiempo de adquisición Ta (durante el cual un condensador interno se carga al voltaje exterior) y un tiempo de conversión Tc(durante el cual se desconecta el pin exterior y se cuantifica el voltaje del
condensador).
El tiempo de adquisición Ta depende de las características eléctricas del PIC (en particular de la capacidad del condensador). Si no se respeta este tiempo, el condensador no habrá alcanzado el nivel del voltaje exterior y la medida será incorrecta. Los datasheet de los PIC indican los Ta recomendados para diversas familias.
Otro aspecto importante de la adquisición es recordar que Microchip recomienda unaimpedancia máxima para el sensor (o lo que sea) suministrador de voltaje que está conectado a nuestro pin. En la mayoría de los casos se recomienda que dicha impedancia no supere los 2.5
Kohmios.
Según entiendo con mis escasos
conocimientos de electrónica, impedancias mucho mayores harían que (debido a corrientes de pérdida siempre presentes) el condensador no llegara nunca a cargarse al voltaje de entrada o tardase mucho en hacerlo, lo que daría lugar a que la medida
posterior fuese incorrecta. Si la impedancia de nuestra fuente es muy superior a la recomendada deberíamos plantearnos insertar un driver.
El tiempo de conversión Tc depende fundamentalmente del número de bits del conversor. La unidad básica es el llamado Tad, aproximadamente el tiempo necesario para ganar un bit adicional. La conversión total tarda entre 11 y 14 Tad (contando con la descarga final del condensador para estar listo para otra medida. El reloj del ADC se debe ajustar (como una fracción del oscilador principal) para que dicho Tad no sea inferior a un valor mínimo especificado en los datasheet. Por ejemplo para la familia PIC18F252/452 el Tad mínimo es de 1.6 usec y Tc = 14 Tad. En cambio para la familia PIC18F2520/4520 tenemos un Tad mínimo de 0.75 usec y un Tc = 11 Tad.
Nota: aunque es muy conveniente tener un ADC integrado dentro del micro controlador, si lo pensamos en términos de nivel de ruido, etc. las cercanías de un micro controlador con la líneas de reloj, rápidos cambios en las líneas digitales, comunicaciones, etc. no es el mejor sitio para ubicar un ADC. Esto quiere decir que si estamos muy interesados en la precisión, tal vez sería conveniente considerar un ADC aparte, que nos comunicaría los datos adquiridos a través de SPI o similares. Una vez dicha la advertencia nos centraremos en cómo usar de la forma más eficiente el ADC de un micro controlador (en este caso un PIC).