2022-01-13
Circuitos para el control de dirección automática en un bus RS485
Cuando montamos una red rs485 generalmente recurrimos a un transceptor como el MAX485 o alguno de sus equivalentes. Estos transceptores se caracterizan por ser half-dúplex, permitiendo solo un sentido de la información: podemos leer o escribir pero nunca podremos hacer las dos cosas a la vez.
El control de la dirección recae en los pines RE (receiver output enable) y DE (driver output enable). Cuando RE esta activo, el chip se encuentra en modo lectura y los bits de información que llegan al bus se muestran en el pin RO (receiver output). De igual forma cuando DE esta activo, el chip se pondrá en modo escritura y la información que pongamos en el pin DI será reflejada en el chip.
El pin RE es activo a nivel bajo (LOW) mientras que el pin DE es activo alto (HIGH). Se puede decir que son complementarios y esto hace que generalmente en muchos diseños acaben unidos. Así cuando esa unión esta a LOW, RE estará activo mientras que DE no lo estará y viceversa. A partir de ahora a esta unión la llamaremos TXE (transmita enable).
Al final obtenemos que si la unión TXE está a nivel bajo, el chip estará en modo lectura y si está a nivel alto estará en modo escritura. Con esto en mente, solo tendremos que utilizar un pin de nuestro microcontrolador favorito para controlar el estado del chip.
Pero hay maneras de ahorrarnos ese pin...
Forma de onda de una señal serie TTL
Antes de empezar con los circuitos conviene tener en cuenta como es una señal serie TTL.
Una señal serie asíncrona se caracteriza por sus niveles de tensión y por la velocidad.
La velocidad determina el ancho de pulso de 1 bit. Así, para una señal de 9600 baudios el ancho de un pulso será de 1/9600 = 0.1 ms.
Generalmente en una comunicación serie un baudio es un bit por segundo.
Por otro lado, los niveles de tensión determinan que es un 1 o que es un 0. En una señal TTL el 1 lógico será una tensión de 5V, mientras que en un 0 lógico serán 0 voltios.
Mientras no se está enviando o recibiendo información el bus serie está en un estado desocupado "idle" y la tensión es de 5V, es decir, un uno. Cuando el emisor transmite primero empieza con un start bit. Este start bit siempre será un 0. Cuando el receptor vea un cambio de señal de 1 a 0, sabrá que viene información y se pondrá a leerla.
Una vez que se ha enviado el start bit, el emisor procede a enviar los datos. Según la configuración los datos pueden ser de 5 a 8 bits.
Después de los datos se puede enviar un bit de paridad. Este bit es opcional y es una forma rudimentaria de corregir errores. Este bit de paridad puede ser par o impar. Si usamos paridad par, el número de unos que tiene que haber en los datos mas el bit de paridad debe ser par. De igual manera ocurre con la paridad impar.
Una vez enviados los datos se produce la "parada". Esto se indica poniendo a 1 el bus nuevamente. La duración de esta parada se determina en la configuración del puerto serie y puede durar 1 bit, 1 bit y medio o dos bits.
Una configuración típica en RS485 suele 8N2: 8 bits de datos, sin paridad y dos bits de parada.
Principio de funcionamiento de los circuitos.
Como vimos en el apartado anterior, la señal serie se mantendrá en estado idle teniendo una tensión de 5V. En ese estado a nosotros nos interesa que el chip esté en modo lectura, es decir, que el "pin" TXE esté a nivel bajo. El primer paso es invertir la señal.
Cuando vamos a transmitir un dato en la señal TTL se produce el start bit, llevando la señal TX a LOW. Cuando detectemos ese momento debemos pasar a modo escritura colocando TXE a nivel alto. Igualmente vemos que la señal es invertida todavía.
Empezamos a enviar bits de datos, aquí la señal varia entre ceros y unos según la información del dato. Pero la señal TXE debe permanecer encendida durante la transmisión del dato.
Al final tendremos los bits de parada donde la señal TTL vuelve a tomar valor 1. Debemos dejar de escribir en el bus rs485 y poner la señal TXE a 0 (modo lectura).
Y ¿cómo conseguimos ese efecto? Con un retraso. Cuando la señal TXE se convierte a 1, debe permanecer un tiempo en este valor y luego ponerse a cero.
Este tiempo es determinado por el tamaño de datos y la velocidad. Veamos un ejemplo. Para una configuración de 9600 8N2, vemos que el peor de los casos será cuando enviamos un cero binario. Eso significa que el retraso debe durar al menos un bit de inicio y 8 de datos (todos son ceros). Es más deberíamos incluir los bits de parada. La longitud total será de 1+8+2 = 11 bits de información. Como la velocidad es de 9600 baudios (0.1 ms por bit), la duración del retraso debe ser al menos de 11*(1/9600) = 1.15ms.
A esta forma de control se le llama BYTE CONTROL, es la forma más fácil de entender como controlar la dirección de un bus rs485.
En contraposición está su hermana BIT CONTROL. En ella se controla no un byte de datos si no un simple bit de información.
Circuitos básicos.
Existen tres circuito básicos con los que podemos realizar el retraso, los tres funcionan de la misma forma, aprovechando la carga y descarga del condensador.
Circuito con el inversor 74xx14
El 74xx14 es un chip que contiene seis puertas inversoras con trigger Schmitt.
Mientras la señal esta en idle, el inversor invierte la señal poniendo al transceptor en modo lectura.
Cuando se produce el start bit, el condensador se descarga rápidamente a través del diodo, poniendo la entrada del inversor a cero y su salida a uno obligando al transceptor a transmitir.
Cuando de nuevo la señal TX se pone a uno, hasta que el condensador no se cargue la entrada del inversor seguirá a cero. Al cargarse a través de la resistencia lo hará mas lentamente. Dadas las características del 74xx14 su salida será HIGH hasta que la tensión alcance aproximadamente los 2.4 voltios momento en que volverá a valer LOW.
El tiempo que tarda en alcanzar esa tensión será de aproximadamente de 2/3T que podemos aproximar a la siguiente ecuación:
t = 0.66*R*C
Circuito con 555
Cuando el circuito está recién apagado el condensador estará descargado y el flip-flop RS tendrá su salida a 0. El condensador no podrá cargarse simplemente porque el transistor del pin discharge estará conduciendo y no lo permite.
Cuando llega el start bit el flip-flop pasará a estado set, poniendo su salida 1 y evitando que el transistor conduzca. Gracias al diodo el condesado seguirá descargado y no podrá cargarse.
Cuando ocurre el bit stop, el biestable mantendrá su estado, dado que el biestable no permanecerá en su estado. Cuando la tensión en el condensador alcance 2/3 de la tensión de alimentación, el comparador se activará provocando el reset del flip-flop y volviendo a la condición inicial.
Para alcanzar esa tensión el condensador ha de transcurrir 1.1T (recordad T=RC). Por lo tanto la fórmula a aplicar para calcular el retraso es:
T = 1.1*R*C
Circuito con 74xx123
El 74xx123 es un doble multivibrador redisparable con reset, que puede realizar la función de retraso tan solo añadiendo un condensador y una resistencia externos en los pines RXCX y CX.
Según el datasheet de este circuito tenemos que la formula de tiempo de este será:
T = R*C*0.45
Poco más se puede decir de este circuito, ya que está diseñado específicamente para dicha función.
Referencias
Simple Schmitt Trigger SN74HC14 Square Wave Generator
Analog Devices AN-1458 Isolated RS-485 Repeater with Automatic Direction Control
s there any way to use Half Duplex RS485 without using a dedicated controller pin for RE - DE?
Highfield Tales Modbus-RTU added to the Cet Open Toolbox
EE-Paper Design of signal isolation and self transmitting circuit based on RS-485 interface
Electronic Exchange - how to wire up gsm modemdce with max485