miércoles, 24 de octubre de 2007

Programa del Modulo PWM

Este programa esta calculado para trabajar a una sola frecuencia y a un solo ciclo de trabajo, programa sin interrupciones.

El objetivo es tener una señal PWM de 250 Hz al 50% no modificable para lo cual se siguieron lo pasos:

  1. Dar valor a PR2 para el Periodo del PWM
  2. Para poner el ciclo de trabajo damos valor a CCPR1L y CCP1CON<5:4> (10 bits)
  3. Configurar la salida en RC2, haciendo BCF TRISC, 2
  4. Dar valor al prescaler del Timer 2 usando T2CON
  5. Configurar em modulo CCP1 para uso de PWM
Calculo de los valores para 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):


Forma de onda del PWM 250 Hz al 50%

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:

German dijo...

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

Google