Bus CAN - temporización de bits

0

Estoy tratando de trabajar con un controlador CAN de Microchip MCP2515 (oscilador de 16 MHz) junto con un transceptor CAN MCP2551 / 61. He tenido éxito al intentar configurar el dispositivo a través de SPI, PERO no puedo enviar / recibir tramas CAN (tratando de enviar una tirada de tramas de error de gran cantidad, aumentar el contador de errores de registro y hacer que la interfaz sea pasiva a error y bus off) )

Sospecho que la razón de estos errores es la sincronización de bits, aunque no estoy tan seguro de ello.

Por lo tanto, mi pregunta es si la sincronización del bit CAN para cada dispositivo SÓLO afecta solo para recibir o recibir y transmitir

En este caso, ¿el punto de muestreo, el segmento de fase 1 y el segmento de fase 2 afectan durante el envío?

EDIT: simplemente descubrí por qué el controlador no estaba funcionando ... El transceptor MCP2551 estaba muerto ... Lo reemplazó y funcionó de repente

    
pregunta BamsBamx

2 respuestas

1

Con CAN, el esquema de temporización es importante tanto para transmitir como para recibir.

Durante el arbitraje, todos están transmitiendo y recibiendo al mismo tiempo. Esto es para averiguar quién tiene la dirección más baja. Cada nodo escribe un bit en el bus y lee ese bit al mismo tiempo. Si el nodo 1 escribe un bit recesivo y el nodo 2 escribe un bit dominante, el nodo 1 leerá que el bus es dominante y dejará de transmitir. Esto se debe a que un bit dominante sobrescribirá un bit recesivo y tan pronto como un nodo ve que su bit recesivo se ha sobrescrito, sabe que no tiene prioridad y deja de transmitir.

Ahora imagina el peor de los casos. El nodo 1 está en un lado del bus y el nodo 2 está en el otro. Para retrasar la propagación, el borde anterior del bit lleva tiempo para viajar de un lado del bus al otro. Este peor caso es donde el nodo 1 emite el SOF (inicio del cuadro) que toma tiempo para viajar de un lado al otro. Luego, cuando comienza el arbitraje, el borde de bit del nodo 2 tiene que viajar desde el otro lado del bus de vuelta al nodo 1. Esto en realidad produce un retraso de dos longitudes de bus que deben compensarse.

Sin saber la configuración exacta de su bus, es difícil decir exactamente qué está mal. Dicho esto, sugeriría aumentar el retardo de propagación a 3, dejar la fase 1 en 8, disminuir la fase 2 a 4 y aumentar el SJW a 4.

62.5% es un poco temprano para muestrear. 70% a 80% tiende a ser más realista. El ajuste sugerido que he dado aquí es del 75%. Además, la ampliación del SJW le dará al módulo más margen de maniobra para ajustar el punto de muestreo. Cada vez que el bus se sincroniza (al menos una vez cada 10 bits), el SJW permite que el punto de muestreo se mueva en compensación hacia donde cae el borde ascendente de un bit dominante. Esto puede ayudar con un reloj nervioso o adelantado / retrasado.

    
respondido por el vini_i
3

La sincronización de bits es importante tanto para el remitente como para el receptor: cada remitente también muestrea el bus mientras transmite.

Por ejemplo, durante la fase de arbitraje, necesita saber si un mensaje de mayor prioridad también se transmite y, por lo tanto, debe descartar su transmisión.

Además, al final del mensaje, debe verificar el bit ACK.

    
respondido por el Martin Thompson

Lea otras preguntas en las etiquetas