Estoy tratando de recibir mensajes CAN desde un radar, cuya especificación define los siguientes datos para la sincronización de bits:
CAN baudrate = 250 kBaud
Tseg1 = 8
Tseg2 = 7
Tsjw = 4
Synchronization on one edge only.
Estoy usando un cristal de 16 MHz en el clásico MCP2515 (controlador CAN) + MCP2551 (CAN Transceptor) setup , que uso entre el bus CAN y un Arduino Uno , pero creo que tengo algunos problemas al configurar la configuración de sincronización de bits en el MCP2515.
Esto se debe a que el uso de una frecuencia de reloj de 16 MHz limita la cantidad de tiempo por bit a 16, estoy usando MBtime herramienta para verificar la sincronización de bits.
1 time quanta synchronization segment
+ 1 time quanta propagation delay
+ 8 time quanta phase segment 1
+ 7 time quanta phase segment 2
----------------------------
= 17 time quanta
Que es uno más que el requerido (16). Siendo el segmento de sincronización siempre es uno, y el segmento de propagación al menos uno, ¿cómo es posible hacer que funcione con los parámetros requeridos?
Mis ideas están usando otro cristal, tal vez 18 o 20 MHz. (En realidad lo intenté con 20 MHz y un retardo de propagación de cuatro cuantos, y no funcionó).
Sin embargo, al usar un convertidor de CAN-a-USB en mi PC, recibí con éxito los cuadros CAN que esperaba del radar. Establecí los mismos ajustes (Tseg1, Tseg2, SJW y velocidad de transmisión). Y este convertidor utiliza un cristal de 16 MHz ...
¿Hay algo que me falta? ¿Debo cambiar la frecuencia del oscilador a otro valor?