Diferencias significativas entre CAN y RS485 en cuanto a la capa física

Al comparar la capa física de CAN y RS485, estoy tratando de encontrar las ventajas de uno sobre el otro. Descubrí que son bastante similares. Ambos son buenos en términos de rechazo de modo común y ambos necesitan protección contra ESD y sobretensión. Encontré solo una ventaja significativa de CAN sobre RS485 (con respecto a la capa física) en la que CAN tiene un modo tolerante a fallas que le permite mantener la conexión entre los nodos CANbus a través de solo 1 cable de datos, incluso si hay un cable de datos en cortocircuito o abierto o ambos cables de datos están en cortocircuito juntos.

Lejos de la prevención de colisiones y el sistema de prioridad de mensajes que tiene CAN,

1. ¿RS485 tiene el mismo mecanismo tolerante a fallas?

2. ¿Existen otras ventajas o diferencias importantes entre CAN y RS485 con respecto a la capa física?

¿Tal vez podría conectarse al modo de tolerancia a fallas del bus CAB?
Este pdf habla de la característica tolerante a fallas del transceptor CAN TJA1055T.
La principal diferencia es el arbitraje de bus de CAN, lo que significa que la topología de la red es flexible y no hay necesidad de un maestro para controlar el tráfico. En RS-485 no hay un mecanismo incorporado para alternar quién puede enviar, lo que significa que RS-485 tiende a terminar en una topología de red en estrella centrada alrededor de un maestro. Esto se dicta en los niveles superiores, pero afecta dramáticamente el nivel físico.
En general, realmente no hay razón para usar RS-485 y otras tecnologías basadas en UART hoy en día, a menos que necesite algún tipo de compatibilidad con versiones anteriores. Un beneficio solía ser que todas las computadoras PC tenían UART, pero ese ya no es el caso.

Respuestas (2)

Al comparar solo la capa física , CAN y RS-485 son similares en el sentido de que ambos usan señalización diferencial. Esto les da a ambos una buena inmunidad al ruido de modo común.

La principal diferencia es que RS-485 usa señalización simétrica. Una línea es de 5 V y la otra de 0 V para indicar un estado, luego cambia a 0 V y 5 V para el otro estado. Esto hace que detectar el estado sea muy fácil (un comparador simple, tal vez 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 colocar 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 consumiría todo el tiempo. Eso equivale a casi medio vatio de potencia inactiva. Tenga en cuenta que cada resistencia de terminación de 120 Ω disiparía 208 mW, lo que significa que tendrían que ser resistencias de "¼ W" como mínimo. El montaje en superficie 0805, por ejemplo, no necesita aplicarse.

Probablemente debido a estas consideraciones, los requisitos de terminación para RS-485 se relajan un poco. Eso da como resultado 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 kbaudios.

CAN, por otro lado, aborda la terminación correctamente. Asume que se utiliza un par trenzado de 120 Ω para las diferentes señales y especifica una resistencia de terminación de 120 Ω en cada extremo del bus. Hay entonces dos diferencias importantes para evitar los problemas descritos anteriormente:

  1. El estado de reposo no está excitado, lo que significa que las resistencias de terminación mantienen las líneas al mismo voltaje.

  2. El estado de bus activo (llamado estado dominante en la especificación CAN) es cada línea extraída solo 900 mV del nivel inactivo. Por lo tanto, los dos estados son 0 V o 1,8 V diferencial, 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, lo que es posible gracias a una mejor terminación que RS-485.

Otra diferencia importante entre CAN y RS-485 a la que ya se ha aludido es que RS-485 se dirige activamente a ambos estados, mientras que CAN solo se dirige al estado dominante, mientras que el propio bus se relaja hasta el 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 elección clara para nuevos diseños en la mayoría de los casos porque:

  1. La señalización de bajo nivel permite un esquema de detección de colisiones. 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á conduciendo 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 normalmente por todos los demás nodos.

  2. Esta capacidad de detección de colisiones permite arquitecturas de red de igual a igual sin ningún arbitraje central. Los nodos simplemente envían mensajes, pero retroceden cuando se detecta una colisión y luego vuelven a intentarlo una vez que se completa el paquete actual. Eventualmente, esos otros mensajes se envían, el bus está disponible y los mensajes previamente colisionados se envían sin colisión.

  3. CAN especifica mucho más que solo la capa física, mientras que eso es todo lo que obtiene con RS-485. No existe una forma estándar en RS-485 para decidir quién envía, qué se envía, cómo saber si llegó intacto, etc. CAN especifica paquetes completos en el bus, que incluyen una suma de verificación CRC de 16 bits.

  4. Dado que varias capas de protocolo por encima de la física se especifican con CAN, la lógica para implementarlas se puede integrar en el hardware estándar. Puede encontrar micros pequeños y baratos con hardware que envía y recibe paquetes CAN completos. Este hardware se ocupa automáticamente de la detección de inicio/finalización de paquetes, detección de colisiones, retroceso, reintento, generación y verificación de sumas de verificación y algunas capacidades más relacionadas con el manejo de fallas de hardware.

    Por el contrario, 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 hacer bien todos los casos de esquina como piensan los ingenieros ingenuos.

Una limitación de CAN que puede requerir 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 datos de transmisión a través de CAN. Sin embargo, hacer lo mismo con RS-485 tampoco es tan trivial como podría parecer a primera vista.

"Probablemente debido a estas consideraciones, los requisitos de terminación para RS-485 son algo relajados. Eso da como resultado una velocidad de bus utilizable reducida". No sé exactamente qué quiere decir con eso, pero RS485 puede alcanzar una tasa de bits de hasta 10 Mbit/s, que es 10 veces más alta de lo que CAN podría pagar.
¿Qué pasa con el mecanismo tolerante a fallos? ¿RS485 tiene esa característica?
@Maj: para longitudes cortas, RS-485 puede ir rápido. Sin embargo, si se utiliza una línea de transmisión de par trenzado típica, los extremos no se terminarán correctamente.

RS485 usa +/- 400 mV, no 0-5 V, por lo que la resistencia de terminación tiene una potencia menor que el bus CAN. Hay una ventaja que muchos (todos) parecen pasar por alto. Debido a que RS485 en realidad es bidireccional alrededor de 0V, es decir, debe ser un puente H completo, esto significa que la corriente fluye de una forma u otra. No se trata de los niveles de voltaje sino de la dirección real de la corriente. Entonces, esto difiere de CAN, donde efectivamente está mirando 2 señales diferentes en relación con GND. Desea ver que existe este nivel de 2,5 V RELATIVO a GND y que estas dos líneas tienen el mismo voltaje en relación a GND o que una está por encima y la otra está por debajo de 2,5 V en relación a GND.

Estas son dos cosas muy diferentes. CAN solo funciona cuando hay un GND al que referirse, por lo que GND tiene que seguir la señal en todas partes. Esto significa que si desea utilizar CAN aislado, necesita esa referencia GND.

Ahora RS485 es básicamente una unidad de CA de un puente H, los electrones fluyen de una forma u otra, el voltaje relativo a GND es totalmente irrelevante. el voltaje no se compara con GND, es la dirección del flujo de electrones lo que se observa, por lo que no necesita un GND. Esto significa que en situaciones en las que desea unir dos sistemas que no comparten una conexión a tierra o no es necesario, está bien y donde las conexiones a tierra no son comunes pero difieren, está bien porque la medición no es relativa a GND y tomando out significa que se puede evitar el aislamiento donde CAN lo requiera.

La razón principal para usar CAN es que siempre que no use la misma ID para dos dispositivos, ningún dispositivo necesita saber acerca de cualquier otro dispositivo y los dispositivos pueden agregarse al bus.

Lo siento, pero esto está mal. Se permite una salida RS-485 entre 1,5 V y 6,0 V, y el lado de recepción requiere +/- 200 mv. Entonces, una resistencia de terminación de 120 ohmios debe manejar 0.3W. El estándar de bus CAN dice 0,25 W, a menos que desee manejar cortocircuitos al voltaje de la batería. Y RS-485 se trata de niveles de voltaje, no de dirección actual. Tanto RS-485 como CAN son buses diferenciales y ambos requieren una conexión a tierra común entre los transceptores, RS-485 puede manejar más voltaje de modo común que CAN. La diferencia es relevante y los voltajes del bus RS-485 en el receptor deben estar entre -7 y +12 V en comparación con la tierra local.
Sí, la salida diferencial puede ser tan alta como 5 V (+/-2,5 V), pero el funcionamiento de estos dos buses es bastante diferente. CAN crea una conexión a tierra virtual alrededor de los 2,5 V, es por eso que muchos circuitos en realidad dividen los 120 ohmios en 2 y colocan un capacitor allí para tratar de mantener ese punto. Entonces, hay un voltaje positivo y negativo o una unidad diferencial en relación con esos 2.5V no conectados a tierra. RS485 es diferencial a tierra, lo que significa que debe ser verdadero push-pull y la tierra se vuelve irrelevante ya que es la polaridad del voltaje lo que mide, no la magnitud.
Puede dividir la terminación de RS-485 de la misma manera que lo hace CAN. Y puede ejecutar RS-485 usando la habilitación del transmisor para que simule un drenaje abierto diferencial como CAN. Y puede polarizar RS-485 inactivo cerca de 2,5 V con polarización a prueba de fallas, siempre que el diferencial exceda el umbral lógico 1 de 200 mV en todo momento. RS-485 tiene histéresis, por lo que la magnitud de cualquiera de las polaridades debe exceder cierto umbral. CAN solo tiene un umbral más grande. No me estaba concentrando en cuán similares o diferentes son, solo en las afirmaciones falsas en su respuesta.