Problemas de ruido RS485: señal de tierra/tierra común/aislamiento?

Estoy experimentando mucho ruido en una red RS485 que armé usando chips ST485. Las longitudes de los cables son muy cortas (<1 m de longitud total del cable), estoy polarizando correctamente las señales A y B y he probado con y sin un terminador (parece que no hay diferencia), y solo estoy corriendo en 19200 baudios.

Sospecho que el problema es el ruido del suelo, ya que estoy usando las señales de entrada RS485 para configurar los niveles de PWM para los LED de alta potencia (hasta 1000 mA momentáneamente a 3,8 V). Estoy usando una conexión de cuatro cables entre cada nodo (+12 V, GND, RS485-A, RS485-B, con el RS485-A y -B un par de cables de conexión trenzados).

Aunque no se sugiere en la hoja de datos de ST485, ¿sería suficiente agregar un cable de tierra de señal entre las entradas de tierra del dispositivo RS485, con resistencias de 100 Ω en serie entre la tierra del dispositivo RS485 y el cable de tierra de señal? ¿O debería pensar en agregar aislamiento completo al dispositivo RS485, incluido un transformador para fuente de alimentación flotante y optoaisladores en las líneas de señal A y B? ¿O es esto excesivo?

Gracias de antemano.

EDITAR Sé que estoy recibiendo ruido porque para obtener el efecto deseado (brillo particular de luces LED particulares), tengo que usar un CRC-8 en cada paquete (para eliminar paquetes defectuosos en el extremo receptor) y enviar cada mensaje dos veces (para compensar los paquetes defectuosos caídos), e incluso entonces sigo recibiendo paquetes incorrectos en el extremo receptor.

EDITAR Se eliminaron los comentarios de error de velocidad en baudios, ya que la velocidad en baudios es, de hecho, muy precisa.

nunca explicaste cómo sabías que había problemas de ruido. ¿Malos datos? Medidas del oscopio, comparte esto. La gente se aferra a lo único que les dijiste.
Como muchos ya han señalado, el 3,8% es excesivo, pero ¿qué tiene en el lado receptor de su enlace 485?
En mi humilde opinión, esto no prueba que el ruido sea su principal problema. Todavía puede ser el error de velocidad en baudios lo que está causando esto.
Solucione el error de tasa de baudios, luego vea si todavía tiene problemas. ¡Deberías haberlo hecho inmediatamente después de ver la magnitud del error!
Bueno, esto es vergonzoso, pero al final resultó ser un error de software en el extremo de la PC (transmisión).

Respuestas (3)

Supongo que el consumo de corriente pulsada en el suministro de +12v es lo que está poniendo el ruido en las señales RS-485. Para fines de depuración, intente desconectar los LED. Si sus problemas de ruido desaparecen, sabrá que es esa corriente pulsada de 1 amperio. Suponiendo que ese sea el caso, su trabajo será reducir los picos de corriente en el cable de +12v (que también están en el cable GND). Un filtro que use un inductor + large_cap ayudaría. Usar un cable diferente donde la energía esté aislada de los datos también podría ayudar.

Acepto esta respuesta porque parece más probable desde el punto de vista de la electrónica ...
+1 por señalar que esas babosas de 1A de corriente de retorno comparten un cable con la referencia de 0V. Si tiene 0,5 ohmios en ese cable, devolver la corriente LED de 1A significa que la tierra de su dispositivo flotará hasta (0,5 ohmios)(1A)=0,5 V. Y dado que está aplicando PWM a esta corriente, la inductancia del cable de retorno solo empeorará este efecto. Es como 'rebote en el suelo'.

mi baudio real es 19966, un 3,8%, ¿podría ser ese mi problema?

Tendría que decir que sí, especialmente si usa el modo maestro/esclavo de 9 bits. Con start y stop hace estos 11 Bits que tienen que pasar. Incluso con 8 bits "normales" (que dan como resultado 10 bits transferidos), el error debería ser mucho menor que el 5%.

mi F_CPU a 8MHz

¿Cómo se generan estos 8 MHz? Un "reloj interno" suele tener un 1% o más de error. Con ese 1% agregado, su 3.8% cae "por la ventana".

Tenga en cuenta que también debe considerar los errores de reloj del lado receptor. Esta es la razón por la que la mayoría de la gente usa el llamado "cuarzo de velocidad en baudios".

Buena llamada. Estoy usando el reloj interno de un ATtiny2313, pero no puedo cambiar eso ahora. El FT232R que controla la transmisión permite establecer velocidades de transmisión no estándar. Veré si puedo igualar más de cerca la tasa de 19966 que me he dado ...
¿Quizás podría hacer un experimento rápido a una velocidad mucho más lenta: 9600 o quizás incluso 300 bps? Entonces, si aún recibe errores, sabe que debe ser otra cosa.
Finalmente pude probar esto hoy y, de acuerdo con la hoja de datos de ATtiny2313, la velocidad de transmisión que estoy usando es muy precisa (dentro del 0,2 % más o menos), por lo que este no es el problema.
De acuerdo con la hoja de datos, el reloj interno de ATtiny2313 tiene solo un 10 % de precisión, esto es muuuuy erróneo para la comunicación UART.

Un error del 3,8% es demasiado alto, cambie su cristal o use una tasa de baudios que tenga un error menor. No será la causa de su problema de ruido, aunque el ruido tendrá más efecto que si el error fuera menor.

3,8% no está mal. Suponiendo 8 bits de datos, 1 parada y 1 bit de inicio (10 bits en total), entonces tiene el 38% de un bit de tiempo libre al final de cada byte. RS-232/485 funcionará con hasta un 50 % de tiempo de un bit desactivado al final del byte. Claro, se vuelve menos tolerante al ruido, pero no debería haber mucho ruido con un cable de 1 metro en una señal balanceada (si las cosas se hacen correctamente).
es demasiado alto También podría haber algún error en el otro extremo, lo que empeoraría las cosas. pdfserv.maxim-ic.com/en/an/AN2141.pdf
Tal vez sea así. Pero debería ser posible calcular el error total de ambos lados y ver cuál es el error total.
Eso no es necesario con un error más pequeño.