Conexion RS485

Buenos días,

disculpad mi ignorancia pero se pueden hacer dos buses distintos de RS485? Es que resulta que tengo que dirigir un robot que juega al billar y debo controlar los motores de la base por un lado y los motores del brazo por otro, y lo que no se es si con un único bus puedo controlar por separado estos elementos. No se si me he explicado.

Estos buses irian conectados a un MAX485 y a Arduino.

Muchas gracias

se pueden hacer dos buses distintos de RS485?

La respuesta es SI. Pero tienes que usar dos puertos serie (usando, por ejemplo, SoftwareSerial)y usando dos max485, uno para cada línea, mas un pin para controlar la dirección (emitir o recibir). Lo cual, veo un desproposito.

Supongo que los drivers de motor que usas tienes un bus 485, con lo cual hay que ver el protocolo con el que se comunican. Además posiblemente tenga una forma de ponerle una dirección ID a cada uno, con lo que seguro lo puedes controlar con un solo bus.

Ten en cuenta que RS485 es un bus en LINEA, asi que el cable desde el arduino irá a un driver, y desde ese driver irá al siguiente.

Si nos cuentas un poco más acerca del driver que vas a usar te podré decir como conectarlo.

Usando el mismo bus 485 puedes conectarte a un driver y al otro asignándole a cada uno diferente dirección de esclavo. Para ello debes usar un protocolo, el mas conocido se llama MODBUS y permite manejar muchos dispositivos esclavos.
Claro que del lado del driver debe haber un módulo que entienda lo que el MAESTRO le indique que haga.

Muchas gracias por la información, me cuesta un poco comprender el hecho de los protocolos asi k me disculpo por ello.

Bien los datos que me pedis son:

BASE:

-Motor Nema 24
-TMCM-1161 (controlador)

BRAZO:

-MAC050 (MOTOR)
-MAC095 (MOTOR)
-MAB23X-03 (FRENO)
-HTRG05N100MHN23106J (REDUCTOR)

Para el brazo al tener que integrar estos componentes para mi proyecto, se compone de 3 articulaciones donde se situaran estos componentes descritos en la parte del brazo.
Articulación 1: Conjunto de MOTOR 095 + MAB23 +HTRG (van los 3 acoplados)
Articulación 2: Conjunto de MOTOR 050 + MAB23 +HTRG (van los 3 acoplados)
Articulación 3: Conjunto de MOTOR 9 +HTRG (van los 2 acoplados)

Como conectores de estos motores aplico los MAC00 -B4.

A continuación adjunto el conexionado de la base. (El protocolo no se cual emplear, pero utilizo el par de hilos apantallados y trenzados).

A continuación dejo los links de los elementos del brazo:

https://www.jvl.dk/files/pdf-1/datasheets/ld0043gb.pdf (SERVOMOTOR)
https://www.jvl.dk/files/_2011clean/pdf/ld067gb%20(m12%20connection%20cables...)%20a3.pdf (CONECTORES)
https://www.jvl.dk/files/pdf-1/user%20manuals/lb0047gb.pdf (MANUAL)
https://www.jvl.dk/files/_2011clean/pdf/ld055gb.pdf (MAB23X)
https://www.jvl.dk/files/pdf-1/datasheets/ld0081gb.pdf (La conexion MAC con reductor HTRG)

Para poder hacer la "segunda conexión del bus RS485 tenia pensado utilizar como bien has dicho el MAX485 y utilizar los Conectores MAC00 B4 (COM2 y PWR) utilizaria un conector macho para el COM2 justo a la entrada del motor y despues con los cables del bus y el GND al MAX485 (esto uniendo el mismo bus(BRAZO) RS485 para las 3 articulaciones como en la base) y a traves del PWR alimentar a 24V(que no se si seria necesario) el hecho es que tambien debo alimentar los pines 1 y 2 del freno y no se si unirlos al PWR o directamente desde la fuente.

PD: el protocolo a utilizar tampoco se cual emplear, intuyo como bien ha comentado surbyte el MODBUS.

Muchas gracias por la paciencia y la ayuda.

Un saludo.

Bien, ese driver ya preguntó alguien por él hará un tiempo.

La conexión sería más o menos asi:

La imagen es mas o menos grande, asi que hay que descargársela para verla bien.

Básicamente conecta el MAX485 (o un módulo), al puerto serie del Arduino. Recuerda que para iniciar controlar si quieres escribir y leer en el bus, se deben controlar los pines RE/DE. Y como te comenté, lleva la línea A, al A del primer modulo, de ahi sacas al siguiente módulo a su pin A, así sucesivamente con todos los módulos. Lo mismo con la línea B. Es importante que conectes el GND de los modulos con el GND del módulo RS485.

Como ves, la conexión es bien fácil. Lo que NO puedes hacer es llevar un cable distinto desde el A (o el B) del módulo RS485 a cada uno de los módulos. Así estas creando una topología en ESTRELLA, y no va a funcionar.

Te recomiendo que uses un cable de par trenzado y apantallado para evitar problemas. No olvidar unir los GND.

Ahora viene la parte que no te va a gustar...

El protocolo que usa en un formato binario que el fabricante llama comandos TMCL. Problema: No encuentro libreria para arduino, así que me temo que habrá escribirla.

Lo bueno es que el fabricante tiene unos cuantos datasheet que hay que estudiarse a fondo. Sobretodo el del firmware, donde te detalla como es la comunicación.

Cómo ves se trata de enviar un array formado por 9 bytes (id, comando, tipo, motor, valor, checksum) y recibir la repuesta que son otros 9 bytes (id, modulo, estado, comando, valor, checksum).

Te ánimo a que lo leas detenidamente los datasheet y te armes de paciencia. No es un trabajo de una tarde.

Victor muchas gracias por la información, pero yo mas bien preguntaba por la conexión del brazo, por si realmente podia unir el RS485 de los componentes del brazo con el bus RS485 de la base y que puedan recibir la información de manera que trabajen de forma distinta el brazo de la base.

Y claro el protocolo no podria funcionar el MODBUS? Al solo tener que diseñar los elementos para el robot no tengo k entrar en profundidad en los protocolos con solo mencionarlos me serviría, por lo tanto solo con que sepa cual utilizar ya lo puedo explicar de forma breve en el proyecto.

PD: yo fui el que te pregunte por el MAX485.

Muchas gracias

He estado viendo los datasheet por encima de cada uno de los componentes y creo que ahora lo tengo más claro.

Por un lado esta la base que la vas a controlar con el TMCM-1161, aquí esta claro que tienes que utilizar el protocolo TMCL.

Por el otro tienes dos motores MAC, distinto modelo, pero de la misma marca. Supongo que no utilizas ningún módulo de expansión ya que resultaria más caro. Estos se comunican a través del protocolo MacTalk.

He visto que hay modulos de expansión que dan soporte para Profibus y otros protocolos industriales, pero la palabra ModBus no venía por ningún lado.

Esta más que claro que si necesitas comunicarte con ellos, tienes que tener dos líneas serie distintas para comunicarte con ellos, asi que necesitas dos puertos diferentes. Si usas un Mega no hay problema, si no habría que recurrir a usar SoftwareSerial.

La parte positiva es que los MAC soportan RS232 a nivel TTL (conexión directa al arduino) y te permite crear un bus con dos motores, asi que viene ni que pintado.

El TMCM también tiene puerto RS232, lo que no he visto si usa niveles TTL. Si fuera así sería perfecto. Nos ahorramos el MAX485.

En conclusión, hay que utilizar un puerto serie para la base y otro puerto serie para el brazo. Cada uno hablando un idioma diferente (protocolo).

PD. Lo de conexión directa al arduino, es verdad, pero yo no lo haría, más bien, utilizaria optoacopladores para evitar problemas.

Muchas gracias de nuevo Victor, pero una duda que me surge, si no he entendido mal de los buses RS232 es que sólo se pueden vincular a un dispositivo uno a uno, no me resultaría más fácil emplear el bus RS485 que con los conectores MAC00 B4 te lo permiten, y además puedes conectar a la vez los 3 motores de que dispone el brazo?

Gracias y un saludo.

Podrías usar un bus RS485 para unir todos los motores pero el problema rádica en el protocolo. Son distintos protocolos con lo que pueden interferirse el uno al otro: una trama de uno puede significar otra cosa para el otro. Es poco recomendable hacerlo asi.

Así que para realizar la comunicación has de usar dos puertos series a la fuerza (ya sea rs485 o rs232). Lo bueno de los motores MAC es que te permiten montar un bus sobre rs232, cosa que no es muy estándar, con lo cual te ahorras el MAX.