Salida incorrecta usando SN75HVD10 (RS485)

Diseño de un maestro modbus usando un STM32F030CCT6 y un SN75HVD10 (3.3V).

este es el esquemaEsquemático

Cuando envío el siguiente mensaje desde la UART: 01 03 00 00 00 06 c5 c8

Veo los siguientes ámbitos (la parte superior es A y la parte inferior es B).Enviado usando SN75HVD10

Sin embargo, al enviar el mismo mensaje usando una Raspberry PI (5V) y un cable convertidor RS-485, se pueden ver los siguientes alcances:Enviado usando Raspberry PI

Como puede ver, los canales aquí están invertidos. Lo que está en A usando SN75HVD10 está en B usando RPi. Así que pensé, ok, cambiemos los cables. Pero luego el microcontrolador deja de responder y no se pueden ver rastros en el osciloscopio.

Lo que se puede hacer es cambiar los "canales". Además, ¿por qué la señal no baja a 0V?

Entonces resultó que cuando cambié los canales, comenzó a funcionar, pero tuve un error en mi código MCU que hizo que la MCU fallara una vez que la comunicación comenzó a funcionar.

Respuestas (2)

Desafortunadamente esto es común. Los estándares RS485 y Modbus definen A y B de manera diferente a su transceptor, y también a muchos otros transceptores.

Entonces, su esquema debe voltear A y B en alguna parte. Como Modbus B - el transceptor A debe tener pull-up, y Modbus A - el transceptor B debe tener pull-down, las resistencias son correctas con respecto al transceptor, por lo que solo intercambie Modbus A y B.

El transceptor también tiene pull-down interno en el pin B, que coincide con el Modbus A que se está bajando.

Entonces, esto no se puede resolver simplemente invirtiendo los datos UART.

También debe compartir la misma referencia de tierra entre sus dispositivos. Si comparten tierra a través de fuentes de alimentación u otros pines de tierra, está bien, pero si están aislados entre sí, entonces necesita un cable de tierra entre el dispositivo RS485.

El otro lado es un Carlo Gavazzi EM-24, así que no es nada sobre lo que yo tenga control. Usé mikroe.com/rs485-33v-click como guía de diseño para los esquemas. No en la oficina ahora, pero ¿por qué no crees que es suficiente invertir el uart como propone el desvío?
No dije que necesitas un cambio de ruta. Si esos van a un conector, simplemente puede voltear los cables. Su modbus_a en los esquemas es realmente modbus_b, y modbus_b en los esquemas es realmente modbus_a. Pero tampoco puedes estar seguro de otros dispositivos. EM-24 dice que A- es D- y B+ es D+. FTDI dice que B es D- y A es D+. El clic dice que A es D+ y B es D-. RS485 dice que Logic 1 está APAGADO, por lo que A es bajo, no invertido, B alto, invertido. Pero los transceptores dicen que la Lógica 1 significa A alta, no invertida, B baja, invertida. Es un desastre. Con solo voltear los cables, obtiene pull-ups y pull-downs de la manera correcta, de acuerdo con modbus y UART
Qué estándar tan desordenado :), haré más pruebas el lunes. Gracias por tu ayuda, amable extraño 🙏
En realidad, no: el estándar RS485 es sólido y no tiene lugar para la interpretación, y Modbus se basa en el estándar RS485, también es un estándar sólido. Es solo que el estándar exige algo de una manera que no es intuitiva, a menos que obtenga la perspectiva. Debido a que RS232 tenía 1 lógico como estado APAGADO/MARK con salida de -12 V y 0 lógico como estado ENCENDIDO/ESPACIO con salida de +12 V, la salida RS485 A sigue esa inversión lógica. Básicamente, con la lógica invertida, RS485 A se invierte de los datos lógicos y B no se invierte. Muchos transceptores dicen que A no está invertido de los datos lógicos y que B está invertido.
Entonces resultó que tenía un error en el código MCU, lo que provocó que se bloqueara una vez que la comunicación comenzó a funcionar (volteando los cables). ¡Gracias por tu excelente explicación!

Invierta la polaridad UART en su microcontrolador (inactivo alto vs inactivo bajo)

De lo contrario, como una opción de bodge, ate el pin de datos del transceptor bajo (creo que puede ser alto) y, en su lugar, conecte su TX al pin de habilitación de TX (DE),

La función UART de inversión podría funcionar, pero dejaría los menús desplegables y menús desplegables de forma incorrecta.