Generación de señales PWM con PIC16F84A

7
WM es el acrónimo de "Pulse Width Modulation", expresión que designa un modo concreto de modulación, la llamada "Modulación de impulsos en anchura". Inicialmente, esta técnica se uti- lizaba casi exclusivamente para el control de potencia y velocidad de motores de corriente continua, pero con el tiempo se ha ido ampliando el campo de aplicación, por ejemplo, en las fuentes de alimentación conmutadas, onduladores c.c.-c.a., etc.; con ella se ha conseguido realizar dispositivos mucho más eficientes, más com- pactos y más ligeros. El presente artículo se destina a describir en qué forma puede utilizarse un microcon- trolador PIC16F84 para generar una señal del tipo PWM con la que se regulará la emisión luminosa de un Led y se controlará la velocidad de un pequeño motor de corriente continua: con esta base, el lector estará capacitado para desarrollas sus propias aplicaciones. ¿Qué es la modulación PWM? ¿Qué es la modulación PWM? Antes de la puesta a punto de la técnica PWM, la velo- cidad de un motor de corriente continua se regulaba In Electronics por Pietro Loglisci In Electronics - n.08 1 > 8 Se considera la forma de utilizar el microcontrola- dor Microchip PIC16F84 (uno de las más corrien- tes y económicos del mercado) para generar vía software una señal modulada por impulsos (PWM) que puede emplearse en numerosas aplicaciones. Gener Gener ación de señales ación de señales PWM con el micr PWM con el micr ocontr ocontr o o - - lador PIC16F84 lador PIC16F84

Transcript of Generación de señales PWM con PIC16F84A

Page 1: Generación de señales PWM con PIC16F84A

WM es el acrónimo de "Pulse WidthModulation", expresión que designa un modo

concreto de modulación, la llamada "Modulación deimpulsos en anchura". Inicialmente, esta técnica se uti-lizaba casi exclusivamente para el control de potencia yvelocidad de motores de corriente continua, pero con eltiempo se ha ido ampliando el campo de aplicación, porejemplo, en las fuentes de alimentación conmutadas,onduladores c.c.-c.a., etc.; con ella se ha conseguidorealizar dispositivos mucho más eficientes, más com-pactos y más ligeros. El presente artículo se destina a

describir en qué forma puede utilizarse un microcon-trolador PIC16F84 para generar una señal del tipoPWM con la que se regulará la emisión luminosa de unLed y se controlará la velocidad de un pequeño motorde corriente continua: con esta base, el lector estarácapacitado para desarrollas sus propias aplicaciones.

¿Qué es la modulación PWM?¿Qué es la modulación PWM?

Antes de la puesta a punto de la técnica PWM, la velo-cidad de un motor de corriente continua se regulaba

In Electronics

por Pietro Loglisci

In Electronics - n.08 1

>

8

Se considera la forma deutilizar el microcontrola-dor Microchip PIC16F84(uno de las más corrien-

tes y económicos delmercado) para generarvía software una señalmodulada por impulsos

(PWM) que puedeemplearse en numerosas

aplicaciones.

GenerGeneración de señalesación de señalesPWM con el micrPWM con el microcontrocontroo--

lador PIC16F84lador PIC16F84

Page 2: Generación de señales PWM con PIC16F84A

2 In Electronics - n.08

>

El micrEl microcontrocontrolador olador PIC16F84PIC16F84

Este es uno de los más conocidos y ampliamente utilizados microcontroladores de 8bits del mercado. Su clásica configuración de 18 patillas (Dual in Line 9 + 9) se repro-duce en estas páginas, junto al esquema de bloques interno. La tendión de alimenta-ción se aplica a las patillas VDD (positivo) y Vss (negativo, masa), que puede estarentre 2 y 6 V (valor típico 5 V). La frecuencia de reloj depende de las característicasdel cuarzo o de la red RC conectada entre las patillas OSC1/CLKLIN y OSC2/CLKOUT;habitualmente se utiliza la frecuencia es de 4 MHz, pero el integrado puede funcionarcon una frecuencia de reloj de hasta 20 MHz (PIC16F84A). La CPU, del tipo RISC(Reduced Instruction Set Computer), puede elaborar hasta 35 instrucciones que se eje-cutan en un solo ciclo máquina (excepto las instrucciones desalto, que precisan de dos ciclos). La elevada velocidad con-seguida se debe a la técnica específica utilizada, denomina-da "pipeline" de dos estados, que consiste en ejecutar unainstrucción mientras en el registro de instruciones se cargala instrucción siguiente para su descodificación. El micro-controlador dispone de 15 registros especiales, los másimportantes de los cuales son el Program Counter PC y elRegister Accumulator W. El primero aumenta automática-mente durante la ejecución de un programa para que puedacontener la dirección de la siguiente instrucción a ejecutar; elsegundo lo utiliza el microcontrolador para efectuar numero-sas operaciones aritméticas y de memorización simultáneade datos. El RESET depende de la línea MCLR (patilla 4). Elmicrocontrolador PIC16F84 dispone de 13 líneas de I/O bidi-reccionales instaladas en dos puertos, RA0÷RA4 yRB0÷RB7. Cada línea puede conducir 25 mA como máximo.Para gestionar las interrupciones se dispone de cuatromodalidades, que pueden depender de eventos internos oexternos al microcontrolador. La línea principal de interruptexterno se dirige a RB0/INT, mientras que el TIMER TMR0puede utilizarse como interrupt interno.

Características Técnicas- Arquitectura RISC con 35 instruccionesi.- La mayor parte de las instrucciones se ejecuta en un ciclo máquina.- Máxima frecuencia de reloj: 20 MHz, ciclo máquina 20 nanosegundos.- 1024 localizaciones (14 bits) de memoria de programa.- 68 bytes de memoria RAM.- 64 bytes de memoria EEPROM.- Localizaciones de memoria de programa de 14 bits.- Localizaciones de memoria de datos de 8 bits.- 15 Registros Especiales.- Área de Stack de ocho niveles.- Direccionamiento inmediato, directo, indirecto.- Cuatro métodos posibles de interrupt:

1. Interrupt externo mediante la línea RB0/INT;2. Interrupt interno con TIMER TMR0;3. Interrupt externo sobre las líneas RB4÷RB7;4. Interrupt para escritura hasta localización de datos EEPROM.

Características de los Periféricos- 13 líneas bidireccionales de I/O;- Importante corriente entregada/absorbida sobre cada línea:

1. 25 mA máx consumidos (sink) en cada puerta;2. 25 mA máx entregados (source) por cada puerta;

- TMR0: contador temporizados de 8 bits con preescaler programable.Especificaciones técnicas:

Page 3: Generación de señales PWM con PIC16F84A

In Electronics - n.08 3

mediante un potenciómetro o reos-tato en serie. Este "poco fino"método comportaba un gran gastode energía, con mucha generaciónde calor. Cuanta más potencia,mayor desperdicio de energía. Unbuen día alguien tuvo una ideafeliz: aplicar toda la potencia dispo-nible, pero no continuadamentesino en forma de impulsos más omenos breves. Así fue como nacie-ron los circuitos "chopper", que enun primer momento se realizaron abase de semiconductores discretos.Puede hacerse un sencillo experi-mento con una pila y una bombilli-ta de filamento, como las de las lin-ternas de bolsillo. Soldar un polo dela pila a la bombillita con un tramode hilo conductor y cerrar el circui-to aproximando a mano el otropolo, a través de otro tramo de hilo.Al hacer un contacto intermitente,juntanto y separando rápidamenteel terminal, se observará que, gra-cuas a la inercia de la resistencia ya la persistencia del ojo humano, labombillita lucirá de forma casi esta-ble, aunque con una intensidadluminosa inferior. Se está aplicandoíntegramente la tensión de la pila

pero sólo a intervalos. Dos paráme-tros tienen suma importancia: eltiempo que la bombillita permanecealimentada (Ton) y el tiempo entredos impulsos de tensión (Toff).Dentro de un cierto periodo detiempo, cuanto menor sea la sumade tiempos en que la bombillitaqueda sin alimentar, mayor es laintensidad luminosa emitida. Deaquí sale la definición de "ciclo detrabajo" (duty cycle): es el porcen-taje que indica el tiempo durante elcual la señal permanece a nivel alto,durante un periodo dado. El ejem-plo típico de un ciclo de trabajo del50 % es una señal perfectamentecuadrada, como las que entreganlos generadores de señal. Una ten-sión de cero voltios corresponde aun ciclo de trabajo del 0 %. En lafig. 1, Ton representa el periododurante el cual la bombillita recibela tensión máxima y Toff es el tiem-po en que no recibe tensión alguna.Modificando la duración relativa deestos tiempos se consigue modifi-car la tensión media que llega a loscontactos de la lámpara y, por con-siguiente, se regula su luminosidad.En la práctica, se actúa sobre Ton yse mantiene constante la duracióndel ciclo (Ton + Toff). O sea quesólo se modifica el porcentaje rela-tivo de Ton y Toff respecto al diclototal. Así, la señal PWM puededefinirse como una señal de tensiónrectangular en la cual se ha previstouna determinada distribución tem-poral entre impulso alto e impulsobajo. Admitiendo que Ttot no varía,al alargar la duración de Ton, la deToff se acorta necesariamente.Aplicando una PWM a la alimenta-ción de un motor, si Ton representael 10 % del ciclo, la tensión apare-ce en bornes del motor a intervalosmuy cortos y el ciclo de trabajo esbajo. Pero si Ton representa el 90 %del ciclo, el motor recibe tensión aintervalos proporcionalmente muylargos y el ciclo de trabajo es eleva-do.

Fig. 1

Fig. 2

Fig. 3

¿Qué v¿Qué ventajas ofrentajas ofrece la moduece la modu--lación PWM? lación PWM?

Si para la generación de ondasPWM se recurre a un microcontro-lador, basta con un solo bit de sali-da para comandar el paso de On aOff; resulta un circuito sumamentesencillo y muy económico. Por otraparte, para pilotar cargas con varia-ción de potencia, la señal PWMpermite elevados rendimientosreduciendo a un nivel mínimo elcalor generado por el sistema decontrol y por la carga, mientras queésta trabaja siempre en condicionesóptimas: todo abierto o todo cerra-do. Pero la ventaja principal de la

modulación PWM es poder utilizarimpulsos de ataque de frecuenciaconstante: este concepto prefigurael uso de sistemas sincronizadospor un reloj (clock), es decir, porsistemas digitales. Actualmente, lageneración de señales PWM se rea-

Page 4: Generación de señales PWM con PIC16F84A

4 In Electronics - n.08

;Programa experimental para generar una seæal PWM

;----------------------------------------------------------------------------------------------------------------

; DIRECTIVAS

;----------------------------------------------------------------------------------------------------------------

PROCESSOR 16F84

INCLUDE "P16F84.INC"

;----------------------------------------------------------------------------------------------------------------

; DECLARACIÓN DE VARIABLES

;----------------------------------------------------------------------------------------------------------------

CICLO E Q U 0C ;Para memorizar el ciclo de trabajo.

CONTATORE_1 E Q U 0D ;Para memorizar el multiplicador d Ton.

CONTATORE_2 E Q U 0E ;Memoria necesaria para DELAY_15µs.

;----------------------------------------------------------------------------------------------------------------

; VECTOR DE RESET

;----------------------------------------------------------------------------------------------------------------

O R G 00 ;Inicio en Reset.

;----------------------------------------------------------------------------------------------------------------

; CONFIGURACIÓN DE LAS PUERTAS

;----------------------------------------------------------------------------------------------------------------

BSF STATUS,RP0 ;Paso por PÆgina1.

MOVLW b’00000000’ ;Se configura el

M O V W F TRISB ;PORTB en USCITA.

BCF STATUS,RP0 ;Regreso a PÆgina0.

;-----------------------------------------------------------------------------------------------------------------

; PROGRAMA PRINCIPAL;-----------------------------------------------------------------------------------------------------------------

MOVLW d’127’ ;Se define el ciclo deM O V W F CICLO ;trabajo (para un 50 %).

INIZIO MOVF CICLO,W ;Transferencia del contenido deM O V W F CONTATORE_1 ;CICLO en CONTATORE_1 (CONTATORE_1

;contiene 127).T_ON BSF P O RTB,0 ;Se pone a 1 la salida RB0 (encendido

;del diodo LED).CALL DELAY_15µs ;Se llama la temporizazión y se DECFSZ CONTATORE_1,f ;repite per el nœmero de veces G O TO T_ON ;especificado en CONTATORE_1 (aquí:127).MOVLW d’255’ ;Se carga CONTATORE_1 con 255 (valorM O V W F CONTATORE_1 ;mÆximo cargable en un octeto).MOVF CICLO,w ;Transferencia de CICLO a W.SUBWF CONTATORE_1,f ;Resta de 255 y el contenido de

;CICLO (aquí: 255-127 = 128).T_OFF BCF P O RTB,0 ;Se lleva a 0 la salida RB0 (se apaga

;el diodo LED).CALL DELAY_15µs ;Se llama la temporización y se DECFSZ CONTATORE_1,f ;repite por el nœmero de veces G O TO T_OFF ;especificado en CONTATORE_1 (aqui: 128).

G O TO INIZIO;----------------------------------------------------------------------------------------------------------------; TEMPORIZACIÓN;---------------------------------------------------------------------------------------------------------------- DELAY_15µs MOVLW d’2’

M O V W F CONTATORE_2TEMPO N O P

DECFSZ CONTATORE_2,f

G O TO TEMPO

G O TO FINE

FINE RETURN

END

LISTA D O E N A S S E M B L E RA S S E M B L E R

>

Page 5: Generación de señales PWM con PIC16F84A

In Electronics - n.08 5

jo del 50 y del 90 %, respectiva-mente. A estas tres señales PWM(digitales) corresponden 3 valoresanalógicos diferentes de la señal desalida: suponiendo una tensión dealimentación de 5 voltios, a un ciclode trabajo del 10 % correspondeuna tensión de salida de 0,5 voltios;al 50 % la salida seria de 2,5 V y al90 % se obtendrían 4,5 voltios.Pueden aplicarse estas correspon-dencias al ejemplo de la bombillita(fig. 2); se alimenta de la pila de 9voltios a través de un interruptor enserie. Cerrando este interruptor 50milisegundos, abriéndolo 50 mili-segundos y repitiendo esta opera-ción 10 veces por segundo, la ten-sión media aplicada a la bombillitano es la que produce el máximoencendido de ésta: es como si seaplicasen 4,5 voltios. El ciclo detrabajo es del 50 % y la frecuenciade modulación es de 10 hertzios.Esta frecuencia basta para un sen-cillo ejemplito como éste, pero esclaramente insuficiente para unaaplicación práctica. En los alimen-tadores conmutados se utilizan fre-cuencias comprendidas entre 1 y200 kHz. Hay varias razones paraello: en el ejemplo de la fig. 2, si secierra el interruptor 10 segundos yse abre otros 10 segundos, aunqueel ciclo de trabajo siga siendo del50 %, la bombillita no luce como sise alimentase con 4,5 voltios, sino

que aparece 10 segundos apagada y10 segundos encendida. Asi, paraobtener una iluminación homogé-nea equivalente a la obtenida conuna pila de 4,5 voltios debe aumen-tarse la frecuencia hasta que la iner-cia resistiva de la bombillita y,sobre todo, la de la visión humana,hagan "desaparecer" los periodosde apagado.

CrCreando un preando un primer primer prooggrramaamaparpara el PICa el PIC

Aquellos lectores que tienen algúnconocimiento previo sobre modula-ción PWM, y los que ya conocenlos rudimentos de la programaciónde microcontroladores PIC, segura-mente ya saben utilizar esta técnicapara encender y apagar un diodo, opara hacerlo parpadear. Ahora setrata de encenderlo hasta un ciertonivel de luminosidad. Más adelantese verá cómo hacerlo progresiva ylentamente, creando el llamado"efecto crepuscular". El sencilloprograma descrito en el diagramade flujo de la fig. 3 es capaz deencender un Led a una intensidadinferior a la máxima. La configura-ción del PortB no merece demasia-dos comentarios: es el que se ocupade encender y apagar el Led. Loselementos que sí deben considerar-se a fondo son:

a) la definición del ciclo (para el cálculo de Ton);

b) el cálculo de Toff, y c) la temporización.

Un microcontrolador PIC con suoscilador interno controlado por uncristal de cuarzo de 4 MHz entregaimpulsos de 1 µs, correspondientesa una frecuencia de 1 MHz. Estafrecuencia es demasiado elevadapara generar señales PWM, si seacepta como normativa la gamaentre 1 y 200 kHz. Por tanto, debereducirse mediante un ciclo de tem-porización: se enciende el Led, se

liza con circuitos basados en puer-tas lógicas (dispositivos TTL yCMOS) y microprocesadores omicrocontroladores programables(por ejemplo, el PIC16F84) queintegran circuitos capaces de gene-rar de forma autónoma señalesmoduladas con la técnica PWM,con la ayuda de muy pocos compo-nentes periféricos específicos.

FFrrecuencia de modulación ecuencia de modulación

Aunque el porcentaje relativo entreTon y Toff pueda variar, y que, encierto sentido, este valor pueda con-siderarse un dato analógico, laseñal PWM es una señal digitaldado que la tensión de salida sólopuede asumir uno de los dos valoresdigitales posibles: o máximo onulo. Y eso, independientementedel instante considerado. Tensión ocorriente se entregan a la carga enforma de impulsos repetitivos.Como el ancho de banda es consi-derable, la técnica PWM permiteobtener a la salida cualquier valorde tensión comprendido entre cerovoltios y la tensión de alimentación.En la fig. 1, el caso a muestra unasalida PWM con un ciclo de traba-jo del 10 %, es decir, que la señal esmáxima durante un 10 % del perio-do y baja durante el 90 % restante.Los casos b y c representan unasalida PWM con un ciclo de traba-

>Fig. 4

Page 6: Generación de señales PWM con PIC16F84A

6 In Electronics - n.08

temporiza, se apaga el Led, se tem-poriza y se reinicia el ciclo. En rea-lidad, la duración de Ton y Toff esel resultado de un cálculo: Ton es elproducto de una constante definidapreviamente (CICLO) y guardadaen una memoria (CONTATORE_1)y la duración de una temporización(de algunos microsegundos) cuyoobjetivo es reducir la frecuencia demodulación hasta que quede com-prendida entre 1 y 100 kHz. Toff esla diferencia entre la duración totalde CICLO (Ttot) y la duración deTon: se dejará al propio PIC el tra-bajo de calcularlo. Como el micro-controlador trabaja con bytes de 8bits cuyo valor máximo puede lle-gar a 255 (decimal), se le da al PICla orden de calcular la diferencia255-Ton. El resultado, multiplicadopor el valor de la temporización,proporciona la duración del tiempode apagado del Led (Toff).

La tabla de la fig. 4 ilustra sobre elfuncionamiento descrito.

En estas páginas se reproduce elprograma en Assembler que rigetoda esta actividad. Como puedeobservarse, se ha implantado unatemporización de 15 microsegun-dos (aunque podría ser más larga)en función de la carga y del efectoque se desa obtener. La oscilaciónde encendido del Led no es fácil deapreciar visualmente: sí podrádetectarse midiendo la tensión desalida del PIC con un polímetro(tester) situado en la posición delectura de tensiones continuas(CC); también pueden instalarsedos Leds idénticos, uno junto alotro, conectando uno de ellos alpuerto PORTB0 y el otro alPORTB1. El primero experimenta-rá las variaciones de alimentaciónderivadas de la modulación PWM,mientras que el otro, que quedaráalimentado de forma permanente,sirve de referencia. Pueden hacersemás pruebas modificando solamen-

te el valor memorizado en CICLO.Si, por ejemplo, en lugar de 127 seintroduce 5, el microcontroladorcalculará automáticamente un Tonde 75 µs (5 x 15) y un Toff 3.750 µs(250 x 15). Al comparar la ilumina-ción que emiten el Led pilotado porla onda PWM y el permanentemen-te encendido, la diferencia se obser-va a simple vista, mejor cuantomenores son los niveles de ilumina-ción, ya que el ojo humano distin-gue mejor las diferencias de luz aniveles bajos que a niveles altos.Sustituyendo el Led por un motorde corriente continua precedido deuna etapa buffer puede obtenerse elmismo efecto, si bien en este casoel resultado se manifestará por dife-rentes velocidades del motor (fig.5). El tipo de semiconductores y losvalores de las resistencias de basedependen del tipo de motor, másexactamente, de la tensión de ali-mentación de éste y de la corriente

necesaria para su funcionamiento.

EfEfecto crecto creepuscularpuscular

El truco consiste en confiar al PICel cálculo de la Toff, evitando asíerrores en la distribución de lasduraciones entre impulso alto eimpulso bajo en cada ciclo concre-to, lo que equivale a automatizar lasoperaciones de paso a un programacapaz de generar una señal PWMque se incremente por sí sola,creando un efecto crepuscular. Coneste sistema es suficiente memori-zaar un cero (0) en la zona CICLOde la memoria y añadir al programauna sola instrucción (INCFCICLO) para que el Led se encien-da de forma progresiva. Véase elprograma modificado que se inclu-ye en estas páginas: con él se pro-duce el encendido del Led con efec-to alba. Para obtener el efecto inver-so (crepúsculo, al apagarse gradual-

>

Fig. 5

Page 7: Generación de señales PWM con PIC16F84A

In Electronics - n.08 7

mente el Led) basta con interveniren la primera instrucción que apare-ce inmediatamente tras las etiquetasT_On y T_Off: para que se arran-que T_On con la instrucción BSFPORTB,0 habrá que escribir BCFPORTB,0, y en lugar de iniciarT_Off con la instrucción BCFPORTB,0, basta con escribir BSFPORT,0. Para actuar sobre la pen-diente de las rampas o para modifi-car la duración del efecto crepuscu-lar (es decir, para ralentizarlo o ace-lerarlo) deberá intervenirse sobre laduración de la subrutina de tempo-rización.

;Programa para generar una seæal PWM con efecto crepuscular (alba) ;--------------------------------------------------------------------------; DIRECTIVAS;--------------------------------------------------------------------------

PROCESSOR 16F84INCLUDE "P16F84.INC"

;--------------------------------------------------------------------------; DECLARACIÓN DE VARIABLES;--------------------------------------------------------------------------CICLO E Q U 0C ;Para memorizar el ciclo de trabajo.CONTATORE_1 E Q U 0D ;Para memorizar el multiplicador deTon.CONTATORE_2 E Q U 0E ;Memoria necesaria para DELAY_15µs.;--------------------------------------------------------------------------; VECTOR DE RESET;--------------------------------------------------------------------------

O R G 00 ;Inicio en Reset.

;--------------------------------------------------------------------------; CONFIGURACIÓN DE LAS PUERTAS;--------------------------------------------------------------------------

BSF STATUS,RP0 ;Paso por PÆgina1.MOVLW b’00000000’ ;Se configura el M O V W F TRISB ;PORTB en SALIDA.BCF STATUS,RP0 ;Retorno a PÆgina0.

;-------------------------------------------------------------------------- PROGRAMA PRINCIPAL;--------------------------------------------------------------------------

BSF P O RTB,1 ;Encendido de un LED en modo;continuo;para verificar la;diferencia de luminosidad.

MOVLW d’0’ ;Se define el valor de inicioM O V W F CICLO ;de la rampa.

INIZIO INCF CICLO,f ;Se empieza a incrementar.MOVF CICLO,W ;Transferencia del contenido deM O V W F CONTATORE_1 ;CICLO en CONTADOR_1.

T_ON BSF P O RTB,0 ;Se lleva a 1 la salida RB0;(encendido del diodo LED).

CALL DELAY_15µs ;Se llama la temporización;e la si

DECFSZ CONTATORE_1,f ;Repite el nœmero de veces G O TO T_ON ;especificado en CONTADORE_1.MOVLW d’255’ ;Se carga CONTATORE_1 con 255

;(valorM O V W F CONTATORE_1 ;mÆximo cargable en un

;octeto).MOVF CICLO,w ;Transferencia de CICLO a W.SUBWF CONTATORE_1,f ;Resta de 255 y el

;contenido de CICLO.T_OFF BCF P O RTB,0 ;Se lleva a 0 la salida RB0

;(apagado ;del diodo LED).

CALL DELAY_15µs ;Se llama la temporización;y se la repite

DECFSZ CONTATORE_1,f ;el nœmero de veces G O TO T_OFF ;especificado en CONTATORE_1.

G O TO INIZIO;-------------------------------------------------------------------------; TEMPORIZZAZIONE;------------------------------------------------------------------------- DELAY_15µs MOVLW d’2’

M O V W F CONTATORE_2TEMPO N O P

DECFSZ CONTATORE_2,fG O TO TEMPOG O TO FINE

FINE RETURNEND

E F F E C TO C R E P U S C U L A RC R E P U S C U L A R