h1

Envio de instrucciones a AX-12 y a AX-S1

Cuadro de instrucciones del servomotor AX-12 (Cuadro 1)

Cuadro de instrucciones de el modulo de sensores AX-S1 (Cuadro 2)

Enviar parámetros a AX-12+ y a AX-S1

Gracias a los dos cuadros que tenemos arriba, conocemos la posición en la memoria de todas las instrucciones que poseen tanto AX-12 como AX-S1, ahora hay que descubrir que es lo que se envía al motor o al modulo de sensores para que ejecute una función de estas.

Empezaremos a desmenuzar lo que enviamos a un motor o al modulo a partir de un ejemplo:

Este ejemplo lo que hace es mover el motor a la posición 512 de el motor, a la velocidad media que puede dar el motor.

FF – FF

Los dos primeros parámetros que enviamos son FF – FF, estos dos parámetros son obligatorios siempre que se envía algo a cualquiera de los motores o al modulo, digamos que sirve para indicar al motor que tienen que empezar a leer desde ese punto.

ID

Cada motor y el modulo de sensores tienen una ID memorizada en su memoria EEPROM, esta varia entre 1-18 en los motores, y la ID 100 para el modulo de sensores (esto son los parámetros preestablecidos de fabrica de los servomotores y el modulo).

Una vez sabemos esto, nosotros deseamos enviar la información a los motores o al modulo deberemos enviarle su identificación, para ello enviamos el numero de ID de este en este parámetro.

Lenght

El parámetro lenght da una información muy importante, lo que le enviamos con este numero es el numero de parámetros que le vamos a enviar +2, por tanto si le enviamos un 7 como en el ejemplo en realidad lo que vamos a enviar son 5 parámetros como se ve en este.

Instrucción

Según la tabla de arriba vemos que hay 7 instrucciones, en el ejemplo enviamos un numero 3 por lo tanto estamos usando la instrucción WRITE DATA, con esta lo que indicamos es que queremos escribir en la memoria de el servo o bien del modulo de sensores.

Parametros

1E – 00 – 02 – 00 – 02

Como ya hemos dicho antes al enviar un 7 en el lenght lo que estamos haciendo es decirle que enviaremos 5 parámetros, por tanto debemos enviarle 5 parámetros valga la redundancia, el primero de estos parámetros es la posición de la memoria en la que vamos a comenzar a escribir los parámetros, en este caso será en la posición 1E (o 30 en decimal).

Como vemos en la imagen a partir de la posición 1E los 4 siguientes parámetros son Goal Position(L) y (H), seguido de esto Moving Speed(L) Y (H), ahora tenemos que función hacen las posiciones de la 30 a la 33 y que números les hemos enviado, lo que se ve es que para hacer una función le enviamos dos parámetros, la parte baja y la parte alta, en este ejemplo como hemos dicho le enviamos un 510 tanto a la función goal position como a la función moving speed, por tanto para conseguir el bit bajo y el bit alto debemos hacer un pequeño calculo.

510/255=2 resto=0

Como vemos en el cálculo conseguimos los dos números con ese simple cálculo, el resto del cálculo se convierte en la parte baja del parámetro y el número de la división en el número alto.

Hay que tener en cuenta que no todas las funciones necesitan que se le envié una parte baja y una alta, hay funciones que simplemente se le envía un 1 o un 0 o números que son mas pequeños que 255, y por lo tanto no necesitan parte alta y baja, por ejemplo encender un led simplemente necesita enviar un 1 para encender el led o un 0 para apagarlo.

Checksum

El número del checksum es un número que sirve para hacer la comprobación de que lo que enviamos es correcto, para esto se hace un cálculo matemático muy sencillo.

Checksum = (ID + Lenght + Parámetros + Instrucción + parametro1 + … + Parámetro N)

Ahora debemos invertir este numero checksum, para ello simplemente haremos la siguiente operación.

Checksumfinal = 255 – Checksum

Si el numero checksum fuera mas grande de 255, deberíamos hacer otro pequeño calculo antes de poder invertir el numero, ya que el numero checksum es solo el bit bajo de la suma que hemos obtenido, para ello simplemente dividiremos el numero checksum entre 255 y el numero checksum se convertirá en el resto obtenido.

Ejemplo:

ID = 5

Lenght = 7

Instrucción = 3

Parametro1 = 200

Parametro2 = 2

Parametro3 = 100

Parametro4 = 1

Checksum= 318

Si ahora directamente hiciéramos el cálculo de checksumfinal, esto nos daría un número negativo, por tanto hacemos lo siguiente.

318/255=1 Resto=63

Ahora que tenemos ese resto este se ha convertido en nuestro numero checksum, con este calcularemos el numero checksumfinal.

Checksumfinal= 255-62 = 192

Recibir instrucciones de AX-12+ y AX-S1

Primeramente debemos saber que antes de recibir un paquete de datos, nosotros tenemos que enviar uno a los AX-12+ o a AX-S1, en el paquete que nosotros enviemos estaremos pidiéndole una información, realmente siempre hay un paquete de datos de vuelta, pero en muchas funciones es irrelevante aunque está bien saber que devuelve porque el paquete de vuelta nos informa si se ha producido algún error.

Seguiremos la misma manera de antes, explicaremos lo que sucede a partir de un ejemplo:

Paquete que nosotros enviamos:

Paquete de respuesta:

En el ejemplo enviamos la instrucción 2B (43), esta instrucción nos devolverá la temperatura del motor al que le preguntamos.

Viendo el ejemplo podemos darnos cuenta de que en el paquete de envió es muy parecido al que usamos anteriormente, tiene exactamente las mismas partes a enviar, en el paquete de respuesta la instrucción a desaparecido y a aparecido la variable error.

La primera parte (FF – FF – ID – Lenght) es igual que cuando enviamos.

Error

Por norma general esta variable siempre será 0, lo cual nos indica que no se ha producido ningún error, si recibimos un 1 nos indicara que se ha producido un error, pero es algo muy, muy poco común.

Parámetro

En el ejemplo esta variable es un 0×20, si pasamos ese número a decimal tenemos un 32, ese número es exactamente la temperatura en ese instante del motor, así que esta variable devuelve en hexadecimal lo que estamos pidiendo.

Checksum

Es exactamente lo mismo que cuando enviamos.

Descargar manual en PDF

Pagina principal

Dejar un comentario