Tengo una placa interna con un microcontrolador (Microchip dsPIC33E) y un controlador RS485 (Analog Devices ADM2587E) que intento conectar a una PC de escritorio usando un USB FTDI (USB-RS485-WE-1800-BT) para Cable convertidor RS485. La placa interna recibe los paquetes de datos del FTDI correctamente y responde. Sin embargo, la PC verá con frecuencia, generalmente dentro de los primeros cinco bytes, pero a veces más tarde y otras veces antes, errores de bit en los datos recibidos por el FTDI.
La siguiente imagen es una traza típica capturada de un osciloscopio, que muestra:
El osciloscopio se ha configurado 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 es reconocido por la placa interna, como lo ve afirmando Driver Enable del ADM2587E y respondiendo 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 retiene mucha información de tiempo, pero de todos modos esto no es particularmente relevante para mi pregunta. Además, los retrasos a ambos lados de las transiciones DE se han insertado deliberadamente en el software interno de la placa; Originalmente usé el modo simplex UART RTS para reducirlos al ancho de un solo bit de datos, pero esto tuvo el mismo efecto.
Sospecho que el problema se debe a que el FTDI malinterpreta los niveles de voltaje de las señales recibidas. 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, además de una resistencia de terminación de 120 ohmios entre las líneas A+ y B-, según la nota de aplicación de Analog Devices para este Circuito integrado del controlador RS485. (También probé resistencias de polarización de 1 kOhm y 10k Ohm, pero con muy poca diferencia). El seguimiento anterior se tomó con un aislador USB Keterex entre la PC y el FTDI, aunque esto no hace ninguna diferencia.
La salida de la placa interna es como esperaría ver una señal RS485 de dos hilos y semidúplex, con las señales B- y A+ equilibradas alrededor de la media de sus niveles inactivos. La salida del FTDI me parece extraña, con las señales B- y A+ elevadas en relación con la media de los niveles inactivos. Si el FTDI espera que los datos recibidos se ajusten a esta señal 'elevada', eso explicaría los errores de bits y me lleva a mi pregunta.
¿Por qué la salida del FTDI parece estar elevada, en relación con los niveles de voltaje medio de tierra e inactivo?
Editar
La respuesta marcada como correcta a continuación indica que no hay nada malo con 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.
Aparte, el problema que estoy viendo en realidad parece, en un examen mucho más detallado de los rastros del alcance, que se debe a la salida del ADM258E, y no tiene nada que ver con el FTDI en absoluto.
Está ejecutando en modo semidúplex, uniendo Y con A, Z con 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á entre 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/0 separando los pares por un voltaje, ¿por qué quiere resistencias 'a prueba de fallas' que atarán el bus? En un estado inactivo, los voltajes deben ser los mismos entre los dos, que es lo que también ayuda a hacer la resistencia de 120 ohmios, está trabajando en contra de esto separando las líneas separadas y desperdiciando energía. Tienes 360+360+120ohm de VOUT a GND permanentemente.
¿Cuál debe ser la polaridad del bit de parada? Verifique la polaridad del pin TX del UART y asegúrese de que su inactividad sea 0 durante los períodos de retraso. Si está transmitiendo un 1, ¿podría estar fallando porque el receptor FTDI nunca ve el bit de parada?(ver actualización a continuación)
Los niveles de voltaje en sí mismos no importan tanto, ya que hay una diferencia de> 200 mV entre A/B. El chip FTDI no debería tener problemas para determinar lo que está enviando con una diferencia de 3v, tal como lo hizo su receptor con una diferencia de ~2v.
Actualización: desde que se dio cuenta de que puede recibir correctamente los primeros bytes antes del error de bit, esto parece más un problema de tiempo. Intente ejecutar a una velocidad en baudios más baja y vea si recibe más datos recibidos antes del error.
pastel de perro malvado
pastel de perro malvado
pastel de perro malvado
pastel de perro malvado
pastel de perro malvado
vanadio
pastel de perro malvado
vanadio
vanadio
pastel de perro malvado
vanadio
pastel de perro malvado
vanadio
pastel de perro malvado
rberteig