Uso de una MCU con controlador CAN integrado frente a controlador CAN externo

Planeo usar el microcontrolador Atmel ATSAMC21J18A en un proyecto de automatización que tiene un controlador CAN incorporado. La red de bus CAN puede contener 32 dispositivos, cada uno generando paquetes de datos en intervalos de 1 segundo. Habrá 16 redes de bus CAN de este tipo conectadas a un solo nodo de puerta de enlace que tiene una MCU NXP LPC1768 (Cortex M3).

  1. ¿Cuáles son los factores y parámetros que deben tenerse en cuenta al decidir si utilizar el controlador CAN integrado o un controlador CAN externo?
  2. ¿Existen pros, contras o limitaciones al usar el controlador CAN integrado?
  3. Dado que el nodo de puerta de enlace CAN manejará el tráfico de las 16 redes, ¿sería una buena idea usar un controlador CAN externo para evitar desbordamientos de búfer?

Tenga en cuenta que de todos modos estoy planeando usar un transceptor CAN externo aislado.

Los controladores CAN externos están obsoletos, ya que ya tiene MCU con uno integrado. Érase una vez que no había MCU con CAN.

Respuestas (3)

  1. Un controlador CAN externo es similar al controlador CAN interno, pero conectado a través de un bus más lento (latencia más alta, tasa de bits más lenta). No hay razón para usar un controlador externo cuando tiene un controlador CAN compatible en el chip (SAM C21):

    • Soporte para CAN-FD
    • Hasta 64 búferes de recepción dedicados y hasta 32 búferes de transmisión dedicados
    • Acceso a la RAM de mensajes directos para la CPU
  2. Con algunos chips, el uso de periféricos CAN reserva una parte de SRAM. Pero no hay una desventaja real en usar una variante en chip. Solo tal vez cuando necesite más de dos controladores, tendría sentido, desde el punto de vista del diseño de software, obtener muchos controladores externos. Pero tendrá una latencia adicional ya que los fotogramas no se asignarán a la memoria. El acceso directo a la memoria es una gran ventaja de CAN en chip con controladores de 32 bits.

  3. Si su puerta de enlace tiene que conectarse a 16 buses CAN independientes, sí. De lo contrario, si es solo un autobús, no. El LPC1768 debería tener mucha memoria. Mirando tu historia, tendrás un promedio de 512 mensajes por segundo . Lo cual se puede lograr a 100 kbit/s.

El único problema con esto es que no puede tener dos ID idénticos en un período corto, de lo contrario habrá un desbordamiento en el cuadro de mensaje. Pero el protocolo de nivel superior que está utilizando ya debería tener reglas con respecto al tiempo mínimo entre dos marcos de la misma ID.

Lo único que debe buscar en el controlador en chip es el hardware FIFO . Si solo tiene un FIFO de hardware de tres profundidades, como en la mayoría de los controladores STM32, puede desbordar el búfer con una breve ráfaga de cuadros con demasiada latencia de interrupción. Tendrá que agregar un FIFO de software adicional en la parte superior.

Si la puerta de enlace es para conectarse a una PC, no reinvente la rueda. Consigue algo de Kvaser o IXXAT.

¿Cuáles son los factores y parámetros que deben tenerse en cuenta al decidir si utilizar el controlador CAN integrado o un controlador CAN externo?

En su mayoría, estos son cosa del pasado, ya que hoy en día hay muchos MCU con controladores incorporados. La única razón por la que usaría un controlador CAN externo es si su MCU no lo admite en el chip. Por ejemplo, si debe utilizar algún tipo de MCU especializado por otros motivos.

¿Existen pros/contras/limitaciones al usar el controlador CAN integrado?

Es superior al controlador externo ya que obtiene un acceso de registro más rápido, sin interfaz de sobrecarga (sin necesidad de SPI, I2C, etc.) y sin componentes externos. Lista de materiales más barata, menos cosas que se pueden romper, menos problemas de EMI, etc.

Dado que el nodo de puerta de enlace CAN manejará el tráfico de las 16 redes, ¿sería una buena idea usar un controlador CAN externo para evitar desbordamientos de búfer?

Realmente no veo cómo puedes conectar 16 redes de bus CAN diferentes a un nodo... eso suena como un diseño de sistema completamente sin sentido. ¿ Está seguro de que no se refiere a 16 nodos CAN en una sola red? Porque no existe una forma sensata de construir ese sistema con una sola MCU convencional.

Suponiendo que se refiere a 16 nodos, debe considerar qué tan capaz es el controlador CAN. En general, hay dos tipos: los simples que solo tienen un FIFO de búfer rx de una cierta cantidad de marcos CAN, y los de "buzón" que tienen tanto FIFO rx como ranuras de buzón tx/rx dedicadas para mensajes de mayor prioridad. Si espera recibir muchos tipos diferentes de marcos CAN, debe elegir un controlador CAN con funcionalidad de "buzón".

Su controlador CAN particular parece tener la funcionalidad de buzón de correo, por lo que debería ser bueno. "Hasta 64 búferes de recepción dedicados y hasta 32 búferes de transmisión dedicados"

¿Podría explicar por qué cree que tener diferentes redes CAN-bus conectadas a un solo nodo de puerta de enlace es una mala idea? ¿Cuáles son las restricciones/desafíos que lo hacen inviable?
@ravihansa3000 Para empezar, ¿cómo vas a cambiar entre ellos? Y por que tienes 16 redes diferentes??? Ni siquiera puedo pensar en ninguna aplicación donde tenga 16 redes diferentes y conectarlas tenga sentido.
No estoy comentando las ventajas o desventajas del diseño del sistema descrito aquí, solo que cualquier automóvil promedio, como Mercedes, por ejemplo, tiene puertas de enlace que manejan varias redes (como 8) y las dirigen a un solo bus CAN de diagnóstico (OBDII). Se utiliza para aumentar la seguridad, el rendimiento, etc., pero también se facilita mediante el uso de controladores de puerta de enlace dedicados.
@EmbeddedGuy Pueden usar varios buses con fines de redundancia. Hay una diferencia entre tener una sola MCU que procesa la entrada de 8 buses diferentes y algún nodo de "retransmisión" que simplemente transfiere mensajes de un bus a otro sin contener ninguna lógica de decisión real.

Dado que la MCU que está utilizando no tiene 16 controladores CAN, deberá realizar una de las siguientes acciones:

  1. Use una MCU por bus y luego, de alguna manera, conéctelos en red.
  2. Conecte 16 controladores CAN externos a una sola MCU.
  3. Use un FPGA para implementar 16 controladores CAN en un chip.
  4. Use un multiplexor para cambiar su controlador CAN entre los 16 transceptores CAN que están conectados a los 16 buses CAN.