Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Buen finde a todos!
Estoy en la fase de novato-programador de C, tengo hecho un control de pan and tilt para una cámara con dos servos y mediante un 16f876A. todo funciona, he programado en C con el PCW y me he basado en la programación de "Controlando un SERVO con el PIC desde nuestro PC" de nuestro compañero RedRaven.
Mi objetivo final en este proyecto es controlar via serie rs232 un coche radio control al q le he sustituido toda la electrónica por la mia; la dirección funcionará con un servo, la velocidad y dirección con pwm y luego la cámara irá situada encima de la estructura.
Pues bien, el problema q veo en esto esq estoy trabajando a 4mhz y por tanto, con el tmr0 a 1:16 ocurre que tengo una resolución de 0.016 ms mientras q un grado para un servo estandar (futaba 3003,etc) esde 0,011ms entonces cada paso q yo aumento en mi programa no encaja en un grado con lo q los servos se quedan temblando haciendo un efecto feo feo.
Mis preguntas o ruegos son:
¿Son correctos mis cálculos y suposiciones de pq tiemblan los servos?
¿Tienen ejemplos o trabajos con 16f8.. trabajando a 20mhz? creo q la electrónica ya cambia y se sustituyen los dos condensadores en xtal ¿no?
He leido en este foro alguien q hace una controladora por usb de 8 servos (juliovmd) sin perder precision al leer datos y sin q los servos sufran modificaciones en el pwm... ¿como lo haces?¿podrías ayudarme un poco en programación?
La web del artista de los 8 servos es:
http://www.jvmbots.com/
Gracias a todos.
El problema esta en que en el ejemplo que citas para controlar el servo se sondea continuamente el estado del timer por tanto no puedes hacer mas cosas con el micro en este caso
La solucion esta en gestionar el estado de los servos y la recepcion de datos por in terrupciones, y hacer unas rutinas eficientes. Para este caso interesa que a señal a los servos sea "exacta"(no se me ocurre otra palabra), por lo tanto a la hora de hacer el programa se daria prioridad a la gestion de los servos.
Se puede aprovechar que despues de en torno a los 2'5 ms, la gestion de los servos es "nula" hasta que pasen 17'5 ms que tendras que volver a mandar pulsos (50hz,20ms). Una solucion es si es una comunicacion a dos hilos que en el momento de la recepcion vea en que momento estan los servos y si esta en esos 17'5 ms ociosos aprovechar y recibir los datos; si no lo esta manda algun dato a modo de señal que diga que se espere 2'5 ms( te aseguras que la proxima vez estaras en ese tiempo ocioso).
Al ser un cohe de RC, puede que la comunicacion sea a un hilo, entonces habra que hacer retoques; una posible solucion es mandar la misma trama separada en el tiempo 2'5 ms; si esta gestionando los servos no la atiende y la segunda trama que habra acabado la atiende. Aqui puede haber un problema, que pasa si estamos cerca de un nuevo de "refresco de los pulsos", deberias calcular el tiempo necesario para quie el micro reciba todos los datos, supongamos que es 3 ms y que lo mandas quedando 2 ms, entonces habra un fallo la solucion pasa por mandar 3 tramas, una sera antes, otra durante y la final despues de la gestion de pulsos; asi siempre lo gestionaria funcionando a un hilo. Si los datos necesitaran a lo mejor mas de 3 ms, por ejemplo 5ms, esta solucion no valdria, tendras que ver cuantos datos quieres mandar y el tiempo que tardas y habra que aumentar a lo mejor el numero de envios. Otra solucion para quitarnos de calculos es mandarla, durante por ejemplo medio segundo, de forma continua espaciada esos 2'5 ms.
Lo drelacionado con saber si estas haciendo cosas, si queda poco o si ya has recogido y usado la informacion ... se haria mediante banderas.
Vaya parrafada que he soltado, nunca he hecho una controladora; pero si lo hiciera lo haria asi ; asi que a lo mejor he dicho la mayor tonteria del mundo; espero haberte ayudado
Edito>>Leyendo me dado cuenta que aunque fuera a 2 hilos el problema de estar cerca de un refresco de los servos tambien esta presente;pero seria mas facil se mandaria una señal que nos diga que es ese caso y esperariamos el tiempo conveniente