Circuito controlador de hasta 21 servos que se controla mediante señales I2C. Las señales I2C pueden proceder
del exterior, o directamente desde un procesador en el propio circuito, ya que incorpora un zócalo en el que se puede
colocar un microcontrolador como el BasicX24 o el Basic Stamp o el nuevo y económico Picaxe 18, con lo que se obtiene
un sistema totalmente autónomo, como por ejemplo para controlar un robot. Todos los pines del controlador que no se
utilizan para el bus I2C, están disponibles en un conector para utilizarlos en otras tareas de entrada y salida. Incorpora
bornas de alimentación independiente para alimentar los servos y el circuito, aunque también es posible utilizar
alimentación única si no supera los 7,2 V y es bastante potente. Esta última opción solo es valida
cuando se trata de un número bajo de servos (menos de 5 ó 6) y además lo servos no van realizar trabajos de
gran potencia.
Esto es una traducción de la documentación original del fabricante e incluye toda la información
disponible sobre este circuito.
SD21 es un circuito controlador de servos para 21 canales. Este módulo puede controlar hasta 21 servos RC, manteniendo
una tasa de refresco de 20mS, sea cual sea el número de servos utilizados o sus posiciones (ancho de pulso). Puede
controlar tanto la posición como la velocidad de los servos. Se controlan a través del envío de comandos
al procesador PIC18F2220 que esta en placa mediante un bus I2C. Hay 3 conectores I2C en la placa, pudiendo utilizar cualquiera
de ellos para conectarse con su controlador. Asimismo, pueden utilizarse otros controladores del mercado como Basic X24,
Picaxe, BS2p, Atom, etc. y conectarlos directamente al módulo ya que incluye zócalos libres para el procesador
Picaxe y para procesadores de 24 pines como el BasicX24, convirtiéndose de esta forma en un potente controlador autónomo
para sus proyectos de robótica.
Alimentación
Hay dos maneras de alimentar el controlador SD21. El primer método es una alimentación de 5 voltios para la
sección del procesador y una alimentación independiente de 6-7,2 voltios para los servos. Este es el método
recomendado y se utilizan las 4 vias del las bornas de alimentación. Las conexiones de tierra de los datos lógicos
y los servos se realizan internamente en la placa de circuito impreso. Teniendo en cuenta que no todos quieren utilizar dos
alimentaciones independientes, se ha habilitado el uso de una única batería (normalmente de 7,2 voltios) para alimentar
los servos y el módulo. Para ello debe colocar un puente entre los dos pines situados bajo las bornas de conexión.
De este modo se conecta la alimentación del servo a un regulador de 5 voltios de bajo caída de tensión
para alimentar la parte lógica. En el caso de alimentación única, la conexion de la alimentación
debe hacerse siempre desde los terminales correspondientes a los servos, y no los de la alimentación lógica. El circuito
SD21 es capaz de controlar la tensión de la batería de los servos, que está disponible para su lectura
a través de un registro interno.
Conexiones
Los servos se conectan directamente en el controlador SD21, con el pin de tierra (cable negro en un servo hitec) lo más
cerca posible de la parte externa de la placa de circuito impreso.
Basic X24 o controlador compatible
El terminal de 24 pines en el controlador SD21 permite el uso de un controlador Basic X24, BS2p u otro controlador compatible
como por ejemplo, el ATOM. El BasicX24 se inserta en el pin 1 situado en la parte exterior del módulo separado de
los conectores de los servos. El pin 5 y pin 6 del procesador se utilizan para las líneas SDA/SCL de I2C. Estos son
los únicos pines de entrada/salida (I/O) utilizados en el módulo. El resto de pines se encuentran en el zócalo
de 16 pines, como se muestra en la imagen y pueden emplearse en cualquier otra cosa.
Controlador Picaxe
El zocalo de 18 pines del SD21 permite el uso del controlador PICAXE-18X. Las salidas 1 y 4 se utilizan para I2C (son el
puerto hardware de I2C en el PIC). Las demás entradas y salidas están disponibles en el zócalo de 16
pines. El controlador Picaxe se conecta con el pin 1 más próximo al extremo del módulo y separado de
los conectores de los servos.
Registros
El núcleo del controlador SD21 es el chip preprogramado PIC18F2220. Se accede a el por el bus I2C en la dirección
0xC2 ($C2) a través de cualquiera de las opciones de controladores mencionados anteriormente, conectados al módulo,
o desde un controlador externo conectado a uno de los conectores I2C. Existen tres registros internos asociados con cada
uno de los 21 servos. La velocidad, el byte de menor peso y el byte de mayor peso de la posición.
Registro |
Servo |
Función |
|
Registro |
Servo |
Función |
|
Registro |
Servo |
Función |
0 |
1 |
Velocidad |
|
24 |
9 |
Velocidad |
|
48 |
17 |
Velocidad |
1 |
1 |
Byte de posición bajo |
|
25 |
9 |
Byte de posición bajo |
|
49 |
17 |
Byte de posición bajo |
2 |
1 |
Byte de posición alto |
|
26 |
9 |
Byte de posición alto |
|
50 |
17 |
Byte de posición alto |
3 |
2 |
Velocidad |
|
27 |
10 |
Velocidad |
|
51 |
18 |
Velocidad |
4 |
2 |
Byte de posición bajo |
|
28 |
10 |
Byte de posición bajo |
|
52 |
18 |
Byte de posición bajo |
5 |
2 |
Byte de posición alto |
|
29 |
10 |
Byte de posición alto |
|
53 |
18 |
Byte de posición alto |
6 |
3 |
Velocidad |
|
30 |
11 |
Velocidad |
|
54 |
19 |
Velocidad |
7 |
3 |
Byte de posición bajo |
|
31 |
11 |
Byte de posición bajo |
|
55 |
19 |
Byte de posición bajo |
8 |
3 |
Byte de posición alto |
|
32 |
11 |
Byte de posición alto |
|
56 |
19 |
Byte de posición alto |
9 |
4 |
Velocidad |
|
33 |
12 |
Velocidad |
|
57 |
20 |
Velocidad |
10 |
4 |
Byte de posición bajo |
|
34 |
12 |
Byte de posición bajo |
|
58 |
20 |
Byte de posición bajo |
11 |
4 |
Byte de posición alto |
|
35 |
12 |
Byte de posición alto |
|
59 |
20 |
Byte de posición alto |
12 |
5 |
Velocidad |
|
36 |
13 |
Velocidad |
|
60 |
21 |
Velocidad |
13 |
5 |
Byte de posición bajo |
|
37 |
13 |
Byte de posición bajo |
|
61 |
21 |
Byte de posición bajo |
14 |
5 |
Byte de posición alto |
|
38 |
13 |
Byte de posición alto |
|
62 |
21 |
Byte de posición alto |
15 |
6 |
Velocidad |
|
39 |
14 |
Velocidad |
|
63 |
- |
|
16 |
6 |
Byte de posición bajo |
|
40 |
14 |
Byte de posición bajo |
|
64 |
- |
Versión de Software |
17 |
6 |
Byte de posición alto |
|
41 |
14 |
Byte de posición alto |
|
65 |
- |
Voltios de batería |
18 |
7 |
Velocidad |
|
42 |
15 |
Velocidad |
|
|
|
|
19 |
7 |
Byte de posición bajo |
|
43 |
15 |
Byte de posición bajo |
|
|
|
|
20 |
7 |
Byte de posición alto |
|
44 |
15 |
Byte de posición alto |
|
|
|
|
21 |
8 |
Velocidad |
|
45 |
16 |
Velocidad |
|
|
|
|
22 |
8 |
Byte de posición bajo |
|
46 |
16 |
Byte de posición bajo |
|
|
|
|
23 |
8 |
Byte de posición alto |
|
47 |
16 |
Byte de posición alto |
|
|
|
|
Posición de servo
La posición (Byte de posición bajo/alto) se trata de un número de 16 bits que establece directamente
el ancho del pulso de salida expresado en uS. Generalmente establecer la posición como 1500 (1500uS o 1,5mS) permite
mover a la mayoría de los servos a su posición central. El rango de los anchos de pulsos admitidos normalmente
va desde 1000uS (1mS) a 2000uS (2mS). Sin embargo, es posible superar estos límites. En un servo Hitec HS311, podemos
establecer la posición desde 800 a 2200 para conseguir un rango amplio de movimiento. Tenga cuidado ya que es fácil
hacer que el servo alcance los topes internos si define anchos de pulso fuera de los límites inferiores y superiores.
Los registros pueden también leerse de manera inversa. La posición será la posición actual del
servo durante un movimiento con velocidad controlada, por lo que puede realizar un seguimiento de su progreso hacia la posición
requerida.
Velocidad de servo
El registro de velocidad controla la velocidad a la que se mueve el servo a su nueva posición. Los pulsos de los
servos se refrescan automáticamente cada 20mS. Si la velocidad de registro es cero (0x00) entonces el pulso del servo
se establecerá en la posición solicitada inmediatamente. Tras el encendido, los registros de velocidad tienen
un valor fijo de cero para dar la máxima velocidad, por lo que si no desea reducir la velocidad, deberá ignorar
los registros de Velocidad. Si el registro de velocidad está definido con un valor diferente a cero, entonces dicho
valor se sumará a la posición actual cada 20mS hasta alcanzar la posición objetivo. Si desea moverse
desde 1000 a 2000 y el registro de velocidad esté definido en 10, entonces tardará 2 segundos en alcanzar la
posición 2000. La fórmula para definir el tiempo que tardará el movimiento es la siguiente:
(posición final-posición de inicio)/Registro de Velocidad)*20mS
A continuación, encontrará algunos ejemplos:
Posición de inicio |
Posición objetivo |
Registro de velocidad |
Duración del movimiento |
2000 |
1000 |
10 |
2000mS (2Seg) |
1000 |
2000 |
10 |
2000mS (2Seg) |
1000 |
2000 |
1 |
20000mS (20Seg) |
1000 |
2000 |
100 |
200mS (0,2Seg) |
1234 |
1987 |
69 |
220mS (0,22Seg) |
Más registros:
Los servos puede controlarse completamente a través de los registros anteriores, sin embargo, para facilitar las
cosas a los controladores de pocos recursos como el Picaxe, hay otro grupo de registros (63-83 inclusive). Estos pueden definir
la posición escribiendo un único byte en lugar de dos bytes. Estos registros no están implementados
físicamente, por lo que no pueden leerse. Al escribir en ellos, el procesador multiplicará el número
escrito por 6 y después se sumará una compensación de 732 y almacenará el resultado en los registros
de 16 bits reales descritos arriba. Le proporciona un rango de 732 (0*6+732) a 2268 (256*6+732) en pasos de 6uS. Este conjunto
de registros se denomina el conjunto Base. La fórmula es:
Reg Base*6+732uS
Aunque no pueden leerse, los datos se almacenarán internamente y se utilizarán con otros dos conjuntos de registros.
Son las compensaciones positivas (84-104) y negativas (105-125). Al escribir la dirección de compensación positiva,
el procesador la sumará a la posición base, la multiplicará por 6 y le sumará 732. Se realiza
una función similar para las compensaciones negativas. Las fórmulas son las siguientes:
(RegBase + RegPos) * 6 + 732 y
(RegBase - RegNeg) * 6 + 732
Servo |
Registro Base |
Reg. compensación positiva |
Reg. compensación negativa |
1 |
63 |
84 |
105 |
2 |
64 |
85 |
106 |
3 |
65 |
86 |
107 |
4 |
66 |
87 |
108 |
5 |
67 |
88 |
109 |
6 |
68 |
89 |
110 |
7 |
69 |
90 |
111 |
8 |
70 |
91 |
112 |
9 |
71 |
92 |
113 |
10 |
72 |
93 |
114 |
11 |
73 |
94 |
115 |
12 |
74 |
95 |
116 |
13 |
75 |
96 |
117 |
14 |
76 |
97 |
118 |
15 |
77 |
98 |
119 |
16 |
78 |
99 |
120 |
17 |
79 |
100 |
121 |
18 |
80 |
101 |
122 |
19 |
81 |
102 |
123 |
20 |
82 |
102 |
124 |
21 |
83 |
104 |
125 |
Resumen de Registros
Para controlar de manera precisa los servos se utiliza el registro de 16 bits reales que establece la posición del
servo directamente en uS. Con controladores de recursos de valores bajos, el servo puede ser controlado a través de
valores de 8 bits. Los registros de compensaciones positivas y negativas facilitan considerablemente el diseño de
los robots caminantes en los que las patas se mueven fácilmente hacia los lados desde una posición central.
Disponemos de ejemplo de control de un robot EH2 de Lynxmotion a través de un controlador BS2p Stamp que utiliza registros
de 16 bits y un controlador Picaxe haciendo los mismos movimientos y basándose en registros Base y Compensación
de 8-bits.
Número de Revisión de Software
El Registro 64 es el número de revisión del software (3 en el momento de redacción de este documento).
Tensión de alimentación
El registro 65 contiene la tensión de la alimentación de los servos en unidades de 39mV hasta un máximo
de 10v. Una tensión de pila de 7,2v dará un valor de 184. 6v equivalen a un valor aproximado de 154. Se actualiza
cada 20mS tanto si se lee el valor como si no.
Dirección
El módulo de servo SD21 se encuentra en la dirección 0xC2 del bus I2C.
Código de ejemplo
Le muestra el uso de un BS2p Stamp para controlar un servo. Define un bucle simple que envía el servo entre dos posiciones
'{$STAMP BS2p}
SDA CON 0 ' SDA on pin0, SCL on pin1
SD21 CON $C2 ' SD21 I2C address
Servo1 CON 0 ' register address of servo1 speed reg (followed by pos low/pos high)
Speed CON 0 ' maximum speed
Servo1p CON 1800 ' Right position
Servo1n CON 1200 ' Left position
Servo VAR W0
Loop:
Servo = Servo1p
I2COUT SDA, SD21, Servo1, [Speed, Servo.LOWBYTE, Servo.HIGHBYTE]
PAUSE 300
Servo = Servo1n
I2COUT SDA, SD21, Servo1, [Speed, Servo.LOWBYTE, Servo.HIGHBYTE]
PAUSE 300
GOTO Loop
|
Lo siguiente hace lo mismo con el controlador Picaxe utilizando el conjunto de registros alternativo.
Servo1 = 63 ' servo 1 base register
Servo1p = 84 ' servo 1 positive offset register
Servo1n = 105 ' servo 1 negative offset register
Base = 128 ' centre position
Offset = 50 ' +/- 50 from centre position
ProgStart:
i2cslave $c2, i2cslow, i2cbyte ' setup i2c port for servo controller
writei2c Servo1, (Base)
Loop:
writei2c Servo1p, (Offset)
pause 300
writei2c Servo1n, (Offset)
pause 300
goto Loop
|
Haga clic en el botón COMPRAR para añadir este producto a su carrito de la compra.
38,65-Euros.
IVA incluido
|
CONTROLADOR PARA 21 SERVOS POR I2C SD21
Vea mas productos de esta categoría en:
Controladores de Servos
Ir a la Página Principal de www.SuperRobotica.com
Actualizada el 14/06/2024 © 2002 -2024 INTPLUS ®. Todos los derechos reservados
|