8 votos

Para el bus CAN, ¿está bien intercambiar las líneas CANH y CANL?

Similar a la pregunta En un cable USB, ¿está bien intercambiar los cables D+ y D-? ¿está bien si interconectamos las líneas CAN-H y CAN-L?

La CAN es un protocolo diferencial. ¿Es que los bits dominantes y recesivos no son más que diferencias de voltaje en estas líneas?

También sería útil la información sobre otros protocolos diferenciales.

0 votos

Creo que habría dos diferencias: Intercambio de prioridad H/L, y los datos se invierten a nivel de bits. Pero no sé lo suficiente sobre CAN para responder con seguridad.

1 votos

No. No. @trav1s No. Nótese que la diferencia de tensión tiene una polaridad determinada, y que recesivo significa que no hay diferencia de tensión.

13voto

Morris Maynard Puntos 49

No pude encontrar ninguna referencia que diera una respuesta definitiva. Pero mirando algunas hojas de datos, creo que no. El USB se fija en la presencia o ausencia de un cambiar en tensión. Mientras que el CANBus se fija en la propia tensión.

Este es un ejemplo de transmisión por USB:

USB NRZ

Los unos y los ceros se codifican en función de si hay o no transición.

A diferencia del CANBus que toma la diferencia de los niveles de tensión como se ve en esta nota de la aplicación :

CANBus differential

Si miramos la hoja de datos de un transceptor CANBus, por ejemplo el MCP2551 vemos algo parecido a:

  Sym                  Characteristic                   Min     Max  Units
VDIFF(r)(i)    Recessive differential input voltage    -1.0    +0.5    V
VDIFF(d)(i)    Dominant differential input voltage      0.9     5.0    V

Como se menciona una tensión negativa, esto me hace pensar que la polaridad es importante y que no están tomando el valor absoluto de la tensión diferencial.

Así que si tenemos:

$$CANH = 2.5V$$ $$CANL = 2.5V$$

Normalmente el transceptor lo haría:

$$CANH - CANL = 2.5V - 2.5V = 0.0V = Recessive$$

Si se intercambian las líneas serviría:

$$CANL - CANH = 2.5V - 2.5V = 0.0V = Recessive$$

Hasta aquí todo bien. El problema viene cuando tenemos:

$$CANH = 3.5V$$ $$CANL = 1.5V$$

Aquí, el transceptor lo haría normalmente:

$$CANH - CANL = 3.5V - 1.5V = 2.0V = Dominant$$

Si se intercambian las líneas serviría:

$$CANL - CANH = 1.5V - 3.5V = -2.0V = Recessive (out\ of\ spec)$$

Así que tú, el receptor, no verías más que trozos recesivos.

3 votos

Aah... Interesante.... y y 7 consecutivos recesivo los bits no son más que una condición de error... ¡Qué inteligentes son los diseñadores de especificaciones! :)

0 votos

Duda: ¿Por qué -2V será considerado como Recesivo?

0 votos

3voto

Sam C Puntos 2735

El intercambio de líneas CAN-High y CAN-Low no funciona. Esto es bastante fácil de establecer empíricamente. Yo y mis compañeros de trabajo a veces intercambiamos las líneas por accidente, y es inmediatamente evidente que no funciona.

0 votos

La respuesta de @embedded.kyle explica por qué ocurre esto.

1voto

user103627 Puntos 36

Todo depende del modelo de transductor. Hay una cierta flexibilidad en el valor de CAN_H y CAN_L pero creo que el el valor de CAN_H tiene que ser mayor en cualquier caso (al menos en todo el modelo que he visto).

Si sólo cambias el pin del cable, en cuanto todos los CAN_L estén conectados entre sí y los CAN_H también, debería funcionar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X