El maestro Mega2560 en el bus RS485 deja de comunicarse con VFD cuando agrego otro módulo RS485

Estoy haciendo un proyecto en el que construyo un panel de control para un VFD (inversor/unidad de frecuencia variable). Estoy conectando los dos sobre medio dúplex RS485 y uso Modbus RTU. Como maestro uso un Arduino Mega 2560 con un módulo TTL a RS485. Sí, el VFD y el Mega tienen velocidades de transmisión correctas (9600) y paridad (8N1), funciona si el maestro y el VFD son los únicos dispositivos en el bus. Pero cuando agrego otro esclavo (Arduino nano) con este módulo TTL a RS485 (incluso sin un microcontrolador y sin código), las comunicaciones parecen estar rotas.

Estoy usando un cable de par trenzado blindado de unos 3 metros a una placa de circuito que conecta en cadena el módulo para el nano (10 cm) y el VFD (1 metro).

¿Qué probé?

Empecé con mega como maestro, nano como esclavo y VFD como esclavo. Debido a que no sabía que el módulo adicional en el bus estaba causando el problema en este punto, me preguntaba si era mi código o la configuración del hardware. He leído varios temas de personas que tienen problemas con Mega y el módulo RS485, pero nunca llegué al problema exacto ni a la solución. Necesito el mega para la escala de mi panel de control, así que seguí investigando.

Sobre el código

Uso modbusmaster (ver ejemplo de halfduplex en github) y luego solo 2 líneas de escritura de código en un solo registro (0x2000, 0x0006 por ejemplo) como una prueba simple para iniciar/detener el VFD. Funcionó antes al probar el VFD y un UNO como los dos únicos dispositivos en el bus, ¿por qué no ahora? El nano esclavo no tiene ningún código en este punto para descartar cualquier problema de software que interfiera. Intenté enjuagar también, no resolví el problema.

Volver a la solución de problemas de hardware

Así que probé la misma configuración con otro nano como maestro en lugar del mega (dejando el otro nano como esclavo conectado). ¡Funciona! Pero necesito el Mega... Así que comencé a investigar. Probé hardware serial, altserial y softwareserial. Ninguno funcionó. Luego comencé a cuestionar las líneas, nada que tuviera cortocircuitos o grandes interferencias (haciendo esto en mi sala de estar, no en un sitio industrial). Cuando saqué el módulo para el nano esclavo y comenzó a funcionar con mega como maestro y el VFD como el único esclavo conectado. ¡Pero diablos, necesito que el nano esclavo esté en el bus también!

Probando resistencias de terminación

Así que desoldé R5 a R7 (resistencias de terminación) del módulo adicional, lo que ayuda a algunas personas. Dejando el modulo del mega como esta. Misma situación, la comunicación está bien hasta que dejo caer el módulo para mi nano esclavo.

¿Hacer que la repetición del nano esclavo funcione?

También experimenté con la comunicación entre el mega maestro y el nano esclavo, ¡eso funciona! Pero el VFD no escuchará al maestro. Cuando programé el esclavo nano para repetir lo que escucha (sí, como un loro), entonces el VFD responde correctamente con la configuración que quiero (maestro, esclavo VFD, esclavo nano). Pero el nano esclavo no debe ser el que actúe como maestro, y mucho menos repetir un mensaje en el autobús. Lo extraño aquí es que el VFD no responde al mensaje del maestro, pero el nano lo capta y puede repetirlo, por lo que la comunicación ES correcta de alguna manera, pero ¿no lo suficientemente buena para el VFD? Realmente me estoy volviendo loca ahora... ¡Ya no puedo dormir! por favor ayuda.

Otras ideas

Lo admito, he conectado a tierra el blindaje del cable de 3 metros en ambos extremos, pero este no debería ser el problema, funciona solo con una configuración maestra y el VFD como esclavo, así que ¿por qué no agregar otro módulo para el nano como esclavo? .

La línea ahora mide una resistencia de 120 ohmios (proviene del módulo TTL a RS485 en el lado de Arduino Mega). El VFD tiene un puente, la posición de encendido es de 18,2 kOhm y la posición de apagado es de 500 ohm. Debido a la conexión en paralelo, independientemente de la posición, la resistencia de la línea entre A y B permanece alrededor de 120 ohmios. El problema solo ocurre al conectar el módulo adicional para el nano esclavo, incluso cuando dejo fuera el propio esclavo.

¿Alguien por ahí que pueda ayudarme a solucionar este problema? ¿Algo que no sepa? (Sí, mi primera aplicación RS485/Modbus, pero creo que va bien hasta ahora).

¿Debería desoldar también las resistencias de terminación del otro módulo? ¿Alguna otra idea sobre por qué se interrumpe la comunicación cuando introduzco otro módulo?

Si algo no está claro, por favor dígame. Hice todo lo posible para aclarar la configuración y lo que intenté. Nuevamente, el código no parece ser un problema aquí.

ACTUALIZAR

configuración

esquema del convertidor

esquema del convertidor

Espero que esto ayude

Tendrá que tener más claro cuál es el modo de falla, tal vez investigando eso primero. ¿En qué estado está el código? ¿No está transmitiendo? ¿Está transmitiendo pero siendo ignorado? ¿Están ocurriendo colisiones? Con solo dos cables, debería poder conectar un convertidor RS485 a un UART ordinario y registrar todo de todos, analizarlo y ver si tiene sentido.
Probé la comunicación entre maestro mega y esclavo nano, es envío y recepción. Pero el VFD solo actuará con los comandos cuando el esclavo nano esté desconectado del bus, o cuando deje que el nano esclavo repita el mensaje del maestro mega. El convertidor RS485 está conectado a UART.
Nuevamente, debe averiguar qué sucede cuando falla el sistema. Configure algo para capturar todo el tráfico en el cable (como un convertidor RS485 adicional conectado a un UART USB y una PC para recibir solo monitoreo ) y escriba scripts para interpretar eso. Proporcione a su maestro algunas salidas de estado adicionales... También asegúrese de que solo tiene resistencias de terminación en los extremos físicos de la línea, en ningún otro lugar.
El hecho de que incluso haya probado el módulo en el medio con resistencias de terminación me dice que podría haber más problemas de cableado en su configuración. Debe publicar el diagrama de cableado completo y los enlaces a los módulos adaptadores que usa si desea obtener ayuda significativa.
@ChrisStratton, todo el problema es que un convertidor RS485 adicional está deteniendo la comunicación. Tengo resistencias de terminación en los extremos solo ahora. Mencioné que desoldé los del convertidor central. Maple, los módulos vienen con estas resistencias, solo las probé tal como están primero, ya que leí que muchas personas no tienen problemas con las resistencias de terminación en estas longitudes cortas.
Por tercera vez, necesitas descubrir cómo . Compre un alcance y pruebe las líneas, o instale algo que le permita ver lo que está sucediendo, como las salidas mencionadas anteriormente de su maestro o esquema basado en PC para espiar todo el bus. Y asegúrese de que cuando tenga su módulo "sin código" allí, haya cableado la habilitación de transmisión inactiva y no simplemente la haya dejado flotando.
Todo el problema es la integridad de la señal. Los voltajes de la señal son comunes y el ruido diferencial y CM del suministro de CC-CC. Especifique estos y la frecuencia. ¿El VFD es bipolar con CM=0 y el suministro maestro único con CM= 1,2 V?
No entiendo muy bien su comentario, solo hay una entrada de CC en todo el sistema. Todos comparten la misma tierra y 5V en los pines de 5V con diodos de polarización (no se usan reguladores en las placas)

Respuestas (1)

Usted (o quienquiera que haya hecho este dudoso módulo) ha cableado erróneamente el pin de habilitación de transmisión con una resistencia pullup. Sin el código que configura un pin MCU correspondiente como salida y lo reduce, ese transceptor RS485 atascará el bus.

Debe corregir su símbolo esquemático para mostrar el sentido lógico de las habilitaciones: DEestá activo alto y /REestá activo bajo. Luego cambie su circuito para que los predeterminados sean seguros.

Si va a seguir usando este módulo defectuoso tal como está, deberá asegurarse de que el DEpin siempre se mantenga bajo, excepto en el momento adecuado para que ese nodo transmita.

Nunca presté suficiente atención a la señal DE/RE... Lo dejé flotando o conectado a un pin sin hacer nada, o como mencionaste, se detiene. Funciona ahora... Me siento tan increíblemente estúpido. Todavía no miré de cerca el esquema porque no pensé que sería un problema. Y la configuración de 2 nano estaba funcionando... todavía me resulta extraño (tal vez tenía código entonces... no sé)
Me siento estúpido, pero es bueno que alguien más lo mire para detectar estos pequeños errores ... Gracias
Puede dejar habilitados los receptores RS485 si su código puede ignorar escucharse a sí mismo hablar; pero debe administrar activamente la habilitación de transmisión, usándola solo cuando es su turno de hablar; eso se aplica a todos los dispositivos en el bus, no solo a este adicional.
Entiendo. Gracias de nuevo. Nunca pensé que esto bloquearía todo el bus, a pesar de que no se envía ningún mensaje adicional.