El objetivo es tener una señal PWM de 250 Hz al 50% no modificable para lo cual se siguieron lo pasos:
- Dar valor a PR2 para el Periodo del PWM
- Para poner el ciclo de trabajo damos valor a CCPR1L y CCP1CON<5:4> (10 bits)
- Configurar la salida en RC2, haciendo BCF TRISC, 2
- Dar valor al prescaler del Timer 2 usando T2CON
- Configurar em modulo CCP1 para uso de PWM
Seleccionamos los valores que deseamos en la Frecuencia de PWM y Ciclo de trabajo. En este caso son 250 Hz y 50% respectivamente.
Usando las formulas dadas anteriormente despejamos la variable que nos interesa de la siguiente manera:
Calculo de PR2:
PR2 = (Periodo PWM/4*Tosc*Prescaler) - 1
Periodo PWM = 1/Fpwm = 4*10exp-3
Asi PR2 = 249D = F9h = 11111001b
Calculo de CCPR1L:CCP1CON<5:4>:
Tiempo de ciclo = % Ciclo de trabajo*Periodo PWM
CCPR1L:CCP1CON<5:4> = (% Ciclo/ Fpwm)/(Tosc*Prescaler)
CCPR1L:CCP1CON<5:4> = (50%/250)/(25*10exp-8*16) = 500
CCPR1L:CCP1CON<5:4> = 1F4h = 0111110100;
Asi cargamos
CCPR1L = 01111101 = 7Dd
CCP1CON<5:4> = 00
Usando la liga dada anteriormente se obtiene:
CCPR1L = 01111101 = 7Ch
CCP1CON<5:4> = 11b
Que son los valores cargados al programa
La forma de onda en el pin RC1 es similar a la siguiente (distorcion por falta de BW al osciloscopio):
Se observa el ciclo de trabajo del 50%.
Baja el programa ASM, el HEX es el siguiente:
:020000040000FA
:100000000220172883160313F9309200831203137A
:100010007C3095003C30970083160313071188014C
:1000200083120313073092008312031308000000A9
:0200300018288E
:00000001FF
Saludos.
.
1 comentario:
Hola, tengo una duda sobre este tema de fijar el reloj del PWM, no sé como hacer para que con un cristal de 4MHz de frecuencia me produzca una frecuencia de salida de 50Hz para controlar un servomotor, el duty cycle si sabría como calcularlo, si puedes aclararme la duda me sería de mucha ayuda, gracias
Publicar un comentario