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
esquema del convertidor
Espero que esto ayude
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: DE
está activo alto y /RE
está 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 DE
pin siempre se mantenga bajo, excepto en el momento adecuado para que ese nodo transmita.
chris stratton
matthijs van hest
chris stratton
Arce
matthijs van hest
chris stratton
Tony Estuardo EE75
matthijs van hest