Preguntas sobre el bus CAN [cerrado]

0

Estoy usando el módulo CAN incorporado PIC18F2680 junto con CAN MCP2551 transceptores, y Estoy usando la librería plib para las funciones CAN2510. Mi pregunta es:

  1. ¿Deberíamos usar cables de par trenzado (como tomar los cables CAN-Low y CAN-High y torcerlos)?

  2. El segundo está más relacionado con el protocolo CAN: si dos transmisores comienzan a transmitir al mismo tiempo y se les asigna la misma ID de bajo valor como máscara, entonces quién ganará el arbitraje y, si no se resuelve, cómo ganar el supuestamente el arbitraje si pudiera escribir un código para él?

  3. El tercer ser: CAN funciona en CSMA / CD, así que, ¿cómo se realiza la detección del operador?

  4. ¿Cómo podemos usar MCP2551 en la herramienta de simulación Proteus ISIS?

  5. Estoy usando la biblioteca plib / CAN2510 que en realidad está definida para la serie PIC18Cxxx. ¿Se puede usar para la serie PIC18F o debo escribir mis propias funciones para iniciar, enmascarar, filtrar, leer, escribir, etc.?

pregunta Abhilash Hegde

3 respuestas

2

CAN es una señal de par diferencial y podría torcerse sin problemas.

La segunda y tercera preguntas van de la mano. CAN utiliza un sistema muy interesante. El bus tiene dos estados, dominante (0) y recesivo (1). El bus está inactivo en estado recesivo. Cada nodo en el bus puede escribir en el bus y sentir lo que se está escribiendo. Cuando un paquete comienza, todos escriben un estado dominante en el bus para indicar el bit de inicio. Entonces todos comienzan a escribir su dirección de mensaje. Por ejemplo, supongamos que el primer bit de la dirección es dominante. Cada módulo que escribió un estado recesivo detecta el estado dominante y lo abandona. Esto continúa hasta que solo queda un módulo. El módulo que queda terminará su mensaje.

Dicho esto, el bus CAN nunca debe tener dos módulos que puedan enviar un mensaje con la misma dirección. Hablando hipotéticamente si tal evento ocurrió y ambos módulos pasaron por un arbitraje. Luego, la primera instancia en la que se escribe un estado dominante y recesivo en el bus se detectaría como una colisión de bus por el módulo que escribió el estado recesivo. Desde aquí tienes dos opciones como diseñador de tu propio bus. Cierre el módulo de colisión y deje que el otro módulo finalice la transmisión o haga que el módulo de colisión emita un error (mantenga el bus dominante durante más de 6 cuadros).

    
respondido por el vini_i
3
  

1.Debemos utilizar cables de par trenzado (como tomar los cables CANL CANH y girarlos).

Definitivamente, sí. El retorcido de cables resuelve parte de la influencia parasitaria del entorno mediante el uso de filtrado de modo común . También hace que los cables trenzados sean una línea de transmisión más consistente.

  
  1. Si 2 transmisores comienzan a transmitir al mismo tiempo y se les asigna la misma ID de bajo valor como máscara, ¿quién ganará el arbitraje y, si no se resuelve, cómo supuestamente se gana el arbitraje si pudiera escribir un código para ello?
  2.   

CAN es un protocolo orientado a mensajes. El caso que describe es que dos transmisores envían simultáneamente el mismo mensaje, lo que no tiene mucho sentido, ya que un mensaje CAN proporciona hasta 8 bytes de datos para distinguir a los "interlocutores", por lo que, en teoría, esta situación no debería ocurrir.

  
  1. Tercer ser CAN funciona en CSMA / CD, así que, ¿cómo se realiza la detección del operador?
  2.   

Según Texas Instruments :

  

El protocolo de comunicación CAN es un protocolo de acceso múltiple, con detección de portadora, con detección de colisión y arbitraje en prioridad de mensaje (CSMA / CD + AMP). CSMA significa que cada nodo en un bus debe esperar un período prescrito de inactividad antes de intentar enviar un mensaje. CD + AMP significa que las colisiones se resuelven mediante un arbitraje a nivel de bits, en función de una prioridad preprogramada de cada mensaje en el campo de identificador de un mensaje. El identificador de prioridad más alta siempre gana el acceso al bus. Es decir, la última lógica alta en el identificador sigue transmitiendo porque es la prioridad más alta. Como cada nodo de un bus participa en la escritura de cada bit "a medida que se escribe", un nodo de arbitraje sabe si colocó el bit de lógica alta en el bus.

El circuito interno está diseñado para leer el bus permanentemente, lo que hace que el transceptor también lea el flujo de datos que envía solo, vea la figura 4 en el documento:

Sihayunadiferenciaentreloqueleeyloqueenvía,inmediatamentedejadetransmitiryentraenunestadode"error". El mensaje está almacenado en un búfer para su posterior retransmisión.

Aunque no sé nada de 4 ni 5.

    
respondido por el user59864
1

Las respuestas a algunas de sus preguntas serían:

  1. Debe torcer los cables CAN-High y CAN-Low para reducir el ruido

  2. No estoy seguro de la segunda pregunta, pero puedes usar el indicador bit_error para reiniciar la transmisión.

  3. Y MCP2551 no está disponible actualmente en la herramienta de simulación Proteus.

respondido por el Robert

Lea otras preguntas en las etiquetas