favorite_border favorite

Controlador para 84 servos USB SD84

S310190
DS84

SD84 es un circuito controlador de servos de 84 canales capaz de controlar hasta 84 servos de radio control con un refresco de 20 ms con independencia del número de servos conectados.

El circuito controla tanto la posición como la velocidad de los servos mediante comandos enviados a su puerto USB.

Cada canal puede ser utilizado como una entrada digital, una salida digital, o una salida de servo y adicionalmente, 36 de los canales pueden ser utilizados como entradas analógicas de 10 bits.

88.15 €
favorite_border favorite
favorite_border favorite

Más información

SD84 es un circuito controlador de servos de 84 canales capaz de controlar hasta 84 servos de radio control con un refresco de 20 mS. con independencia del numero de servos conectados. El circuito controla tanto la posición como la velocidad de los servos mediante comandos enviados a su puerto USB. Además, cada canal puede ser utilizado como una entrada digital, una salida digital, o una salida de servo y adicionalmente, 36 de los canales pueden ser utilizados como entradas analógicas de 10 bits, convirtiéndolo en un gran controlador para animatrónica. La parte lógica del circuito se alimenta directamente del bus USB, por lo que solo hay que proporcionar tensión para los servos o los circuitos que se quieran conectar. Cada grupo de 8 servos tiene su propio conector de alimentación independiente permitiendo usar diferente tensiones en cada caso. Desde el punto de vista de la programación, el circuito se controla como si fuese un puerto serie, por lo que es muy fácil de controlar desde aplicaciones como visual Basic, visual C, etc. Con este circuito puede controlar toda clase de dispositivos desde un PC.

Características

Hasta 84 canales de entradas digitales
Hasta 84 canales de salidas digitales
Hasta 84 canales de salidas de servo
Hasta 36 canales de entradas analógicas de 10 bit
Controlado y alimentado desde el bus USB
Drivers disponibles para Windows, Apple, Linux y Open BSD

Conexiones

Conexiones del circuito de control de servos SD84.

Diagrama de Conexión del SD84

El SD84 tiene 84 juegos de cabezales de 3 pin, en grupos de 4. En todos los casos, el pin más cercano al lado de fuera del PCB es Tierra 0v. El pin del medio +V es alimentado por el servo desde la terminal de tornillo asociada de 2 pin. El pin interior, es la señal pin más cercana al CPU.

Alimentación

El circuito lógico en el modulo SD84 es alimentado desde el bus USB y no necesita ninguna alimentación externa. Deberá proporcionar alimentación externa para los servos o para algunos de los otros circuitos que quiera conectar a la Entrada/Salida. Los servos se alimentan en grupos de 8 servos. PL1 proporciona la alimentación para los servos del 1 al 8 en el canal 1 al 8. La única excepción es PL5 el cual alimenta a 12 servo del canal 33 al canal 44 inclusive. Las líneas de barras del diagrama superior indica que servos están alimentados y desde que terminal de tornillos. Cada grupo puede ser alimentado desde diferentes voltajes, pero tenga en cuenta que los 0v tierras son comunes y están conectados juntos en el PCB.

Conexiones de los servos

Los servos están conectados directamente en el SD84, con el pin tierra ( cable negro en un servo hitec) conectado a la parte más cercana del borde del circuito.

Detalle de las conexiones de los servos en el SD84

Paso primero - Obtención drivers

El módulo USB-RLY08 utiliza el chip SFTDI FT232R para controlar los protocolos USB. Lo primero que debe hacer para conectar el USB-RLY08 a un puerto USB es bajarse los drivers del puerto virtual Com directamente de la página web FTDI, estos están disponibles para Windows, Apple, Linux y sistemas Open BSD. Antes de conectar el USB-RLY08 a su ordenador debería tener los drivers instalados.

Puerto COM asignado

Después de instalar los drivers y conectarlos en el modulo USB-RLY08 para un puerto USB adicional necesita saber que puerto COM se le ha asignado. Para ello solo tendrá que entrar en "Mi PC" y seleccionar el "Dispositivo Principal" abriendo después el "Puerto COM&LPT" y verá el Puerto COM2. Si desea cambiar el número del puerto solo debe seleccionarlo , elegir propiedades, selecciones avanzadas y cambiarlo al puerto serie que desee sabiendo que siempre estos deben transmitir a 19200 baudios, 8 bits de datos, no paridad y dos bits de parada.

Modo de ver el puerto COM asignado dentro del panel de control de Windows

Con los drivers instalados puede conectar el SD84 y Windows registrará los drivers.

Registros internos

Hay tres registros internos asociados con cada uno de los 84 canales:

Un registro “Mode” (1 byte) que define el modo de trabajo del canal, INPUT, OUTPUT_LOW,OUTPUT_HIGH, SERVO o ANALOGUE ( ENTRADA, SALIDA BAJA, SALIDA ALTA, SERVO O ANALOGICA)

Un registro “Servo” ( 2 byte) que define la posición del servo en µS. El registro “Servo” es un número entero (dos bytes). que representa la posición en formato byte bajo/alto.

Un registro “Speed” (1 byte) que define la velocidad a la que el servo cambia de posición.

Comandos

Dec Hex Comando Descripción Respuesta
1 0x01 SET_SERVO Establece la posición en µS de 1 a 84 servos 1 Byte, código de error - ver Códigos de Error
2 0x02 GET_SERVO Devuelve la posición actual ( en µS) de un único servo 2 Bytes, Posición del servo
Byte bajo primero y luego byte alto.
3 0x0 SET_SPEED Configura la velocidad de movimiento de 1 a 84 servo. Ver Códigos de Error
4 0x04 SET_MODE Configura el modo de los canales 1 al 84,no analógicos-vea el comando SET AD CNT 1 Byte, código de error - ver Códigos de Error
5 0x05 GET_MODE Devuelve el modo actual de un canal único 1 Byte, Modo
6 0x06 SET_AD_CNT Configura el número de canales analógicos desde el 0 al 36. Esta también configura el Modo para el canal a analógico 1 Byte, código de error - ver Códigos de Error
7 0x07 GET_AD_CNT Devuelve los números de la configuración de los canales analógicos actuales 1 Byte, Números de canales analógicos.
8 0x08 GET_INPUT Devuelve el estado de una única entrada 1 Byte, 0x00 para bajo , 0xFF para alto
9 0x09 GET_ADC Devuelve el valor actual de un canal analógico 2 Bytes, primero byte bajo, y luego el byte alto
10 0x0A GET_VERSION Devuelve el número versión del chip del procesador seleccionado 2 Bytes, primero el tipo de módulo y luego el número de versión
         
21 0x15 GET_BULK Utilizado para test de calidad - devuelve 21 entradas codificadas 3 Bytes, 21 entradas de la CPU seleccionada
22 0x16 TEST Utilizado para test de calidad  

SET_SERVO 0x01

Este comando configura la posición de los servos en µS. El rango normal para un servo es 1000µS a 2000µS siendo la posición central 1500µS. Aunque la mayoría de los servos irán más allá. En un servo Hitec HS422 podemos configurar la posición desde 800 a 2200 para dar un amplio rango de movimiento. Tenga cuidado pues es fácil de hacer que el servo se tope con su parada interna si le da impulsos amplios a los extremos superior o inferior. El lugar SD84 no restringe los valores escritos, así que sea cuidadoso. Cada valor de servo es un número entero de 16 bit, envié primero el byte bajo y luego envié el byte alto. Para configurar el canal 1 a 1500µS (Centro el Servo). El comando formado es:

Sinc1 Sinc2 Sinc3 Comando Primer Canal Nº Bytes Byte Bajo Byte Alto
0xAA 0xA 0x55 0x01 0x01 0x02 0xDC 0x05

Los primeros tres bytes son bytes sincronizados y los necesitan todos los formatos de comandos.
El siguiente es el SET_SERVO “CONFIGURACIÓN DE SERVOS” comandos 0x01
El siguiente es el Número del canal del Primer Servo. En este caso canal 1.
El siguiente es el contador de byte. 2 bytes por canal para la configuración de la posición del servo.
El siguiente es el byte más bajo de la posición. 1500 decimal es 0x05DC en hexadecimal, así se envía 0xDC
Finalmente nosotros enviamos el byte más alto, 0x05

Algunos números de canales continuos pueden ser configurados con un comando SET_SERVO(Configuración de Servos). Por ejemplo para configurar los canales 37 y 38 para 1000uS (0x03E8) y 2000uS (0x07D0), deberá enviar:

Sync1 Sync2 Sync3 Comando Primer Canal Nº Bytes Byte bajo Canal 37 Byte alto Canal 37 Byte bajo Canal 38 Byte alto canal 38
0xAA 0xA0 0x55 0x01 37 4 0xE8 0x03 0xD0 0x07

Si quiere hacer lo mismo en los canales 37 y 51, deberá enviar dos formatos de comandos. No puede hacerlo todo en un formato porque los canales no son continuos. Después que el byte final es enviado, el SD84 responderá con un código de error de un byte simple. Si todo está correcto este será Ok. Vea código de errores para los detalles.

GET_SERVO 0x02

Este comando obtiene la posición del servo en µS.

Sync1 Sync2 Sync3 Comando Canal Nº Bytes
0xAA 0xA0 0x55 0x02 23 0x00

El ejemplo de arriba devolverá la posición del servo del canal 23. Tenga en cuenta que el contador del byte debe ser cero (0x00) porque no está enviando ninguna información al SD84. La respuesta desde el SD84 será dos bytes, el byte bajo primero y después el byte alto. Por ejemplo si tiene configurada la posición en 1500uS (0x05DC en hex)  deberá recibir 0xDC, 0x05. Al contrario que el comando SET SERVO, el GET SERVO solo puede trabajar con un canal único. Para recuperar la posición de múltiples canales deberá obtenerlos individualmente.

SET_SPEED 0x03

Configura la velocidad a la que el servo se moverá a la nueva posición.

Sync1 Sync2 Sync3 Comando Primer Canal Nº Bytes Velocidad
0xAA 0xA 0x55 0x03 71 1 10

El ejemplo de arriba configura la velocidad del canal 71 a 10.

Este es el registro de velocidad a la cual los servos se mueven a su nueva posición. Los impulsos de los servos son enviados automáticamente cada 20mS. Si la velocidad del registro es cero (0x00) entonces el servo está configurado a la máxima velocidad. Al encender el circuito los registros de velocidad están configurada a cero para dar plena velocidad, por eso al menos que necesite disminuirlos la velocidad de los registros pueden ser ignorada. Si la Velocidad registro está configurada a un valor diferente de cero entonces el valor es añadido a la posición actual cada 20mS hasta que se alcanza la posición deseada. Si desea moverse desde el 1000 a 2000 y la velocidad de registro está configurada a 10, entonces le llevará 2 segundos alcanzar la posición final. La fórmula para el calculo del tiempo que tarda en hacer el movimiento es la siguiente:

(Posición deseada-Posición de partida ) / Registro de velocidad)*20mS

Aquí hay algunos ejemplos:

Posición Inicial  Posición Final  Velocidad Duración Movimiento
2000 1000 10 2000mS (2Sec)
1000 2000 10 2000mS (2Sec
1000 2000 1 20000mS (20Sec)
1000 2000 100 200mS (0.2Sec)
1234 1987 69 220mS (0.22Sec)

Como con el Comando SET SERVO, el comando SET SPEED permite configurarse de 1 a 84 canales de forma simultanea.

Sync1 Sync2 Sync3 Comando Primer Canal Nº Canales Canal 1 Canal 2 Canal 3
0xAA 0xA0 0x55 0x03 71 3 9 10 11

El ejemplo superior configura el canal 71 a velocidad de 9, canal 72 a velocidad 10 y canal 73 a velocidad 11. No olvide asegurarse que el Nº de bytes es el mismo que el número de bytes de información que se envían, en este ejemplo es 3 bytes.

SET_MODE 0X04

Este comando se utiliza para configurar el Modo de funcionamiento de los 84 canales. ¡ATENCION! Este comando no puede utilizarse con los canales que esten seleccionados como analógicos, para hacer eso deberá utilizar el comando SET_AD_CNT. Este comando seleccionará entre los modos INPUT (Entrada), OUTPUT_LOW (Salida a nivel 0), OUTPUT_HIGH (Salida a nivel Alto) o modo SERVO (Modo servo para controlar servomotores).

El siguiente ejemplo configurará el canal 1 para INPUT_MODE, canal 2 para OUTPUT_MODE 0, canal 3 para OUTPUT_MODE 1 y canal 4 para SERVO_MODE.

Sync1 Sync2 Sync3 Comando Primer Canal Nº de Bytes Modo1 Modo2 Modo3 Modo4
0xAA 0xA0 0x55 0x04 1 4 23 21 22 25

Como siempre, asegúrese que la cantidad del Nº de bytes concuerda con la cantidad de bytes de información que se envía. Después que se envía el byte final, el SD84 responderá con un código de error de un único byte. Si todo está correcto este será OK. Vea códigos de error para más detalles.

GET_MODE (0x05)

Este comando obtiene el Modo de funcionamiento actual para un único canal. Vea Modos de Canal.

Sync1 Sync2 Sync3 Comando Canal Nº de byte
0xAA 0xA0 0x55 0x05 15 0x00

El ejemplo de arriba devuelve el modo actual de canal 15. Tenga en cuenta que el Nº de byte debe ser cero (0x00) porque no está enviando ninguna información al SD84. La respuesta del SD84 será 1 byte. A diferencia del  comando SET_MODE, el GET MODE  solo puede trabajar con un canal único cada vez. Para recuperar el modo actual de  canales múltiples deberá obtenerlos individualmente.

SET_AD_CNT (0x06)

Este comando configura el número de canales analógicos disponibles. El SD84 utiliza 4 procesadores PIC18F2520, cada uno proporciona 21 canales de los cuales 9 pueden ser alternativamente entradas analógicas. Estos 9 canales analógicos aparecen dispersados por el SD84, (ver diagrama de conexión), porque los números de los pines del procesador en los cuales aparecen está fijado. Una limitación del chip procesador es que estos pins no pueden ser entradas analógicas al azar, sino que tienen que ser asignados en orden ascendente empezando por AN1. Si AN8 es analógica entonces las entradas AN1 a AN7 deben serlo también.  Esto significa que al cambiar un canal a analógico, es posible que también se cambien otros canales. Este es la razón de porque se impide escribir al modo analógico desde el Modo Registro.

El comando SET_AD_CNT configura los chips del procesador para el número de canales analógicos deseados, empezando por AN1. Si  selecciona 5 canales analógicos entonces se configuran AN1 a AN5 como analógicos. El Modo de Registro para los canales 21, 22, 20, 18 y 28 serán configurados a analógico. Si ha seleccionado previamente 10 canales como analógicos (AN1 a AN10), y después selecciona 5 canales (AN1 a AN5) los canales 27,29,26,30 y 11 (AN6- AN10) serán vueltos a cambiar a modo de entradas digital.

En la siguiente tabla se muestra la correspondencia cruzada entre canales analógicos y digitales:

AN CH     AN CH     AN CH     AN CH
1 21   10 11   19 84   28 73
2 22   11 10   20 83   29 72
3 20   12 9   21 82   30 71
4 18   13 7   22 80   31 69
5 28   14 38   23 48   32 58
6 27   15 37   24 47   33 57
7 29   16 39   25 49   34 59
8 26   17 36   26 46   35 56
9 30   18 40   27 50   36 60

Para configurar un canal analógico utilice el siguiente comando:

Sync1 Sync2 Sync3 Comando Canal  Contador de Byte  Nº Canales Analógicos
0xAA 0xA0 0x55 0x06 0 (ignorado) 1 10

El comando superior configurará AN1 a AN10 como entradas análogas. El modo de los canales correspondientes 21,22, 20,18,28,27,29,26,30 y 11 será configurado al Modo Analógico. El SD84 responderá con un código de error de byte único. Si todo está bien este será OK. Vea la sección de códigos de error más detalles.

El procedimiento normal de iniciación del circuito consistirá en configurar primero el número de canales analógicos requeridos mediante el comando SET_AD_CNT, y entonces configurar los canales digitales restantes como entrada, salida o modo servo con SET_MODE. Esto puede ser realizado para todos los canales con un simple comando de modo. El comando SET_ MODE no afecta a los canales analógicos, así que no hay problemas con el modo en que estén configurados, sin embargo obtendrá de vuelto un código WARNING en vez de un código Ok.

GET_AD_CNT (0x07)

Este comando devuelve la cantidad de canales analógicos seleccionados actualmente.

Sync1 Sync2 Sync3 Comando Canal Contador de byte
0xAA 0xA0 0x55 0x07 0 (ignorado) 0

El SD84 responderá con el número de canales analógicos actuales 0-36.

GET_INPUT (0x08)

Devuelve el estado de un único canal de entrada.

Sync1 Sync2 Sync3 Comando  Canal

Contador de Byte

0xAA 0xA0 0x55 0x08 12 0

El ejemplo de arriba devolverá 1 Byte, 0 (0x00) si la entrada del canal 12 es bajo o 255 (0xFF) si la entrada es alta. GET_INPUT puede  trabajar solo con un único canal cada vez. Para recuperar el estado de múltiples canales deberá obtenerlos individualmente.

GET_ADC (0x09)

Devuelve el valor analógico del canal seleccionado. Tenga en cuenta que el número de canal es el número analógico AN, no el número del canal digital. En el ejemplo de abajo este es el canala analógico 21 que se corresponde con el canal digital 82.

Sync1 Sync2 Sync3 Comando Canal  Contador Byte
0xAA 0xA0 0x55 0x09 21 0

El ejemplo de arriba devolverá 2 bytes, el byte bajo primero y después el byte alto. El SD84 utiliza conversión 10-bit AD así que obtendrá un número en el rango 0-1023. Los resultados son validos para canales analógicos que hayan sido previamente configurados en modo analógico utilizando el comando SET_AD_CNT.

GET_VERSION (0x0A)

Este comando se utiliza para devolver el número de versión del firmware del SD84. Hay 4 CPU’s en el SD84 y puedes especificar que número de versión CPU quiere obtener aunque todos ellos serán el iguales.

Sync1 Sync2 Sync3 Comando  Número CPU Contador de Byte
0xAA 0xA0 0x55 0x0A 2 0

El comando está formado como se muestra arriba. En este ejemplo devolverá el número de versión de la CPU 2. El comando devolverá 2 byte. El primero es el tipo modulo, este siempre será 84 para el SD84. El segundo byte es el número de revisión del firmware, actualmente 4 en el momento de escritura. Los número de CPU validos son 1-4.

GET_BULK (0x15)

Este comando se utiliza para test de calidad del SD84. Este devuelve 3 bytes los cuales codifican  las 21 entradas d el procesador seleccionado. Si está acostumbrado a utilizar el procesador PIC, estos 3 bytes son puertos A, B, y C ( en ese orden) del mismo. El formato del comando es:

Sync1 Sync2 Sync3 Comando Numero CPU  Contador de Byte
0xAA 0xA0 0x55 0x15 1 0

En este ejemplo los 3 bytes devueltos vendrán desde la CPU 1. Los números de CPU validos son 1-4.

La tabla siguiente muestra que canal representa cada bit.

  Byte 1 – Puerto A Byte 2 – Puerto B Byte 3 – Puerto C
  7 6 5 4 3 2 1  0  7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
CPU1 17 16 18 19 20 22 21 x 23 24 25 26 27 28 29 30  x   x  31 32 12 13 14 15
CPU2 6 5 7 8 9 10 11 x 33 34 35 36 37 38 39 40 x x 41 42 1 2 3 4
CPU3 79 78 80 81 82 83 84 x 43 44 45 46 47 48 49 50 x x 51 52 74 75 76 77
CPU4 68 67 69 70 71 72 73 x 53 54 55 56 57 58 59 60 x x 61 62 64 63 65 66

El bit será alto si la entrada es alta.

TEST (0x16)

Este comando es utilizado, junto con el anterior GET_BULK, para realizar el control de calidad del SD84. Este comando no tiene otros usos, pero lo documentamos aquí.

Sync1 Sync2 Sync3 Comando Canal  Contador de Byte
0xAA 0xA0 0x55 0x16 67 0

Este primero configura el número de canales análogos a cero, para que todo sea digital
Después configura cada canal en modo salida baja. (0)
Después configura cada canal como entrada.
Después configura el canal seleccionado en modo salida alta. (1)
Y para finalizar devuelva el código OK. La secuencia está desarrollada sin ningún retraso, tan rápido como vaya el procesador.

Modos de canal

Los modos disponibles para los canales son:

Decimal Hex Modo Descripción
21 0x15 OUTPUT_MODE0 Salida baja, Lógica 0 
22 0x16 OUTPUT_MODE1 Salida alta, Lógica 1
23 0x17 INPUT_MODE Entrada
24 0x18 ANALOG_MODE Analógica 0-1023 (10-bit conversión)
25 0x19 SERVO_MODE Salida de pulso de control de servo, con una tasa de repetición de 20 mS.

Códigos de error

El SD84 puede responder con siguientes códigos de error:

Decimal Hex Código de Error

Descripción

0 0x00 OK

Comandos procesados OK

1 0x01 WARNING

 Se ignoran los intentos de escribir el modo de funcionamiento de los canales analógicos.

2 0x02 RANGE

El Rango de canales es menor que 1 o más que 84

3 0x03 MODE

Modo de recepción desconocido

Programa de demostración

Hay un pequeño programa de demostración que le permite evaluar rápidamente el SD84.

Programa para comprobar el funcionamiento del circuito de control de servos SD84.

Este permite configurar el número de canales análogos, modos de configuración, movimiento de los servos y lectura digital o entradas análogas. El programa está escrito en Visual C++V6. Puede descargar solo el sd84.exe, o el código fuente completo .

Dimensiones del SD84

Dimensiones del circuito de control de servos SD84.