TODOPIC

FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: LABmouse en 04 de Octubre de 2008, 20:41:22

Título: CCS y CCP en modo PWM. ¿Como se usa?
Publicado por: LABmouse en 04 de Octubre de 2008, 20:41:22
Hola!

Bueno, tengo un PIC18F452 corriendo a 10MHz. Necesito mover un servomotor, por facilitarme la vida esperaba usar el modulo CCP en modo PWM.

Todo esperaba funcionara perfecto.  Y ahora que estoy programando e intento buscar el mejor arreglo de configuración del TIMER2 para así lograr 50Hz que es lo necesario para el Servo. El PPIC no saca lo que espero. ME explico:

setup_timer_2 (mode, period, postscale)

(1/clock)*4*t2div*(period+1)*post

Entonces yo programo asi:

Código: [Seleccionar]
setup_timer_2(T2_DIV_BY_16,194,16);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_pwm1_duty(511);
set_pwm2_duty(511);

Esperaba ver en el osciloscopio 50Hz, y mi gran sorpresa esta en que salen 770Hz.. :shock:

Que estoy haciendo mal?, me podrian dar una guia por favor.

Muchas gracias!


Edito:

Habia colocado mal la freciencia del PIC, era 10MHz que le tenia, porque con 20MHz por calculos era imposible bajar a 50Hz.
Pero igual sigue sin trabajar, saca la misma frecuencia.
Título: Re: CCS y CCP en modo PWM. ¿Como se usa?
Publicado por: MLO__ en 04 de Octubre de 2008, 20:59:02
Hola.

Pues yo he usado el Timer2 para obtener bases de tiempo muy precisas, y hago que la interrupcion se haga al primer conteo del timer, es decir, con el valor del postscale en 1:

Código: [Seleccionar]
setup_timer_2(T2_DIV_BY_4,124,1);
Con esto tendria, a 4MHz, interrupciones cada 4x125uS=0.5mS, comprobado  :-) , pero, para sacar la frecuencia hago uso de la interrupcion #int_TIMER2, con esto tendria una frecuencia de 1kHz. Si modifico el valor del postscale a 2:

Código: [Seleccionar]
setup_timer_2(T2_DIV_BY_4,124,2);
el timer se desbordaria al doble del tiempo, es decir cada 1mS, por lo que obtendria en este caso 500Hz.

Saludos.
Título: Re: CCS y CCP en modo PWM. ¿Como se usa?
Publicado por: LABmouse en 04 de Octubre de 2008, 21:04:34
Hola MLO_, a mi tampoco me había fallado para nada el uso de los TIMER. Siempre responden tal cual como se calculan, pero en este caso, no se que cosa rara tendrá el modulo CCP que no responde como se espera.

Tocara pasarme a usar la interrupción del TIMER y mover el servo por software.
Título: Re: CCS y CCP en modo PWM. ¿Como se usa?
Publicado por: MLO__ en 04 de Octubre de 2008, 21:17:02
Hola

Pues haciendo los calculos segun la formula del datasheet me da los siguiente:

PWM Period = [PR2 + 1] x 4 x Tosc x TMR2Prescaler.

PWM Period = [194+1] x 4 x 100n x 16
PWM Period = 1.248m

Por lo que la frecuencia sera: 801.28Hz.

El modulo parece estar cerca de la frecuencia que estas midiendo

Saludos
Título: Re: CCS y CCP en modo PWM. ¿Como se usa?
Publicado por: MLO__ en 04 de Octubre de 2008, 21:34:02
Hola PICMouse

Creo que la frecuencia que quieres sacar no se puede con el modulo PWM, ya que la frecuencia mas baja seria:

PWMPeriod = 256 x 4 x 100nS x 16 = 1.6384mS

PWMFrec = 610.35Hz

Asi que creo que te toca por PWM soft manejando las interrupciones.

Saludos
Título: Re: CCS y CCP en modo PWM. ¿Como se usa?
Publicado por: LABmouse en 04 de Octubre de 2008, 21:45:05
No, pero a los cálculos tuyos le hace falta el postscale. Que es un numero de 1 a 16. O es que para el PWM no se usa ese?

Pues..Efectivamente, yo contaba con el Postcaler, y el modulo CCP no lo usa o por lo menos eso concluyo después de ver los cálculos de MLO y después de mover ese postcaler desde 1 a 16 dando la misma señal a la salida. Ese era mi gran problema.

Bueno, hasta hoy pensaba y juraba que era posible usar el CCP para controlar el servo por hardware. Que mal mal esto de Microchip, tengo PWM pero no lo puedo usar con algo tan sencillo como lo es un servo.

Bueno, Gracias MLO, me sacaste de esta duda.
Título: Re: CCS y CCP en modo PWM. ¿Como se usa?
Publicado por: MLO__ en 04 de Octubre de 2008, 22:53:37
Hola.

Pues si PICMouse, no se usa el valor del postscale, lo cual hace que la frecuencia de manejo sea elevada (para el manejo de los servos).

(http://img393.imageshack.us/img393/4634/timer2gd5.png)

Saludos