SN65176 contención RS485

2

Estoy transmitiendo RS485 a través de:

Aplicación mono - > Dispositivo USBTTY de Linux - > Adaptador RS485 con un terminador 100R agregado - > ~ 1m CATV - > SN65176 con un terminador 100R agregado - > PIC.

A través de la depuración, puedo ver que la transmisión de la aplicación al PIC es exitosa y que la transmisión del PIC fuera de su puerto serial también está bien. Sin embargo, cuando el SN65176 cambia de modo de recepción a modo de manejo, el nivel bajo de salida es muy ruidoso (ver captura de alcance):

Enestacapturadealcance,elcanal1(azul)eselladodedatos(R/D)delSN65176,yelcanal2(amarillo)estáenelterminalRS485cercadelaPC.

Enestecasoparticular,elprimerbytefuedelaPC(00001101)yelsegundobytefuedelPIC.Sesuponíaquedebíaser00011101peroserecibiócomo00000100.

AquíestáelcódigodepuertoMono/C#relevante:

port=newSerialPort(portName:portName,baudRate:115200,parity:Parity.None,dataBits:8,stopBits:StopBits.One){Encoding=ASCIIEncoding.ASCII,Handshake=Handshake.RequestToSend,DtrEnable=false,RtsEnable=false,WriteTimeout=1000//ms};port.Open();//...Port.ReadByte()

EladaptadorRS232a485esun XS201A . Afirma tener un sesgo a prueba de fallas; sin embargo, la medición directa no apoya esta afirmación. Tal vez sea porque el sesgo solo está habilitado cuando la unidad está encendida, pero no considero que sea particularmente seguro. No proporciona esquemáticos y es una unidad sellada, por lo que es más difícil aplicar ingeniería inversa a la cosa; sin embargo, cuando se acciona en presencia de una terminación externa de 100 ohmios en ambos extremos, veo los siguientes voltajes:

Va-Vb = 44mV
Va-gnd = 311mV
Vb-gnd = 267mV

El XS201A también afirma usar "Control de envío automático de datos", para ser alimentado por puerto desde RTS / DTR / TXD, y para abreviar RTS + CTS y DTR + DSR + CT.

Con el SN65176 desconectado, y algunas desviaciones ligeramente diferentes, parece que el XS201A tiene una unidad de línea sin documentar de 4 bits, después de lo cual el controlador está deshabilitado:

Esto muestra dos 0x33 consecutivos desde la PC. Hay un bit de parada e inicio que rodea a ambos bytes, más el tiempo de espera de la unidad final.

    
pregunta Reinderien

1 respuesta

3

Para resumir la discusión y responder a los resultados de su prueba:

  

parece que el XS201A tiene una unidad de línea de 4 bits no documentada, después de lo cual el controlador está inhabilitado

De acuerdo, ese comportamiento encaja con lo que he visto antes en algunos convertidores, y gracias por ejecutar la prueba.

Es probable que sea un tiempo relativamente fijo el que la línea se maneje activamente después de la transmisión mediante ese convertidor RS232-RS485, en lugar de un número constante de tiempos de bits independientemente de la velocidad de bits. Puede cambiar la tasa de bits significativamente y volver a realizar la prueba para confirmar que el "tiempo de línea después del envío" sigue siendo similar al actual ~ 35. También puede encontrar que hay una variación en ese "tiempo de línea después del envío" dependiendo del byte de datos que se envía, por lo que sugiero más pruebas con diferentes bytes para verificar eso.

Este fue otro tema reciente aquí en EE.SE ( ¿Cómo funciona este módulo RS485?) , donde un esquema parcial muestra el tipo de circuito que se puede usar para proporcionar la conmutación "automática" entre envío y amp; recibir en RS-485. Sin embargo, estos no se cambian inmediatamente cuando finaliza una transmisión, lo que lleva al tipo de comportamiento que ha observado.

Como yo lo veo, algunas opciones incluyen:

  • Agregue demora (s) cuando sea necesario en su código, para tener en cuenta el comportamiento de este convertidor (pero debe probar y tratar de encontrar el máximo "tiempo de línea después de enviar" primero), o;
  • Use un convertidor RS232-RS485 diferente que use la línea RTS para cambiar realmente entre Tx y Rx. Sin embargo, debe comprobar que la señal de RTS cambie en el momento correcto y no antes (lo que podría truncar el envío). Es posible que aún se necesite un pequeño "retardo de respuesta", especialmente si la distancia (es decir, la capacitancia del cable) entre los dispositivos es grande.

Es posible que desee buscar términos como "RS-485 turnaround delay" o "RS-485 auto-turnaround" para obtener más información y experiencias al multiplexar en el tiempo varios transmisores en buses RS-485 semidúplex.

    
respondido por el SamGibson

Lea otras preguntas en las etiquetas