¿Por qué la señal FTDI RS485 se ve mal?

2

Tengo una placa interna con un microcontrolador (Microchip dsPIC33E) y un controlador RS485 (Analog Devices ADM2587E) que estoy intentando conectar a una PC de escritorio usando un FTDI (USB-RS485-WE-1800-BT) ) Cable convertidor de USB a RS485. La placa interna recibe los paquetes de datos de la FTDI correctamente y responde. Sin embargo, la PC con frecuencia, generalmente dentro de los primeros cinco bytes, pero a veces más tarde y otras más pronto, verá errores de bits en los datos recibidos por el FTDI.

La imagen de abajo es una traza típica capturada desde un osciloscopio, mostrando:

  • La entrada de DE al ADM2586E en amarillo (1)
  • La señal de datos (B) del FTDI en cian (2)
  • La señal Datos + (A) del FTDI en púrpura (3)
  • La señal GND de FTDI y ADM258E en verde (4)

El alcance se ha establecido de modo que el nivel de '0 V' de las señales 2, 3 y 4 estén todos alineados y marcados por la posición de la señal 4, la línea verde.

La primera ráfaga de datos (a la izquierda) es un paquete de Id. de Servidor de Solicitud Modbus, enviado a 19200 bps, 8 bits de datos, 1 bit de parada e incluso paridad. Esto lo reconoce la placa interna, como se ve al afirmar que el controlador habilita el ADM2587E y responde con la segunda ráfaga de datos (a la derecha). El FTDI envía datos USB que incluyen un error de bit en el sexto (en este caso) byte recibido. Nota: No puedo estar seguro de qué byte contiene el error de bit, ya que el controlador USB no conserva gran parte de la información de temporización, pero esto no es particularmente relevante para mi pregunta. Además, los retrasos en ambos lados de las transiciones DE se han insertado deliberadamente en el software interno de la placa; Originalmente usé el modo UART RTS simplex para reducirlos al ancho de un solo bit de datos, pero esto tuvo el mismo efecto.

Sospecho que el problema se debe a que los niveles de voltaje de las señales recibidas son mal interpretados por el FTDI. La placa interna incluye una resistencia de polarización a prueba de fallas de 360 ohmios entre A + y VOUT y entre A- y GND2 en el ADM2587E, más una resistencia de terminación de 120 ohmios entre las líneas A + y B, según la nota de la aplicación Analog Devices para esto RS485 controlador IC. (También probé resistencias de polarización de 1 kOhm y 10k Ohm, pero con muy poca diferencia). La traza anterior se tomó con un aislador Keterex USB entre la PC y el FTDI, aunque esto no hace ninguna diferencia.

La salida de la placa interna es como esperaría que viera una señal RS485 semidúplex, de dos hilos, con las señales B y A + balanceadas alrededor de la media de sus niveles de inactividad. La salida del FTDI me parece extraña, con las señales B y A + ambas elevadas en relación con la media de los niveles de inactividad. Si el FTDI espera que los datos recibidos se ajusten a esta señal 'elevada', eso explicaría los errores de bit y me lleva a mi pregunta.

¿Por qué parece que la salida del FTDI es elevada, en relación con los niveles de voltaje promedio de tierra y inactivo?

Editar

La respuesta marcada como correcta a continuación indica que no hay nada de malo en los niveles de FTDI, que es lo más parecido a una respuesta correcta: no importa que estén elevados, ya que están dentro de las especificaciones.

Como nota aparte, el problema que estoy viendo en realidad aparece, al examinar de cerca los rastreos del alcance, debido a la salida del ADM258E, y nada que ver con el FTDI en absoluto.

    
pregunta Mike of SST

1 respuesta

2

Está ejecutando en modo half duplex, uniendo Y a A, Z a B, ¿verdad? ¿Por qué mencionas A- y B + y A- y A +? Asumiré que solo te refieres a A y B, y que la resistencia de terminación está a través de ellos.

Cada receptor al final de los 485 cables requiere resistencias de terminación de 120 ohmios, por lo que en el modo semidúplex necesita uno en cada extremo, ya que ambos son receptores. ¿Tienes uno en el extremo FTDI también?

485 transmite 1 / 0s al separar los pares por un voltaje, ¿por qué quieres resistencias 'a prueba de fallos' que atarán el bus? En un estado inactivo, los voltajes deben ser los mismos entre los dos, que es lo que la resistencia de 120 ohmios también ayuda a hacer, usted está trabajando contra esto al separar las líneas separadas y desperdiciar energía. Tiene 360 + 360 + 120ohm de VOUT a GND de forma permanente.

¿Cuál debería ser la polaridad del bit de parada? Verifique la polaridad del pin TX del UART y asegúrese de que esté inactivo durante los periodos de retardo. Si se está transmitiendo un 1, es posible que se produzca un error porque el receptor FTDI nunca ve el bit de parada. (consulte la actualización a continuación)

Los niveles de voltaje en sí mismos no importan tanto, ya que hay una diferencia de > 200mV entre A / B. El chip FTDI no debería tener problemas para determinar lo que está enviando con una diferencia de 3v, al igual que su receptor con una diferencia de ~ 2v.

Actualización: dado que se da cuenta de que es capaz de recibir correctamente los primeros bytes antes del error de bit, esto se parece más a un problema de tiempo. Intente ejecutar a una velocidad de transmisión más baja y vea si obtiene más datos recibidos antes del error.

    
respondido por el vanadium

Lea otras preguntas en las etiquetas