Autor Tema: Proyecto: Placa controladora de 28 servos para robot humanoide  (Leído 49141 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #60 en: 29 de Marzo de 2008, 13:44:59 »
 :-/ que bien! tenías razón era el conector serie  :P lo quité y pude mover el servo 1, pero tiene problema con el ángulo, voy a chequear también.

Eso de la velocidad está bueno  :wink:

PD1: Ya ví el error  :? , lo estoy corrigiendo.

PD2: Miento, el programa envía bien los grados, envía 1ero el byte bajo y luego el alto, es decir P1 y luego P2, está bien eso?

Por ejemplo para 360º, envía P1=00000001b y P2=01101000b, lo que es lo mismo P1=1d y P2=104d

Cómo tengo que enviarle los grados?

PD3: El programa en el pic encargado de controlar los servos cuando le indico 299 pulsos, el posiciona el servo en 299*0,5-90=59,5º y si le indico un número <=299 lo hace bien, pero si le digo 300 pulsos se descontrola  y se regresa  :?
« Última modificación: 29 de Marzo de 2008, 14:14:05 por gu1llermo »

Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #61 en: 29 de Marzo de 2008, 19:30:12 »
He corregido el Archivo de simulación del proteus y colgado de nuevo en el post anterior, le quité el conector DB9 por presentar conflictos con el pic, gracias a la observación de Manofwar.

Saludos.

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #62 en: 02 de Abril de 2008, 03:20:54 »
Hola Guillermo.

Ayer por la tarde estuve jugando con la simulación y támpoco conseguí que se moviera el dichoso SERVO1.

Es de vital importancia que Manofwar nos diga cual es exactamente la trama que se envia.

Yo estuve provando con la trama SVP1P2 (4 bytes).

S: nº de Servo
V: Velocidad
P1: Byte bajo de la posición
P2: byte alto de la posición

Creo que los Bytes los tienes mal:

Para el ejemplo que tienes de 360 sería:

P1=68 (6·16^1+8·16^0=104 en decimal)
P2=01 (0·16^3+1·16^2=256 en decimal) ... de tal forma que 256+104=360=+90º

Otro ejemplo: 0101B400 ----> Servo1, velocidad "1", posición B4=11·16+4=180=0º

Yo simplifiqué al máximo el programa de tu PIC auxiliar y desde él enviaba solo:

printf("%u",1);  //SERVO1

printf("%u",1);     //Velocidad

printf("%u",180);  //Byte bajo (P1)

printf("%u",0);     //Byte alto (P2)

Esto se supone que tendría que posicionar al SERVO1 en 0º pero no se inmuta.

Repito, es fundamental que Manofwar nos diga si la trama es esta.

Por otra parte Manofwar dice que se deben de enviar los datos cuando RTS pase a 1. En el PROTEUS RTS está parpadeando contínuamente ??

Un saludo

 



Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #63 en: 02 de Abril de 2008, 16:53:31 »
Tienes razón Pocher, me equivoqué pero fué escribiendo, porque el programa lo hace bien

...
PD2: Miento, el programa envía bien los grados, envía 1ero el byte bajo y luego el alto, es decir P1 y luego P2, está bien eso?

Por ejemplo para 360º, envía P1=00000001b y P2=01101000b, lo que es lo mismo P1=1d y P2=104d
...

En la cita anterior lo correcto sería decir: P1=104d y P2=1d, para que 256*1+104=360

...
Otro ejemplo: 0101B400 ----> Servo1, velocidad "1", posición B4=11·16+4=180=0º
...

Pocher, el programa que yo hice del pic auxiliar no admite ninguna letra, es decir solo le puedes escribir números en base decimal [0..9]

Por ejemplo:
Servo son dos dígitos: SS [01..24]
Velocidad son tres dígitos: VVV [000...255]
Grados son tres dígitos: GGG [000...360]

En la interface que hice, por el virtual terminal tienes que escribir 8 números en total, por ejemplo:
Servo: 01 (Servo 1)
Velocidad: 001 (Velocidad 1)
Grados: 020 (Supuestamente 20º, pero son 20 pulsos según entiendo)

Todo en una sola línea, esto es 01001020 y pulsar ENTER, que cuando RTS se ponga en 1 el pic envía la trama y te devuelve el mensaje de datos enviados!

...
Por otra parte Manofwar dice que se deben de enviar los datos cuando RTS pase a 1. En el PROTEUS RTS está parpadeando contínuamente ??
...

La señal RTS siempre está parpadeando, a veces tarda un poco en hacerlo pero cuando ocurre una transición alfa, es decir que va de 0 a 1, por interrupción mando la trama.

Cualquier otra cosa pregunta, por aquí estamos y que bueno que lo hayas probado también, esperaremos los comentarios de Manowar.

PD1: Pocher el programa no está pa bruto como te gustan  8) pero manda la trama  ;-)

PD2:
...
Otro ejemplo: 0101B400 ----> Servo1, velocidad "1", posición B4=11·16+4=180=0º
...
Esto se supone que tendría que posicionar al SERVO1 en 0º pero no se inmuta.
...

La controladora no hace nada porque no está recibiendo los datos correctamente, los datos correctamente, si es a través de mi interface, son puros dígitos del 0 al 9.

Saludos.
« Última modificación: 02 de Abril de 2008, 17:03:39 por gu1llermo »

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #64 en: 03 de Abril de 2008, 02:30:08 »
Hola Guillermo.

Se vé que no me he sabido explicar. Tu programa del PIC auxiliar seguramente estará bien, yo no lo estoy usando,lo he dejado ligerito de ropa, en el programa del PIC auxiliar que has introducido lo he borrado todo y solo le he metido los 4 printf:

printf("%u",1);     //SERVO1

printf("%u",1);     //Velocidad

printf("%u",180);  //Byte bajo (P1) correspondiente al hexadecimal B4

printf("%u",0);     //Byte alto (P2)

... para ver si "el PIC de Manofwar" posicionaba bien al SERVO1.

Según comentaba Manofwar esta es la trama que él envia:


Hola LordLaFebre:

Te dejo una imagen de mi configuración

 

A ver si soy capaz de poner a trabajas a las pocas neuronas que tengo funcionales :) :) y esta vez dar una explicación clara

La trama de bytes la envías en el orden correcto, pero como puedes ver no envío los datos como ASCII si no como HEX. Al enviarlos ASCII estás enviando el valor del carácter 1, B, 4 ó 0.

La configuración debe ser:

velocidad: 115200
bits de datos: 8
paridad: No
bits de parada: 1

Es necesario activar el RTS (control por hardware de la comunicación) ya que de otro modo se interfiere con los PWM, originándose algún temblor en los servos, esto creo que puedo arreglarlo y poder utilizar ese pin para un servo más.

Como puedes observar en mi configuración, es el puerto COM2 por donde envío los datos y en la simulación el puerto seríe está configurado con el COM1. Esto lo tuve que hacer así ya que si intentaba enviar y recibir por el mismo puerto, COM1 como en tu caso, había problemas. Si era el terminal serie el que activaba primero el COM1, proteus no protestaba al comenzar la simulación pero no hace caso a los datos enviados desde el terminal. Si es al contrario, primero ejecutamos la simulación y luego el terminal serie, este último protestaba diciendo que el puerto ya esta ocupado por otra aplicación.

¿Cómo lo haces para no tener este problema?

Hola gu1llermo:

No he visto tu hilo, el C y yo no nos llevamos demasiado bien :mrgreen:, aparte de no entrar mucho en el foro, pero descuida que lo haré y ya te formularé alguna pregunta seguro.

En cuanto a la resolución de mi código, lo tengo restringido a 0,5º pero creo recordar que podía llegar a los 0,35º (unos 5us de interrupción).

Tengo algo hecho para los 18F, también en ensamblador, y sí que tenía una resolución bajísima, otra cosa es que sea útil.

Saludos



... es decir 01 01 B4 00 que es lo que le intento enviar con los printf.

LordLafebre también intentó enviar dicha trama y támpoco le funcionaba. ¿qué pasa? Pués no lo sé.

PD. Tengo una idea para hacer el programa en el cual se usaria C para ordenar los tiempos de menor a mayor y ensamblador para activar todas las señales al mismo tiempo y luego ir bajándolas a cero de menor a mayor utilizando el TMR1 comparando su valor con los registros ordenados en C (fosc=20MHz fundamental). No sé lo que saldrá, a ver si esta tarde me pongo a ello.

Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #65 en: 03 de Abril de 2008, 09:48:07 »
Ah! ok ya entendí, entonces tienes una omisión al enviar los datos y es que el pic controlador solo te escuchará si tiene la señal RTS en alto, por eso es que en mi programa del pic auxiliar utilizo la interrupción RB0, y en dicho pin coloco la señal RTS de manera que al cambiar a 1 mando "toda" la trama y tu no lo haces así, mandas byte a byte sin tener esto en cuenta, mi programa del pic auxiliar si mueve al servo 1 y a todos los servos, el problema es con los grados, pero eso creo que está en el pic controlador.

Saludos.

Desconectado Cortijero

  • PIC12
  • **
  • Mensajes: 57
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #66 en: 09 de Mayo de 2010, 17:53:37 »
Hola! estoy muy interesado en hacerme una plaquita controladora de estas. Me he bajado la simulacion que hay por aqui, de la plaquita y otro pic mas para ordenar los movimientos de los servos, pero no entiendo muy bien el funcionamiento.

En cuanto al numero de servo, y la velocidad no hay problema, pero en cuanto a los ultimos 3 digitos, no termino de entenderlo...  :?

Alguien me puede ayudar??

Saludos y gracias!

Desconectado brunomozzi

  • PIC10
  • *
  • Mensajes: 9
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #67 en: 22 de Junio de 2010, 04:45:27 »
Hola, gran proyecto y gran idea tambien, suerte con el mismo

Desconectado LeugimZerO

  • PIC16
  • ***
  • Mensajes: 112
    • SmaTSoft Electronics
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #68 en: 11 de Julio de 2010, 20:54:10 »
Bueno, por fin he podido dedicarle tiempo a este proyecto. Así que os presento el diseño, espero que definitivo, de la controladora.

He aumentado el número de servos de 24 a 28, he restringido la resolución a 0,5º y el protocolo de comunicación ha cambiado un poco.

La comunicación se realiza enviando 4 bytes del siguiente modo:

 S V P1 P2

- S es el número de servo a mover, de 1 a 28. (1 byte)
- V la velocidad a la que se movera el servo desde la posición actual hasta la nueva posición (1byte), ejemplo: un valor de 1 correspondería a 0,5º cada 20ms.
- P1 y P2. Estos 2 bytes son la posición a la que debe ir el servo (0 a 360), P1 corresponde al byte de menos peso y P2 al de más. ejemplo: 68 01 = 360 =+90º

Si se quiere cambiar la posición de varios servos o de todos a la vez la orden será:

S V P1 P2 S V P1 P2 S V P1 P2 ...

Espero en este fin de semana montarla y poner alguna foto para que se vea mejor el resultado final, ya que hasta ahora sólo la he montado y comprobado su funcionamiento en una protoboard.

Una imagen de como quedará




Si alguien quiere ir buscando bugs AQUÍ tenéis lo necesario para montarla.

Saludos
una pregunta, de donde descargo los archivos, no veo los enlaces... :(
saludos desde Peru

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #69 en: 26 de Octubre de 2010, 05:09:50 »
Hola a todos, ya se que ha pasado mucho tiempo desde el ultimo post, alguien podria volver a postear todos los archivos de la controladora del amigo Manofwar, los enlaces no funcionan.

Muchas gracias.
Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado robertito_c_r

  • PIC10
  • *
  • Mensajes: 2
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #70 en: 22 de Enero de 2011, 03:59:18 »
Hola a todos.
Estoy interesado en construir la controladora para 28 servos pero parece que los links ya no estan accesibles.
Podriais decirme algun link para poder descargarlos o enviarmelos por correo electronico?
Gracias y un saludo

Desconectado movlwjps

  • PIC10
  • *
  • Mensajes: 2
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #71 en: 23 de Enero de 2011, 01:32:29 »
Yo hice un algoritmo para controlar 24 servomotores con el Timer1 de 16bit del pic a resolucion de 0,0075 grados, si quieren se los pongo solo digan, ademas se comunica por el RS-232 y los servos no vibran en absoluto. :)

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #72 en: 23 de Enero de 2011, 02:00:29 »
Yo hice un algoritmo para controlar 24 servomotores con el Timer1 de 16bit del pic a resolucion de 0,0075 grados, si quieren se los pongo solo digan, ademas se comunica por el RS-232 y los servos no vibran en absoluto. :)

Pues sería bueno que lo subas.

Parece muy interesante!

Saludos!

Desconectado robotec

  • PIC10
  • *
  • Mensajes: 3
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #73 en: 17 de Febrero de 2011, 23:16:38 »
que tal saludos estoy empezando a trabajar con la programacion con el c30, tengo conocimientos acerca del compilador ccs, y esstoy checando el programa de guillermo, para realizar una placa que controle 30 servos, estari bien que pudieras subir tu proyecto AKENAFAB, para darnos mejor idea con respecto al diseño y trabajar respecto a la programacion. como valla teniendo avances, ire subiendolo para compartir

Desconectado mktronic07

  • PIC10
  • *
  • Mensajes: 1
Re: Proyecto: Placa controladora de 28 servos para robot humanoide
« Respuesta #74 en: 14 de Marzo de 2014, 12:32:22 »
Buenas, me podrían proporcionar el código fuente y los archivos pcb, porque no están disponibles, estoy interesado en realizar una placa controladora pero aun no se muy bien como controlar estos servos, controlarlos desde la pc. Gracias!!!