Controlar servo parallax de rotacion continua

andrezzs

Lanero Regular
1 Dic 2006
9
Hola, soy Andrezzs, estoy realizando un proyecto para una tarjeta gogo (goboard) http//www.gogoboard.com, mediante una aplicación en vc++ tengo que mover dos servomotores el ángulo que yo desee.
Latarjeta gogo tiene un pic16f877, hasta el momento puede controlaer algunos dispositivos como led, alarma, motor, servo.

por ejenplo para encender la alarma de la tarjeta gogoboard, según el documento pdf de esta dirección: http://padthai.media.mit.edu:8080/cocoon/gogosite/availableboards/gogo30/GoGoSerialProtocol4_2_0_es.pdf
yo en un programa que he hecho en vc++6 envio la siguiente cadena:
0x54 0xFE 0xC4 0x00
la cadena la envio en formato hexadecimal, aunque también podría enviarla en ascii.
la cadena la envio en una función que se llama writes_bytes

los dos primeros bytes de la cadena son de encabezamiento,
El tercer byte (0xC4) es el comando alarma en formato hexadecimal
espero que me entiendan... el envio de la cadena me resulta rebien, ya que se ejecuta.

Ahora puedo hacer girar un servo motor(un parallax de rotacion continua que es un futaba s148), pero no puedo hacerlo girar el ángulo que yo desee, según el pdf que he mencionado anteriorme para controlar servomotores tengo que enviar un comando que se llama fijar control de trabajo PWM y ademas agregarle un segundo byte de comando que son los pasos incrementales de 0a 255. no entiendo mucho eso... me gustaaría si hay me `puede ayudar, mirando el pdf que mencione, es cortito, para hacer mover un servo el ángulo que yo desee de la misma manera que envio la cadena para encender la alarma.


Espero que alguien me pueda ayudar...espero respuesta. grs.
 
Viejo ahi dice que la tarjeta t da un periodo de 13ms y que la resolucion de impulso es de 50micro seg que es lo que resulta de dividir los 13ms en 256 por lo tanto si quieres que la tarjeta gire 90grados el periodo dura 13ms segun la tarjeta si dividimos este tiempo en los 360 grados nos da 36.11micro seg por grado multiplicado por los 90 que queremos nos da 3.25ms solo tenemos que dar impulso que dure ese tiempo que si lo dividimos en los 50micros que dura el paso nos dara 65 impulsos que es lo que tendras que madarle a la tarjeta en el byte de ciclo de trabajo, en binario que sera 01000001
 
hola amigo, gracias por tu respuesta, el byte 01000001 en hexadecimal es 0x41 = 65 en ascii, lo he enviado de la sgte manera:
0x54 0xFE 0xC8 0x41 , como los otros coamdos que resultan bien, ahora el ángulo que se mueve a primera vista no es 90º.
al enviar esa acdena igual tengo que hacerlo en un tiempo de 3.25 o no, tu me puedes dar un ej como lo enviarias, ya que no me resulta bien
gracias

EDIT:
Hola, gracias por tu respuesta, trate de enviar el byte que tu me dijiste , pero lo envie en hexadecimal que corresponde a 0x41, pero no me funciona, yo he enviado la sgte cadena , como lo he hecho con los otros comandos que me resultan:
0x54 0xfe 0xc8 0x41 , pero se mueve un cierto angulo yo creo que 45 o un poco mas, pero no 90º
tu me podrais dar un ejemplo de como enviarlo, a otra cosa el pulso hay que enviarlo durante un tiempo de 3.25 ms.
gracias
 
primero si gira un cuarto de buelta son los 90 grados,si gira un octavo son los 45, intenta enviarle los multiplos de 65 oca 130,195 y los 255 que t permite enviar, mira por mera logica si la buelta completa son los 255 cada cuarto de este numero tienen que ser los 90 grados que da aproximadamente 64, y los 3.25ms que decia es el tiempo que tiene que durar el pulso que manda la tarjeta al motor, en cuanto a como mandar la cadena no lo c pero viendo los datos qe estas mandando segun el pdf la cadena esta correcta.
 

Los últimos temas