TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: j_fernandez en 09 de Febrero de 2006, 09:28:00
-
Hola a tod@s!!! Tras configurar el pwm mediante el wizard de CCS veo que pone que el duty cicle va entre 0 y 40, sin embargo no corresponde a la señal que tengo en la calida, a que se debe? como se entre que valores va el ciclo de trabajo?
Gracias y un saludo
-
La resolución que tu PWM en un PIC depende de la fórmula:

Sustituye los valores que tú uses.
-
ok! Gracias por contestar a mi pregunta, pero no acabo de entender el funcionamiento, sun tu formula en el caso que tu as puesto sale 7.39 bits, por lo que el la variable del ciclo de trabajo que va de 0 a 167? (2^7.39)
Gracias de nuevo y un saludo a tod@s!! Buen fin de semana
-
Es que los bits no se pueden "trocear". Para representar esa horquilla necesitarás mínimo de 8 bits, aunque algunas combinaciones de esos 8 bits no las usarás nunca.
-
Según yo veo se redondea a 7bits, entonces solo puedes usar 2^7=128. Nocturno, corrígeme si estoy mal por favor.
-
Si no hay nada que corregir, efectivamente 2^7=128.
Aunque ahora que releo el mensaje, no tengo claro qué es lo que pide j_fernandez.
-
Hola :-/
La resolucion del pwm, se refiere al numero de bits necesarios para poder manipular el duty cycle del 0-100%, ahora, a pesar del resultado q te dio de 7.39 , eso quiere decir que forzosamente necesitas un numero de al menos 8 bits para manipular el duty cycle. Ahora bien para sacar el duty cycle ( de la mayoria de microcontroladores de microchip) tenemos:
PWM duty cycle=(CCPR1L:CCP1CON<5:4> ) *Tosc*(Valor del preescalador del TMR2)
Por ejemplo para los pic16Fxxx y 18F4xx el duty cycle del pwm puede manipularse con 10 bits (CCPR1L:CCP1CON<5:4> ), sin embargo tu solo requieres de 8 bits.
Dejame darte un ejemplo de como calcular el valor maximo para poder manipular el ciclo de trabajo del PWM.
Fosc = 20MHz;
FPWM=120Khz;
Prescalador del Tmr2=1;
Suponiendo que requieres trabajar del 0- 100 % del ciclo de trabajo, entonces el duty cycle tendra valores entre 0- (1/120KHz), pasando de frecuencia a tiempo tenemos---->(0 seg. ---8.3333 microseg.),
PWM duty cycle=(Valor_máx) *Tosc*(Valor del preescalador del TMR2)
8.3333 us=(Valor_max)*(1/20Mhz)*(1)
despejando Valor_max tenemos
Valor_max=8.3333 us/(50 ns)=166.6667
pero Valor_max debe ser un numero entero, entonces Valor_max=167.
Entonces el maximo valor que puedes enviar al duty cyle es 167:
set_pwm1_duty(167); // 100%
set_pwm1_duty(0); // 0%
Espero haberme explicado bien, sino por aqui estaremos nuevamente.......SALUDOS
-
ok!! Muxas gracias a todos!!! Lo probaré y os mantendré informados.
Un saludo