TODOPIC
FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: villamany en 06 de Mayo de 2010, 09:54:57
-
Hola a todos, soy villamany de España. Estoy trabajando en una controladoras de servos mediante PIC16F628A.
La parte del firmware la tengo casi terminada y ahora estoy con el tema del hadware. Me gustaria que me dieran vuestra opinion sobre el esquema que he realizado.
Este dispositivo permitiria controlar via linea de comandos desde un PC hasta 8 servos, 3 reles, 1 zumbador y una entrada digital.
Adjunto el archivo en formato PNG del esquema.
Saludos y gracias a todos por este fantastico foro.
Editado: Gracias por la ayuda. Finalmente he realizado algunas modificaciones en el esquema y ya lo tengo funcionando en la protoboard. Dejo por aqui una idea del funcionamiento de la controladora y el esquema final. Si alguien esta interesado que me envie un privado y le paso el codigo. Saludos....
// Servo control v1.0 (Abril 2010) por villamany. Contacto: villamany@msn.com
Control de 8 servomotores para PIC 16F628A.
CARACTERISTICAS:
Este dispositivo, mediante linea de comandos permite el control independiente de
8 servo-motores (los utilizados en RC), 3 reles de salida, un zumbador
(frecuencia seleccionable) y una entrada todo-nada.
La comunicacion se lleva a cabo mediante Puerto Serie (UART niveles TTL 5v) a
9600bps con 8 bits de datos 1 bit de stop y sin control de flujo ni paridad.
LISTADO DE COMANDOS:
Los comandos tienen la sintaxis CMD ARG1 ARG2, es decir, un comando y 2
argumentos opcionales separados entre si por un espacio.
CMD siempre es un byte, mientras ARG1 y ARG2 pueden variar entre 1 y 5 bytes,
dependiendo del comando utilizado.
Los comandos deben enviarse de uno en uno seguidos de la tecla enter, tras
ejecutarse el comando, el dispositivo enviara una respuesta para indicar info
adicional sobre la ejecucion que tuvo lugar seguido de una nueva linea de texto
con "rdy>" indicando que el PIC esta preparado para recibir un nuevo comando.
Listado de comandos:
------------------
R Resetea el hadware y devuelve la version del firmware y la
posicion por defecto de los 8 servos.
p Lee el estado de la entrada todo-nada (interno y/o externo) y
devuelve "1" si esta cerrada "0" en caso contrario.
x Devuelve "1" si Rele1 esta activado y "0" en caso contrario.
x 1 Activa Rele1 y devuelve "1" (rele activado).
x 0 Desactiva Rele1 y devuelve "0" (rele desactivado).
x t Invierte el estado de Rele1 y devuelve "1" si ha sido activado o
"0" si ha sido desactivado.
y Devuelve "1" si Rele2 esta activado y "0" en caso contrario.
y 1 Activa Rele2 y devuelve "1" (rele activado).
y 0 Desactiva Rele2 y devuelve "0" (rele desactivado).
y t Invierte el estado de Rele2 y devuelve "1" si ha sido activado o
"0" si ha sido desactivado.
z Devuelve "1" si Rele3 esta activado y "0" en caso contrario.
z 1 Activa Rele3 y devuelve "1" (rele activado).
z 0 Desactiva Rele3 y devuelve "0" (rele desactivado).
z t Invierte el estado de Rele3 y devuelve "1" si ha sido activado o
"0" si ha sido desactivado.
b Devuelve la frecuencia en Hz a la que esta sonando el Zumbador.
b [fffff] Activa el Buzzer a la frecuencia indicada y devuelve la
frecuencia real (frecuencia mas proxima que puede generar el
oscilador).
[s] Obtener posicion de servo. Devuelve el valor del dutty cicle
aplicado a un servo.
[s] [tttt] Posicionar servo. Posiciona un servo aplicando el dutty cicle
indicado y devuelve el valor aplicado.
[s] + [tttt] Incrementar posicion relativa de servo. Incrementa en el numero
indicado el dutty cicle aplicado a un servo y devuelve el
valor aplicado al mismo.
[s] - [tttt] Decrementar posicion de servo. Decrementa en el numero
indicado el dutty cicle aplicado a un servo y devuelve el
valor aplicado al mismo.
[s] h Posicionar servo en su posicion por defecto (valor home definible
por otro comando), devuelve el valor del dutty cicle aplicado.
[s] U [tttt] Definir posion maxima admisible para un servo (dutty cicle
maximo). Devuelve el valor introducido.
[s] L [tttt] Definir posicion minima admisible para un servo (dutty cicle
minimo). Devuelve el valor introducido.
[s] H [tttt] Definir posicion por defecto para un servo (tras reset y comando
[s] h). Devuelve valor introducido.
[fffff] : Indica la frecuencia de funcionamiento del buzzer en Hz. Los valores
posibles son los enteros comprendidos entre 250 y 62500. El valor
0 tambien es valido e indica buzzer desactivado.
[s] : Indica el servo al que hace referencia el comando. Los valores
posibles son 1,2,3,4,5,6,7 u 8.
[tttt] : Indica el valor del dutty cicle en microsegundos aplicado a un servo
para posicionarlo. Los valores posibles son los enteros
comprendidos entre 200 y 2500.
Cualquier intento de posicionar un servo por encima de su valor
maximo admisible (comando[s] U [tttt]) dara como resultado el
posicionado del servo a su valor maximo admisible.
Cualquier intento de posicionar un servo por debajo de su valor
minimo admisible (comando [s] L [tttt]) dara como resultado el
posicionado del servo a su valor minimo admisible.
*/
/*Atencion: A la hora de reprogramar el PIC por ICSP, es recomendable
desconectar la alimentacion de la placa para evitar posibles errores de
programacion y/o movimientos involuntarios de servos y reles.*/
-
Hola, la resolución de la imagen es muy baja.
-
--
-
la he adjuntado como archivo. gracias
Opino que no lo entiendo :oops:
Hay unos conectores que dicen SL3, SL6... hasta SL12 pero parecen estar conectados todos a RA2. Sí es así, todos los servos (si es que esos son los conectores para servos) harían el mismo movimiento.
-
Perdon, ha sido un error al copiar y pegar con las prisas para ir a trabajar. Ya esta corregido en el archivo adjunto del primer post.
-
Tené en cuenta que sólo podrás usar RA6 y RA7 para tus servos si es que el PIC lo utilizar con oscilador interno.
Si usás los servos típico de aeromodelismo (y supongo que de otro tipo de hobby también) tené en cuenta que necesitan un "refresco" de la información cada 20mS aproximadamente.... Vas a encontrar mucha info de radiocontrol en www.e-radiocontrol.com.ar
-
gracias, efectivamente, uso el oscilador interno del pic y los servos los actualizo cada 20 ms. He tratado de poner resistencias limitadoras en los conectores ante posibles errores en la conexion, añadirias o quitarias alguna?.
Ademas debido al consumo de los servos, quiero evitar al utilizar el ICSP que los servos se alimenten del programador, ya que creo que el consumo seria excesivo, crees que es buena solucion el diodo que hay en la patilla VDD del pic?.
-
Lo del diodo a VCC del PIC me parece que debería funcionar bien. Respecto a las resistencias no sabría decirte, me imagino que debería funcionar porque sobre la línea de Data no hay demasiado consumo. Yo había armado un decodificador de RC también con un 628 pero no le puse ninguna resistencia entre el PIC y el servo, no se me quemó el PIC pero creo que es una buena medida colocar la resistencia.
¿Qué servos pensás usar? Yo tengo unos E-Sky (sé que no son muy buenos) en un aeromodelo de Depron y los cables no son como tenés en tu conector. El del medio es VCC y obviamente las puntas corresponden a GND y Data. Supongo que son así porque si te equivocas al colocarlo, siempre el cable de VCC queda conectado justamente a VCC. Yo corregiría eso en el diseño, si es que tus servos son también así.
-
cierto, los conectores tienen el orden de los hilos mal, estan cambiados, tambien estoy haciendo las primeras pruebas con los e-sky digitales. Acabo de montar el circuito en la protoboard. El diodo que hay en el conector UART va polarizado al contrario acabo de verlo, ya que lo que pretendo es que el conector sirva para alimentar un dispositivo y no para alimentar al pic.
Respecto a las resistencias en la linea TX/RX las he puesto de 1K porque es lo que tenia a mano y no dan problemas.
Ademas no me funciona el pulsador de entrada (siempre da nivel logico 1), a menos que puentee el diodo led y no se muy bien porque, quizas por la caida de ension que hay en el diodo??
Y el buzzer suena muy debil asi conectado, mientras que si lo conecto directamente al pic saltandome el ULN2803 suena bien, esto tampoco lo entiendo??.
A ver quien puede recomendarme algun regulador de 5 voltios, he puesto un 7805, segun datasheet de hasta 1 A y he medido el consumo de un servo cuando va forzado y es de unos 400mA cada, asi que necesitaria un regulador de unos 5A para ir sobrado.
Gracias...
-
Ademas no me funciona el pulsador de entrada (siempre da nivel logico 1), a menos que puentee el diodo led y no se muy bien porque, quizas por la caida de ension que hay en el diodo??
Sengún el Datasheet del 16F628A, la VIL máxima (máxima tensión de entrada para interpretarlo como "0") sobre el pin RA4 es de 0.2VDD -si alimentás con 5V sería 1V de entrada-. En tu caso al estar el Led conectado de esa manera, hace que el nivel sobre dicho pin sea igual a la tensión del LED (alrededor de 1.5V) por lo cual nunca te interpreta nivel bajo.
fijate conectarlo como está en el adjunto este....
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30558.0;attach=11957)
-
Editado el primer post con el circuito final. Muchas gracias...