Puertos y Buses 2: CAN bus y RS232
Si tienes dudas sobre qué es un puerto o un bus, deberías leer Puertos y Buses: Parte 1 donde ya hablamos de ello. Si ya tienes claro esos conceptos, te invito a que sigas leyendo. Hoy vamos a hablar sobre 2 tipos de puertos que se usan a menudo: el bus can y el RS-232.
RS-232
La nomenclatura RS-232 significa "Recommended Standard 232" y es que este tipo de puerto nace de la necesidad de comunicar 2 equipos entre sí de manera que se minimicen los efectos del ruido electromagnético. Según la norma, nuestro bus no debería sobrepasar los 15 metros de longitud, lo que nos da mucho margen, o puede ser poco dependiendo de la aplicación en la que trabajemos. No es lo mismo un robot de escritorio que un edificio inteligente.
Para minimizar el efecto del ruido electromagnético los niveles de voltaje con los que trabaja son: de +3V a +15V significa 0 lógico y de -3V a -15V significa un 1 lógico. Lo que hace que si mandas una señal de 5V y esta llega algo disminuida o aumentada se va a "entender" correctamente. Aunque la norma nos dice que está pensado para comunicaciones a baja velocidad lo cierto es que podemos aumentar la velocidad y conseguir buenos resultados.
En cuanto al número de lineas que necesita este bus varía entre sus versiones más utilizadas. Por una parte tenemos los conectores DB-25 con 25 líneas de comunicación y por otra tenemos el DE-9 (se le conoce como DB-9) con 9 líneas de comunicación. Podemos comparar el esquema de ambas modalidades.
Como podemos ver, es posible tener una comunicación completa con tan solo 9 pines, siendo el resto totalmente prescindibles. Pero si lo que queremos es saber la configuración mínima de pines, podemos reducir la cifra a tan sólo 3 líneas, como en los puertos UART. Y es que conectando el transmisor de información TX al receptor de información RX del otro dispositivo, y nuestro RX al TX del otro dispositivo más el cable de masa ya tenemos comunicación. El resto de cables son necesarios en caso de querer implementar un mejor sincronismo entre aparatos.
Una práctica muy común es utilizar puertos UART para comunicaciones RS-232 utilizando transceptores RS232. Lo que hacen estos transceptores es convertir los niveles lógicos TTL a los niveles lógicos RS-232 y viceversa. A continuación podemos ver las conexión típica para usar un transceptor.
CAN BUS
El CAN bus o bus CAN es un tipo de puerto que a monopolizado las comunicaciones en la industria del automóvil en los últimos 20 años. Si bien ahora están utilizándose versiones mejoradas en esta industria, el bus CAN está gozando de una nueva juventud en otras industrias más generales y en aplicaciones de entretenimiento. Aunque cada vez es más fácil, todavía cuesta encontrar microcontroladores que tengan un puerto CAN y una buena documentación para utilizarlo.
El bus CAN sólo necesita de 2 líneas de información y la manera en la que cada dispositivo debe estar conectado. La configuración completa del bus debe ser la siguiente.
Como vemos, también es necesario el uso de transceptores para convertir los niveles lógicos TTL a niveles lógicos CAN. Aunque veamos que necesitamos 2 líneas de comunicación, en realidad es como si sólo tuviésemos 1, ya que cuando un dispositivo quiere enviar un '0' lógico, lo que hace es poner la tensión en ambas líneas a 0 voltios y, cuando quiere transmitir un '1' lógico lo que hace es poner CAN_H a +5V y CAN_L a -5V. Pueden ser valores diferentes a 5 pero siempre son simétricos uno con voltaje positivo y el otro con voltaje negativo. Ambas líneas suelen ir en un cable de par trenzado y se recomienda que cuando tengamos alta velocidad de transmisión el cable esté apantallado. Entre ambas líneas tenemos que poner 1 resistencia de 120 Ohmios, de tal manera que si queremos comprobar la "salud" del bus con un polímetro que mida la resistencia del mismo, debería medir 60 Ohmios ya que ambas resistencias están en paralelo.
En cuanto a la programación el bus CAN, es un bus orientado a los mensajes, no a los dispositivos. Por tanto, todos los micros acoplados en el bus CAN son transmisores y todos son receptores. Se van turnando para transmitir un mensaje, el cual contiene un identificador; el resto de dispositivos ven el identificador y determinan si deberían leer el mensaje o no.
Una cosa curiosa es que todos los dispositivos van pasando el mensaje y van comprobando la integridad del mismo. Cuando detectan un mensaje con un fallo, avisan al resto de dispositivos de que el mensaje contiene un fallo.
Para entender los detalles más específicos os recomiendo las páginas de Wikipedia en inglés sobre ambos buses.
Espero que os haya gustado. ¡Nos vemos en otros artículos y tutoriales!