TODOPIC
FORO TÉCNICO => Foro Técnico => Mensaje iniciado 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:
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.
-
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:
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:
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.
-
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.
-
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
-
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
-
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.
-
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