¿Cómo determinar la ubicación física en una topología de bus/cadena tipo margarita RS-485?

Estoy tratando de construir una "cadena de margaritas" usando varios transceptores Arduinos y MAX485. Todas las placas tienen un sensor de temperatura adjunto. Una batería de 9V alimenta todos los tableros de la cadena.

Estoy tratando de encontrar una forma de identificar la ubicación física de las diferentes placas en la cadena, por ejemplo, placaA = primera, placaD = segunda, placaB = tercera, etc.

Podría hacer esto manualmente sabiendo dónde conecto cada tablero en la línea. Sin embargo, esto es propenso a errores humanos y quiero hacerlo automáticamente. Además, me gustaría tomar tableros al azar para construir redes cuando y donde quiera.

Para identificar las placas en la red, podría crear un bucle de consulta en la placa maestra para llamar a todos los nombres posibles y obtener una respuesta de las placas conectadas. Lo que busco también es una respuesta de dónde están ubicados en la red.

Estaba pensando en medir la caída de voltaje/corriente como indicador de qué tan cerca/lejos están del maestro. Sin embargo, no estoy seguro de si la caída es lo suficientemente grande o si el ADC en el Arduino es lo suficientemente preciso.

Supongo que alguien ha pensado en esto antes, tal vez incluso haya chips preparados para esto. No soy ingeniero electrónico, lo siento por mi conocimiento limitado.

Editar, 2018-10-14

Más aclaración; digamos que tienes el siguiente ejemplo:

Ejemplo de topología de bus

Todas las tarjetas esclavas están configuradas en modo "escuchar" y esperan a ser llamadas por el maestro. El maestro ejecuta un ciclo de consulta para identificar qué esclavos están en el bus. Pregunta por A,B,C,D,E, etc. Los esclavos verificarán la llamada del maestro. Para que esto funcione, tendré que asignar un nombre/dirección único en el software a cada esclavo, lo cual está totalmente bien.

Lo que quiero evitar es verificar el nombre de cada esclavo cuando los estoy colocando en el campo. Por lo tanto, la necesidad de averiguar su posición relativa en la línea de bus con respecto al maestro y los otros tableros esclavos.

¿Es esto algo similar a Maxim DS28EA00 ? Tenga en cuenta que no es solo la temperatura lo que me interesa. Uso sensores de temperatura como mi prueba de concepto. Podría usarlo para medir presión, aceleración, etc.

@Transitor En este caso, conexión en cadena = línea compartida o topología de bus. No sé si puedo conectar el RS-485 en serie. Si es así, ¿podría recopilar el nombre de cada dispositivo a medida que los datos pasan por ellos? Esto tiene la desventaja de que si una placa esclava muere, el resto de la línea también lo hace.

De la guía de diseño TI RS-485

Guía de diseño de TI RS-485

@stark ¿Puedes elaborar más la idea del pin digital? Tenga en cuenta que todas las tablas están separadas entre 1 y 3 metros.

@Andy alias ¿Puedes elaborar más? ¿Podría funcionar esto en topología de bus?

@TimWescott Es una topología de bus. ¿Tal vez usé mal el término cadena de margaritas? ¿Es posible hacer una verdadera conexión en cadena con RS-485?

Edite su pregunta para explicar si los dispositivos están conectados en paralelo en la red o en serie. Si los datos pasan a través de cada dispositivo en serie, entonces es posible direccionarlos automáticamente. De lo contrario, debe agregar algún medio para establecer una dirección única en cada uno.
¿Puedes usar los pines de entrada digital? Tener dos conectores en cada estación. El segundo es la ubicación física cableada.
Construya una señal que represente la ubicación física; poner esa señal a disposición de cada esclavo; leer los datos del esclavo; interpretar la ubicación.
RS485 implica un autobús, para mí. ¿Es un autobús o una verdadera cadena de margaritas? (Es decir, en un bus, todos los transceptores están conectados al mismo par de cables. En una conexión en cadena, cada procesador tiene un puerto "ascendente" y un puerto "descendente" y maneja las comunicaciones entre los puertos).
(casi en serio) adjunte una cámara de video a cada dispositivo y un código de barras frente a él. Simplifique el sistema si encuentra una forma más sencilla de leer las cosas desde un entorno que no sea propenso a errores.
Jeje, esa será la solución más cara considerando que quiero tener 30 placas esclavas;)
Ah, y olvidé mencionar que el diseño final será bajo el agua. Es por eso que quiero hacerlo a través del software o algún hardware interno en la placa.
Hay una manera similar, bastante barata. Pero la patente está pendiente, así que lo siento, lo siento...
Es bueno escuchar eso, pero pasarán varios años antes de que llegue al mercado. Necesito una solución ahora :)

Respuestas (2)

Es una estructura de autobús. Por definición, no importa dónde se coloque físicamente cada dispositivo.

Si necesita un direccionamiento geográfico, puede probar este enfoque:

  1. Conecte el nodo maestro en uno de los extremos del bus

  2. Cada nodo debe tener un cable adicional (es decir, un cable de entrada y uno de salida) que va a sus nodos vecinos (un simple GPIO servirá).

  3. Cuando ese cable tiene un estado específico (predeterminado), el nodo permanece en silencio e ignora todo el tráfico.

  4. En el encendido, cada nodo no tiene una dirección. El maestro tira del cable extra hacia abajo (o hacia arriba) habilitando el primer nodo en el bus. Envía un comando de "establecer dirección" en el bus (que no tiene una dirección de destino); por supuesto, solo el primer nodo actúa sobre este mensaje.

  5. El maestro envía una "línea de control de habilitación" al nodo 1 (que ahora tiene una dirección), esto hace que el nodo 2 escuche el bus.

  6. El maestro envía nuevamente un comando de "establecer dirección" (que es ignorado por el nodo 1, porque ya tiene una dirección) que establece la dirección del dispositivo 2.

  7. Enjuague y repita para todos los nodos.

¡Gran idea! Sin hardware adicional, solo un cable más. 1) ¿Crees que la distancia entre las placas puede ser un problema para la señal GPIO? 2) En el paso 5, ¿quiere decir que el maestro le diga al nodo 1 que configure el GPIO conectado al nodo 2 en bajo (o alto) y el maestro configure alto (o bajo) en el GPIO al nodo 1? Una vez más gran respuesta, tengo que intentarlo.
1. Si es un GPIO lento la distancia no debería ser un problema. Solo tenga cuidado de proteger la entrada y la salida de alguna manera (por ejemplo, resistencias), porque de lo contrario el ruido del cable puede acoplarse a su Vcc (a través de diodos de protección ESD incorporados). 2. En el paso 5 quiero decir que el maestro le dice al nodo 1 que habilite la línea de control del nodo 2, luego configura la dirección del nodo 2, luego le dice al nodo 2 que habilite la línea de control del nodo 3, etc. Puede implementar la lógica de varias maneras, por ejemplo . "ignorar todo" o "aceptar cualquier dirección".

¡Busque 1Wire si está interesado en medir la temperatura, con muchos sensores aquí y allá! https://www.maximintegrated.com/en/app-notes/index.mvp/id/148 No es RS485 pero es más fácil de implementar. Y use un pequeño programa para habilitar cada nodo 1Wire uno por uno y lea su ID, luego tiene una tabla de ID físicos versus lógicos, por supuesto que puede hacer lo mismo con RS485 pero necesitará más cables. En este caso, debe tener un pequeño circuito al lado de cada sensor para que cada vez que encienda su circuito, dicha tabla explicada se construya en el maestro.