¿Alguna buena manera de habilitar automáticamente un transmisor RS-485 en hardware?

6

¿Alguien sabe de un buen circuito que habilite automáticamente la transmisión en un controlador RS-485 cuando se transmiten caracteres? En nuestros diseños, actualmente utilizamos RTS para impulsar el pin de transmisión del controlador, pero luego la señalización RTS debe realizarse en el software.

Tenga en cuenta que la solución tendría que ser bastante barata, ya que se trataría de un producto de volumen (excluye el uso de un microcontrolador separado para hacer el trabajo). También mantener la transmisión habilitada por más tiempo del necesario sería un problema, ya que la línea serial puede tener que manejar una gran cantidad de tráfico.

    
pregunta fred basset

5 respuestas

3

Si está usando un protocolo asíncrono ordinario (UART), con un bit de inicio al comienzo de cada byte, un método simple es usar un multivibrador monoestable (incluso el temido 555) configurado para la duración de un byte más el bit de inicio y aproximadamente la mitad del bit de parada, y utilícelo para habilitar el controlador de transmisión.

Si el multivibrador se puede volver a activar, debe permitir hasta un byte completo desde el final de una transmisión antes de que alguien más pueda transmitir, ya que el multivibrador puede haber sido reactivado por el último bit de datos si fuera un cero.

Si no, debería apagarse en medio de cada bit de parada y luego dispararse nuevamente en el siguiente bit de inicio.

    
respondido por el Dave Tweed
3

Bueno, "bueno" es un término vago, pero dijiste "barato" ...

La solución más simple a esto que he visto y probado es usar un transistor PNP y una red RC. El siguiente ejemplo está diseñado para 9600 baudios, por lo que se utiliza una resistencia de 22k y un condensador de 1n5. Estos valores se modificarían para diferentes velocidades en baudios.

Esto no es de ninguna manera una solución elegante, pero es simple y se puede construir desde la bandeja de piezas.

Aquí está el esquema:

simular este circuito : esquema creado usando CircuitLab

    
respondido por el Darian
2

Probablemente, lo mejor sería utilizar un pequeño microcontrolador (probablemente con un UART, aunque podría ser suficiente con el bit bit del software) que toma una señal de "entrada de datos" y genera tanto "salida de datos" como "habilitación de transmisión". Probablemente debería tener una interrupción activada por el borde en el pin "datos en" que afirma su señal de "salida de datos" incluso antes de que se haya recibido completamente un byte, de modo que tan pronto como se reciba el byte completo pueda comenzar a transmitirlo (es normalmente es una buena idea afirmar que la transmisión está activada un poco antes de que comience la transmisión) Después de que transcurra cierto tiempo sin que el borde caiga o un carácter completamente recibido, desactive el pin de habilitación de transmisión.

El enfoque anterior introduciría un retraso de un tiempo de carácter completo entre cuando el procesador recibe datos y cuando sale del cable. En algunos casos, puede ser conveniente reducir ese tiempo. Hacerlo requeriría utilizar un software UART bit-bang en lugar de un hardware UART. Sería difícil obtener la sincronización correcta a velocidades de bits más altas, pero uno podría tener un control mucho más preciso sobre la sincronización de los datos entrantes y salientes.

    
respondido por el supercat
2

Vi un circuito que probablemente resolvió este problema. La CPU era un esclavo en el RS485 y, por lo tanto, normalmente estaba en modo de recepción esperando el mensaje de ID correcto con el que transmitiría su respuesta. El chip RS485 fue habilitado para la transmisión por el borde de ataque del primer bit en la respuesta de datos proveniente de la CPU al responder. Un diodo, un capacitor y una resistencia ideados para habilitar rápidamente el chip en modo de transmisión, y las sucesivas transiciones de datos lo mantuvieron en modo de transmisión. Cuando la transmisión terminó, la tapa se descargaría a través de la resistencia y, después de unas decenas de milisegundos, el chip volvería al modo de recepción.

Hay dos problemas con esto: el primer bit transmitido fue un poco corto en aproximadamente un 10% y esto puede causarle problemas. Estoy seguro de que se podría desarrollar un mejor circuito pero siempre habrá un acortamiento del primer bit debido a que se usa para "detectar" una señal de transmisión y permitir que el RS485 transmita. El segundo problema es que el circuito de habilitación de transmisión se mantuvo activo durante algunas decenas de milisegundos después de que la transmisión desde el esclavo hubiera cesado y esto, por supuesto, evita que el maestro encueste a otro esclavo durante ese período de tiempo.

Si estos "problemas" están bien, no hay problema, funcionará

    
respondido por el Andy aka
0

He estado buscando una solución similar pero necesitaba una sincronización muy precisa ya que el bus está funcionando al 90% de su capacidad. No podía permitirme el lujo de tener más de la mitad de un poco de saturación. Necesito deshabilitar de forma confiable la Tx dentro de 2uS del final del bit de parada.

Mi solución fue usar un flip-flop tipo S / R D para bloquear el bit de inicio y luego introducirlo en un chip de temporización LTC (LTC6994), estos proporcionan una precisión del 3% a la velocidad en baudios que necesitaba de 230 kbps. La salida del chip de sincronización impulsa el restablecimiento en el tipo D.

    
respondido por el Shane

Lea otras preguntas en las etiquetas