Está en la página 1de 9

MODULACION POR ANCHO DE PULSO

CCP PIC modo PWM, esto es modulación por ancho de pulso, en esta forma de
trabajo del módulo CCPx donde x puede ser 1 o 2 dependiendo del módulo CCP
utilizado, lo que se logra con el uso del módulo CCPx en modo PWM es obtener por
el pin CCPx una señal periódica, este pin debe ser configurado como una salida
digital mediante el correspondiente TRISC, con parte de la señal obtenida en alto
y parte de la señal en bajo, lo interesante de este modo de trabajo del módulo CCP
PIC modo PWM  es que de la señal periódica obtenida por el pin CCPx se puede
modificar el tiempo que la señal estará en alto.

Una señal PWM es aquella en la que su periodo representado por T se tiene que
mantener constante, dentro de este periodo hay momentos en que la señal estará
en alto o a uno y momentos en que la señal estará en bajo o a 0,  en la señal
PWM el tiempo que la señal está en alto Talto se le conoce como ancho de
pulso y si está expresado en porcentaje como ciclo de trabajo, este tiempo
que la señal esta en alto se puede modificar, de esta manera si la señal PWM se
conecta a una carga, sobre esta dependiendo del Talto le llegará una tensión
media, cuando mayor sea Talto mas será la tensión media que le llegue a la carga
siendo la mayor cuando Talto ocupa  todo el periodo de la señal, y la menor
cuando el Talto sea 0, con lo que la tensión media también será 0, por ejemplo si
la carga es un motor de continua al variar la tensión media que le llegará mediante
la señal PWM, se puede variar la velocidad de giro de ese motor, o si la carga es
una bombilla se puede variar su brillo variando la tensión media que le llegue
mediante la señal PWM.

El ciclo de trabajo cuando se utiliza el CCP PIC modo PWM es el ancho de pulso
expresado en porcentaje se obtienen mediante la siguiente relación:

Ciclo de trabajo=(Talto/T)*100%

El ciclo de trabajo puede ser desde un 0% cuando el Talto=0, hasta un 100%


cuando el Talto es igual al periodo de la señal PWM Talto=T, si el tiempo en alto es
igual a la mitad del periodo  entonces el ciclo de trabajo será del 50%.

A este proceso de cambiar o modificar el tiempo en alto de la señal PWM es lo que


se llama la modificación por ancho de pulso que por sus siglas del inglés se le
llama justamente PWM, lo cual es muy fácil lograr con el módulo CCP PIC modo
PWM.

Para el PIC 16F877A que será para el cual se comente el módulo CCP PIC modo
PWM el ancho de pulso o ciclo de trabajo puede tener una como máximo una
resolución de salida de hasta 10 bits,  lo que dependerá del periodo de la señal
PWM generada, esto quiere decir que el valor que representa el ancho de pulso
estará representado por un número binario que como máximo tendrá 10 bits.

Para la parte de la señal PWM obtenida por el pin CCPx en alto o a 1, que
es el ciclo de trabajo o el ancho de pulso y por lo tanto la parte variable de la señal
PWM, de los 10 bits que puede tener como máximo, los 8 bits de mas peso se
encuentran en el registro CCPRxL y los 2  bits de menos peso en los bits 5 y 4 del
registro CCPxCON , mientras que para el periodo de la señal PWM y por lo tanto la
parte de la señal que no cambiará será el valor almacenado en el registro PR2, el
cual es es uno de los registros utilizados con el timer2, por lo que para el uso del
timer2 con el módulo CCP PIC modo PWM es necesario conocer los registros TMR2
y su registro compañero PR2.

     La forma utilizar el timer2 se puede ver aquí, es muy


importante conocer el funcionamiento de los registros TMR2 y PR2
para poder hacer uso del modo PWM del módulo CCP.

Al utilizar el
módulo CCP PIC modo PWM, cuando el valor del registro TMR2 se hace igual al
valor del registro PR2 ocurre lo siguiente:

El registro TMR2 se hace igual a 0 esto es se borra y vuelve a contar desde 0


hasta que se hace igual nuevamente al valor del registro PR2 tras lo cual
nuevamente se borra; este lapso de tiempo para que ocurra esto es lo que
constituye el periodo de la señal PWM. El pin CCPx se pone a 1, que es lo mismo
que decir que se obtiene un alto por este pin, menos cuando el ciclo de trabajo del
modo PWM sea del 0%, en este caso este pin no se pondrá a 1.

El valor almacenado en el registro CCPRxL que es el valor que representa el ciclo


de trabajo de la señal PWM esto es el tiempo que la señal obtenida por el pin CCPx
se mantiene a 1, se cargará en el registro CCPxH.

El valor del registro CCPxH se compara permanentemente con el valor que va


tomando el registro TMR2 y cuando se hacen iguales el pin CCPx se pondrá a 0, de
esta manera  se fija el ancho de pulso, y como el TMR2 seguirá aumentando de
valor hasta que este se haga igual nuevamente al valor almacenado en el registro
PR2, momento en el cual el registro TMR2 se hará igual a 0 y el ciclo anterior
volverá a repetirse.

Entonces al utilizar el CCP PIC modo PWM para obtener una salida PWM por el pin
CCPx se tienen que cumplir 2 cosas establecer el periodo de la señal mediante un
valor cargado en el registro  PR2 el cual no tendrá que ser cambiado y establecer
un ciclo de trabajo mediante un valor cargado en el registro CCPRxL el cual si
puede ser cambiado para obtener en el pin CCPx tensiones medias variables para
el  control de diverso dispositivos.

CCP PIC modo PWM cálculos del


periodo y del ancho de pulso
Para calcular el periodo TPWM de la señal PWM generada con el módulo CCP PIC
modo PWM, se utiliza la siguiente fórmula:

TPWM = (PR2+1)*(4/Fosc)*prescalerTMR2

Donde PR2 es el valor cargado en el registro PR2, Fosc es la frecuencia del reloj o
cristal utilizado para el funcionamiento del PIC y prescalerTMR2 es alguno de los
posibles prescaler del TMR2 que se pueden utilizar.

El valor máximo que puede tomar el registro PR2 es 255 ya que es de 8 bits, y el
prescaler máximo es de 16, luego el máximo valor para el T PWMdependerá del
oscilador o cristal utilizado, por lo que si se usa un cristal de 4Mhz el valor máximo
para el periodo del TPWM será:

TPWMmax=(255+1)*(4/4Mhz)*16=4,096ms

Por lo que el máximo periodo de la señal PWM obtenida con el módulo CCP PIC
modo PWM cuando se utiliza un cristal o un oscilador de 4Mhz será de 4,096ms;
por supuesto que esto puede variar si se utilizan cristales de mayor frecuencia de
oscilación.

Como la frecuencia es la inversa del periodo se tendrá que en este caso la


frecuencia mas baja para la señal PWM será FPWMmin=(1/4,096ms)=244,1Hz

Para calcular el ancho de pulso Talto de la señal PWM generada con módulo


CCP PIC modo PWM, se utiliza la siguiente fórmula:
Talto=(CCPRxL:CCPxCON<5:4>)*(1/Fosc)*prescalerTMR2

Donde CCPRxL:CCPxCON<5:4> son los 8 bits cargados en el registro CCPRxL y los


2 bits cargados en los bits 5 y 4 del registro CCPxCON, que vienen a ser los 10 bits
de la resolución del ancho de pulso, Fosc es la frecuencia del reloj o cristal
utilizado para el funcionamiento del PIC y prescalerTMR2 es alguno de los posibles
prescaler del TMR2 que se pueden utilizar.

Cuando el ancho de pulso toma su máximo valor, este tiene que ser igual al
periodo de la señal PWM, cuando se escoge un periodo para la señal PWM,
generada con el módulo CCP PIC modo PWM, hay que calcular cuantos bits se
necesitan para representar en forma binaria ese periodo, lo cual es justamente la
resolución del ancho de pulso y no tiene que ser mayor a 10 bits.

Para calcular la resolución del ancho de pulso de la señal PWM generada con


módulo CCP PIC modo PWM, se parte de que Talto máximo tiene que ser igual al
periodo de la señal PWM, esto es Talto=TPWM, luego entonces de

Talto=(CCPRxL:CCPxCON<5:4>)*(1/Fosc)*prescalerTMR2 si se realizan
algunos cambios en esta fórmula para cuando el Talto o el ancho de pulso sea
máximo se tendrá:

Talto=TPMW=1/FPWM el periodo es la inversa de la frecuencia

CCPRxL:CCPxCON<5:4>, consta de 10 bits pero para el T PWM que se busca, el valor


cargado en estos bits estará formado por una cantidad bits que dependerán del
periodo TPWM o la frecuencia F PWM elegida, donde FPWM es la inversa de TPWM,
esta cantidad de bits necesarios para obtener el TPWMbuscado se puede representar
como n, donde n podrá ser como máximo 10, entonces para  el Talto máximo el
valor de CCPRxL:CCPxCON<5:4> tendrá que ser máximo para lo cual tiene que
ser igual a 2n-1, luego si se reemplaza en la fórmula anterior se tendrá:

TPWM=1/FPWM=(2n-1)*(1/Fosc)*prescalerTMR2   de  aquí si se reordena se


tendrá

2n-1=(Fosc/(FPWM*prescalerTMR2)) si se aplican logaritmos a ambos lados de la


igualdad y se despeja n se obtendrá, la cantidad de bits necesarios en
CCPRxL:CCPxCON<5:4> de los cuales no se debe pasar, para obtener el periodo o
la frecuencia de la señal PWM buscada.

n=(log(Fosc/(FPWM*prescalerTMR2)/log2) bits a esta cantidad de bits obtenidos se le


llama la resolución y será necesario comprobar siempre que no se pase de los 10
bits.

Resolución=(log(Fosc/(FPWM*prescalerTMR2)/log2) bits

Donde Fosc es la frecuencia del oscilador o cristal utilizado, F PWM es la frecuencia de


la señal PWM que se quiera obtener, la que viene a ser la inversa de periodo
TPWM de la señal PWM.

Mediante la resolución se obtiene con cuantos bits se representa en forma binaria


el valor del ancho de pulso para una determinad F PWM elegida, siendo el máximo
valor 1023 que es 210 ya que la resolución es de 10 bits como máximo.
Por ejemplo, al utilizar el módulo CCP PIC modo PWM, si se necesita una
frecuencia de la señal PWM de 4Khz, y se utiliza con el microcontrolador PIC con
un oscilador o cristal de 4Mhz, se tendrían que realizar los siguientes cálculos:

Primero se calculará la resolución para ver si se cuentan con suficientes bits para
todo el ancho de pulso o ciclo de trabajo de la señal que se quiere obtener con el
módulo CCP PIC modo PWM, la resolución no tiene que tener mas de 10 bits, si en
el cálculo salen mas  de 10 bits hay que elegir otra frecuencia para la señal PWM,
o un oscilador o cristal con una frecuencia diferente de tal forma que la resolución
no sea mayor a los 10 bits, también hay que elegir el prescaler que se utilizará con
el timer2 para obtener la FPWM buscada, por ejemplo si se elige un prescaler de 16
en este caso para la resolución se tendrá:

Resolución=(log(4Mhz/(4Khz*16)/log2) bits =5,9658 bits

Lo que es menor a los 10bits máximos, eso indica que es posible obtener una
FPWM de 4Khz utilizando un cristal de 4Mhz, ademas el valor cargado
en CCPRxL:CCPxCON<5:4> no tiene que ser mayor a 2 5,9658 = 62,5 para obtener el
máximo ancho de pulso para la F PWM de 4Khz, luego el máximo valor cargado en
CCPRxL:CCPxCON<5:4> para que la FPWM sea de 4Khz tiene que ser a lo mucho 63,
de lo contrario la señal obtenida en el pin CCPx utilizado mediante el módulo CCP
PIC modo PWM no será de los 4khz que se quieren.

El periodo TPWM para la frecuencia de FPWM=4Khz será 1/4Khz lo que es


TPWM=0,250ms=250us.

Por lo que el valor a cargar en el registro PR2 se encuentra a partir de la fórmula


para el cálculo del periodo de la señal PWM TPWM =
(PR2+1)*(4/Fosc)*prescalerTMR2, en la cual se ve que dependerá del
prescaler que se decida utilizar, por ejemplo si se utiliza un prescaler de 16, se
obtiene que el valor de PR2=14,625 pero en el registro PR2 solo se pueden cargar
valores enteros, por lo que se cargará con el valor mas cercano, en este caso el
valor a cargar en el registro PR2=15, para obtener una frecuencia de 4Khz o un
periodo de 0,250ms=250us.

Si se quiere variar el ancho de pulso o ciclo de trabajo para la frecuencia


FPWM=4Khz, esto se logra cambiando los valores de los
bits CCPRxL:CCPxCON<5:4>, por cualquier valor comprendido entre 0 y 63, si es
0 el ancho de pulso será 0 o tendrá un ciclo de trabajo del 0% y la salida por el pin
CCPx sera 0, si 63 el ancho de pulso será igual al periodo T PWM o tendrá un ciclo de
trabajo del 100% y la salida por el pin CCPx será 1, si se quiere el ancho de pulso
sea del 50% se tendrá que cargar el valor de 32, con lo que en el pin CCPx se
tendrá una señal que irá alternando entre 1 y 0 cada  2Khz esto es estará 2Khz a 1
y 2 khz a 0 haciendo un periodo de 4khz, el tiempo que se obtengan 1 o 0 variará
de acuerdo al ciclo de trabajo elegido.

CCP PIC modo PWM: Registro


CCPxCON
Mediante este registro se elige en modo de trabajo del módulo CCPx, en la
siguiente imagen se muestra el registro con los respectivos nombres de los bits
que lo conforman.

Los bits 7 y 6 de este registro no se utilizan por lo que se les pone a 0.

Los bits 5 y 4 en el uso del módulo CCP PIC modo PWM, estos bits son los 2 bits
menos significativos del ciclo de trabajo del módulo CCP PIC modo PWM el cual es
de 10 bits, los 8 bits mas significativos se encuentran en el registro CCPRxL

Los bits 3, 2, 1 y 0 son los que se utilizarán para elegir el modo de trabajo del
módulo CCP, si estos 4 bits se ponen a 0 el módulo CCP estará deshabilitado; para
el uso del módulo CCP PIC modo PWM los valores asignados a estos pines serán
como se indican en la siguiente tabla.

Como se ve al poner los bits 3 y 2 a 1 es suficiente par indicar que se ha elegido


utilizar el módulo CCP PIC modo PWM, siendo indiferente lo que se coloque en los
bits 1 y 0, pero se acostumbra a ponerlos a 0.

Pasos a seguir para la utilización


del módulo CCP PIC modo PWM
1. Establecer el periodo de la señal PWM obtenida mediante el módulo CCP PIC
modo PWM, para ello cargar el registro PR2 con el valor obtenido mediante la
fórmula TPWM = (PR2+1)*(4/Fosc)*prescalerTMR2.
2. Establecer el ancho de pulso o el ciclo de trabajo cargando los
bits CCPRxL:CCPxCON<5:4>, con valores que no sobrepasen el máximo valor
obtenido mediante la obtención de la resolución para el periodo o frecuencia
elegida para la señal PWM.
3. Establecer el pin CCPx utilizado como una salida digital mediante su registro
TRISC, o el que le corresponda de acuerdo a microcontrolador PIC utilizado.
4. Configurar el módulo CCP PIC modo PWM, esto es para que el módulo CCP
trabaje en el módulo PWM.
CCP PIC modo PWM con el
MPLAB XC8
Ejemplo 1, se realizará el ejemplo comentado lineas arriba para el PIC16F877A
que estará trabajando con un oscilador de Fosc=4Mhz, el ejemplo consiste en
obtener una señal PWM con el módulo CCP PIC modo PWM de una frecuencia
FPWM de 4Khz que es lo mismo que de un periodo de TPWM=0,250ms=250us.

Luego mediante la fórmula para el cálculo del periodo se despeja el valor a cargar
en el registro PR2 para obtener el periodo de 0,250ms, la fórmula es la siguiente:

TPWM = (PR2+1)*(4/Fosc)*prescalerTMR2

en este caso se ha utilizado un prescaler de 16, se puede utilizar otro de los


posibles prescaler para el timer 2, siempre y cuando el valor a cargar en el registro
PR2 no sea mayor a 255 estará bien; al reemplazar los valores elegidos y despejar
PR2 se obtiene PR2=14,625, este sería el valor a cargar en PR2 para obtener justo
los 250us de periodo o una frecuencia de 4Khz, pero en el registro PR2 no se
pueden cargar valores que no sean enteros por lo que se carga el mas cercano que
en este caso será PR2=15, con lo que el periodo buscado variará ligeramente de
los 250us.

Se calcula si se tendrán suficientes bits en CCPRxL:CCPxCON<5:4> los cuales


como máximo deben de ser de 10, para obtener la frecuencia que se pide que es
de 4Mhz; para hallar la cantidad de birs se utiliza la fórmula de la resolución, la
cual es:

Resolución=(log(Fosc/(FPWM*prescalerTMR2)/log2) bits

al reemplazar los valores se obtiene que la resolución es de 5,9658 bits, luego el


máximo valor a cargar en CCPRxL:CCPxCON<5:4> será 25,9658que es 62,5 por lo
que para este ejemplo como máximo se podrá cargar con 63, si se carga un valor
mayor el módulo CCP PIC modo PWM no responderá bien para la frecuencia de
4Khz buscada, al cargarlo con 63 se obtendrá el máximo ancho de pulso de la
señal PWM, esto es todo el periodo de la señal estará a 1, o el ciclo de trabajo será
del 100%.

En el código siguiente para el ejemplo para el PIC16F877A se utilizará el módulo


CCP2, por lo que se ha cargado CCPR2L:CCP2CON<5:4> con 32 para obtener
aproximadamente un ciclo de trabajo del 50%, 32 en un número binario de 10 bits
es 0000100000, de los cuales los primeros 8 bits que son 00001000 se han
cargado en el registro CCPR2L y en los bits 5 y 4 del registro CCP2CON se han
cargado los otros 2 que son 00.

El código preparado para la utilización del módulo CCP PIC modo PWM en el
ejemplo, permitirá obtener una señal PWM con un periodo muy próximo a los
250us que se ha buscado, esta señal se obtendrá por el pin CCP2 el que tiene que
ser configurado como salida, la señal se obtendrá con un ciclo de trabajo del 50%,
en cada línea de código esta comentado el porque de esa línea de código en el
XC8.
La siguiente es la imagen del circuito simulado, se puede ver que el periodo es
poco mas de 250us, lo que ocurre porque la carga del registro PR2 no puede
ser PR2=14,625 ya que tiene que ser un valor entero cercano y se eligio 15, como
se puede ver en el código, ademas se obtiene un ciclo de trabajo del 50% para la
señal PWM, que es lo que se quiere con esta parte del ejemplo.

Si en el código anterior se cambia el valor cargado en CCPR2L:CCP2CON<5:4>


con 62 se verá  que el  ciclo de trabajo casi es del 100%, 62 en binario de 10 bits
es 0000111110, de los cuales los primeros 8 bits que son 00001111 se cargarán
en el registro CCPR2L y en los bits 5 y 4 del registro CCP2CON se cargará en el bit
5 con 1 y el bit 4 con 0, esto es 10, en la siguiente imagen de la simulación se
tiene el resultado de este cambio, se puede ver que el ancho de pulso de la señal
PWM casi que ocupa todo el periodo de la señal PWM obtenida de 4Khz con el
módulo CCP PIC modo PWM.

Ejemplo 2, en este caso

También podría gustarte