Al comparar la capa física solamente , CAN y RS-485 son similares en que ambos usan señalización diferencial. Esto les da a ambos una buena inmunidad al ruido en modo común.
La principal diferencia es que RS-485 utiliza señalización simétrica. Una línea es de 5 V y la otra de 0 V para indicar un estado, luego se voltea a 0 V y 5 V para el otro estado. Esto hace que la detección del estado sea muy fácil (un comparador simple, quizás con un poco de histéresis), pero presenta un desafío al terminar el bus.
Si cree que el par trenzado que transporta las señales tiene una impedancia característica de 120 Ω, lo ideal es que coloque 120 entre las dos líneas. Eso sería un total de 60 Ω entre las dos líneas. (5 V) / (60) = 83 mA. Eso es mucha corriente para el autobús, y se sacaría todo el tiempo. Eso llega a casi medio vatio de potencia inactiva. Tenga en cuenta que cada resistencia de terminación de 120 diss disiparía 208 mW, lo que significa que deberían tener una resistencia mínima de "¼ W". El montaje en superficie 0805, por ejemplo, no tiene por qué aplicarse.
Probablemente debido a estas consideraciones, los requisitos de terminación para RS-485 están algo relajados. Eso resulta en una velocidad de bus utilizable reducida. Eso está bien para la mayoría de las aplicaciones RS-485, ya que normalmente se ejecutan a velocidades de transmisión comunes, rara vez por encima de 115.2 kBaud.
Por otra parte, PUEDE terminar correctamente la dirección. Se supone que se utilizan 120 Ω pares trenzados para las diferentes señales, y especifica una resistencia de terminación de 120 Ω en cada extremo del bus. Entonces hay dos diferencias importantes para evitar los problemas descritos anteriormente:
- El estado de reposo no está activado, lo que significa que las líneas se mantienen al mismo voltaje por las resistencias de terminación.
- El estado del bus activo (denominado estado dominante en la especificación CAN) es cada línea que se extrae a solo 900 mV del nivel inactivo. Por lo tanto, los dos estados son 0 V o 1,8 V diferenciales, no 5 V y -5 V como RS-485.
La potencia para mantener un bus CAN en el estado dominante es de solo 54 mW, y ninguna para mantenerlo en el estado recesivo (inactivo). CAN está diseñado para velocidades de hasta 1 Mbaud, posibles gracias a una terminación mejor que RS-485.
Otra diferencia importante entre CAN y RS-485 ya mencionada es que el RS-485 se dirige activamente a ambos estados, mientras que CAN solo se conduce al estado dominante, con el bus mismo relajándose al estado recesivo. Esto hace una diferencia significativa en los niveles de protocolo más altos para el arbitraje de bus.
Entonces, ¿qué usar? CAN es la opción clara para los nuevos diseños en la mayoría de los casos porque:
- La señalización de bajo nivel permite un esquema de detección de colisión. Cuando un nodo está "escribiendo" el estado recesivo en el bus y ve que en realidad está en el estado dominante, sabe que otro nodo está impulsando el bus. El nodo que intenta escribir el estado recesivo retrocede y espera el final del mensaje. El nodo que escribe el estado dominante nunca sabe que esto sucedió. Su mensaje es enviado y recibido por todos los demás nodos normalmente.
- Esta capacidad de detección de colisiones permite arquitecturas de red de igual a igual sin ningún tipo de arbitraje central. Los nodos simplemente envían mensajes, pero se retiran cuando se detecta una colisión, luego reintentan una vez que se completa el paquete actual. Finalmente, esos otros mensajes se envían, el bus está disponible y los mensajes colisionados previamente se envían sin colisión.
- CAN especifica mucho más que la capa física, mientras que eso es todo lo que se obtiene con RS-485. No hay una forma estándar en RS-485 para decidir quién recibe el envío, qué se está enviando, cómo saber si llegó intacto, etc. CAN especifica paquetes completos en el bus, que incluyen una suma de comprobación CRC de 16 bits.
- Dado que varias capas de protocolo por encima del físico están especificadas con CAN, la lógica para implementarlas puede integrarse en el hardware del estante. Puede encontrar micros pequeños y baratos con hardware que envía y recibe paquetes CAN completos. Este hardware se encarga automáticamente de la detección de inicio / finalización de paquetes, la detección de colisiones, el retroceso, el reintento, la generación y verificación de la suma de comprobación y algunas otras capacidades relacionadas con el manejo de fallas de hardware.
En contraste, con RS-485 obtienes un UART y el resto es tu problema. Si bien es ciertamente posible implementar un protocolo robusto por encima de RS-485, no es tan fácil resolver todos los casos de esquina como piensan los ingenuos ingenieros.
Una limitación de CAN que puede requerir una solución para algunas aplicaciones es el límite de 8 bytes de datos por paquete. Esto también es bueno para el mecanismo de colisión / reintento, pero es algo que debe tener en cuenta si tiene la intención de pasar la transmisión de datos a través de CAN. Sin embargo, hacer lo mismo con RS-485 tampoco es tan trivial como podría parecer a primera vista.