Ejecute dos tableros con diferentes cristales (MCP2515 específicamente)

Tengo una interfaz de bus CAN que usa un cristal de 16 MHz y quiero configurar mi propia interfaz para hablar/simular paquetes CAN con la primera. Tengo cristales de 20 MHz para mi propia interfaz, pero cada vez que conecto esos dos juntos, configuro el mío a 500 kbaudios, el otro descubre solo 50 kbaudios... por lo tanto, esta pregunta.

Vale la pena mencionar que la interfaz ya configurada funciona perfectamente con el CAN del vehículo y se verifica que funciona como se esperaba.

¿Importa (en CAN) si el otro dispositivo usa un cristal diferente?

Para aquellos que se preguntan, esta es una configuración de Arduino, aunque generalmente tengo curiosidad acerca de esto en una configuración electrónica.

Cada dispositivo en el bus puede funcionar a una velocidad diferente (reloj por cualquier medio, incluido un cristal); sin embargo, todos deben configurarse para operar a la misma velocidad en baudios. Así funcionan todos los buses de datos compartidos. De su publicación, parece que su tasa de baudios está desactivada por un factor de 10, lo que probablemente sea solo un error en la configuración del bus, por ejemplo, un solo bit en un registro de control.
Ahh, pensé que todavía funcionaría, porque los vehículos probablemente usan configuraciones diferentes. Sí, siempre obtengo 50 kbaudios del dispositivo en funcionamiento, pase lo que pase, casi sospecho de mis condensadores (2x 15pF), pero no estoy familiarizado con ellos para concretarlo específicamente. Gracias por la respuesta rápida, intentaré depurar y ver dónde falla. Tengo una sospecha en arduino lib donde la mayoría de las libs usan la configuración de baudios para cristales de 16 mhz ...

Respuestas (1)

¿Importa (en CAN) si otro dispositivo usa un cristal diferente?

No claro que no. Simplemente establezca la tasa de baudios correctamente para cada nodo. Verifique con un osciloscopio.

La especificación CAN recomienda el uso de osciladores de cuarzo para velocidades de transmisión superiores a 125 kHz. Como regla general, debe elegir un valor de cristal que le proporcione una desviación máxima del 1 % de la velocidad de transmisión óptima.

Tendrá que determinar qué valores de cristal son adecuados leyendo cómo funciona el preescalador de reloj para el controlador CAN específico. Esto debería ser mucho más fácil cuando tiene un controlador externo como en su caso, en lugar de tener uno incorporado (que es mucho más común). Simplemente proporcione un reloj dedicado a él.

También tenga en cuenta que los preescaladores de reloj para CAN pueden ser bastante complicados, ya que tendrá que considerar cuántos de tiempo usar por bit y dónde termina el punto de sincronización. Esta suele ser la parte más difícil de hacer bien cuando se escribe un controlador CAN.