Diseño de un maestro modbus usando un STM32F030CCT6 y un SN75HVD10 (3.3V).
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).
Sin embargo, al enviar el mismo mensaje usando una Raspberry PI (5V) y un cable convertidor RS-485, se pueden ver los siguientes alcances:
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?
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.
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),
Lars Stenberg