Creando una señal PWM usando PIC18F4520

0

Estoy tratando de crear una señal pwm de período de 100 ms (10 Hz) con un PIC18F4520, seguí la ecuación PR2 para ayudarme a crear esta señal

Tengo una frecuencia de reloj de 20MHz con un prescaler de 16 y un período de PWM de (100 x 10 -3 s) y cuando uso estos valores en esta ecuación:

\ $ \ Large PR2 = (\ frac {PWM Period} {(TOsc \ times 4 \ times TMR2 Prescaler)}) - 1 \ $

Obtengo 0x31249

También estoy intentando ejecutar esta señal PWM con un ciclo de trabajo del 50% [50 ms desactivado y 50 ms activado] mediante el uso de la ecuación del ciclo de trabajo:

Ciclo de trabajo = ((CCPR1L < < 7) | (CCP1CON bits < 5: 4 >)) \ $ \ times \ $ TOSC en MHz \ $ \ times \ $ Prescale

Lo que da 62500 como un valor para el ciclo de trabajo.

Todo este ejercicio es para que aprenda mejor sobre el uso de señales PWM. Estoy programando el PIC en C18 y simulándolo en PROTEUS VSM.

que es una imagen de lo que el osciloscopio está captando de la señal PWM que NO SE MIRA COMO 50% de ciclo de trabajo o frecuencia de 10 Hz.

Este es el código que estoy usando en PROTEUS VSM:

include p18cxxx.h           
include pwm.h                   
include timers.h                
pragma config OSC = HS          
pragma config MCLRE = ON             
pragma config WDT = OFF         
pragma config LVP = OFF          
pragma config DEBUG = OFF       
pragma config PBADEN = OFF          
unsigned char period = 0x31249;         // assign PR2 to 31249 used to get 100ms period

unsigned int duty_cycle = 62500;  // used to get 50ms on/off

void main(void)
{ 

    OpenTimer2(TIMER_INT_OFF & T2_PS_1_16 & T2_POST_1_1); 

    OpenPWM1 (period);              

    SetDCPWM1 (duty_cycle);         

    while (1);

} 

Como se puede ver, estoy usando la biblioteca de PWM porque escuché que era más fácil trabajar con él.

Lo siento si no estoy muy familiarizado con cómo se hacen las preguntas en este foro o sobre cómo presenté mi problema.

    
pregunta Opscurus Lucetti

1 respuesta

1

No puede obtener un período de PWM de 100 ms con un reloj de 20 MHz. El máximo será algo así como 16ms. Puede ejecutar el micro más lento o utilizar un período más rápido. En general, el período no es demasiado importante y desea maximizar la resolución.

Lea atentamente las secciones Hoja de datos y Manual de referencia en los temporizadores, hay demasiados problemas para su comprensión.

También tenga en cuenta que ha confundido 0x31249 (201289 decimal) con 31249.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas