TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: antoniojdobarro en 25 de Marzo de 2013, 12:40:54
-
He leído varios post por aquí pero no termino de tener claro como utilizar divisores para aumentar la precisión en PWM para controlar un servo.
Partiendo de que Fpwm=Fosc/[4*(PR2+1)*PRES] y utilizando un cristal de 100Khz, PR2=124, PRES=4 obtengo una frecuencia de 50Hz necesaria para el control del servo.
El servo define sus posiciones extremas entre 0.3 y 2.3 ms.
Para la F=50Hz, tengo entonces PR2+1=125 pasos, con lo que 20ms son 125 pasos.
Luego las posiciones extremas del servo varian entre [1,15] pasos.
Como el servo varía 190º entre 14 pasos tengo una resolución de 13.5º/paso, que es muy pobre.
Como puedo hacer para aumentar esa resolucion y tener mas pasos para ajustar mejor la posición del servo???
-
Para que el PWM trabaje con una resolucion de 10 bits (1024 pasos) PR2 debe ser 255, si quiere una resolucion mayor el valor de PR2 debe ser lo mas alto posible.
La ecuacion para calcular la resolución esta en la hoja de datos del microcontrolador, tiene la siguiente forma
resolucion = (log(4*(PR2+1))) / log(2)
si PR2 = 255 entonces resolucion = (log(1024)) / log(2), eso da 10 bits
para su caso PR2 = 124 , entonces la resolucion = (log(500)) / log(2), eso da 8.9 bits , y eso equivale a pasos de 0 a 476 no de 125 como usted dice.
Saludos
-
Puedes atender a una interrupción 50 veces por segundo (cada 20ms) para activar la salida PWM.
La desactivación puedes hacerla con un contador de tiempo o con otra interrupción programada para el tiempo que quieras.
Si quieres tener una resolución de 1º (no se si el servo te dará tanta resolución) necesitas controlar periodos de tiempo con una resolución de:
2ms / 190 = 10 us
Para conseguirlo necesitas un reloj que trabaje a una velocidad de 400Khz o mayor.
Saludos.
-
Con PWM puedes conseguir como mucho 20ms/1024 = 19.5us
que son unos 190º * 19.5us / 2ms = 1.85º de precisión.
Saludos.
-
Con PWM puedes conseguir como mucho 20ms/1024 = 19.5us
que son unos 190º * 19.5us / 2ms = 1.85º de precisión.
Saludos.
Justo lo que pensaba Picuino. Simple claro y preciso.
Muchas gracias.