¿Qué STM32 es mejor para registrar una red CAN? [cerrado]

Me gustaría construir un proyecto basado en STM32 que interactúe con una red CAN. La red CAN tiene una velocidad de transmisión de 250 kbit/s.

En esta red tengo que:

  • Registra mensajes de 127 nodos con ID entre 0x381 y 0x3FF (cada nodo transmite un mensaje por segundo).
  • Transmite mensajes a nodos con ID entre 0x581 y 0x5FF.
  • Reciba respuestas a estos mensajes que tendrán ID entre 0x601 y 0x67F.

Estaba pensando en usar un STM32 con dos canales CAN. Mi intención es configurar dos filtros diferentes en las identificaciones y limitar las interrupciones. ¿Es una buena elección? Se puede hacer con un solo CAN?

Tengo dudas sobre el tipo y la velocidad de procesador a utilizar. ¿Puede un STM32F1 ser suficiente? ¿O necesito un F4?

"¿Puede un STM32F1 ser suficiente? ¿O necesito un F4?" - Si solo necesita leer datos a 250 kbps como máximo y reenviarlos a algún dispositivo de almacenamiento u otro dispositivo, el F1 tendrá un amplio rendimiento. Pero no tenemos forma de saber si no revela qué más debe hacer la MCU al mismo tiempo.
Puede configurar múltiples filtros para mensajes CAN. Si no son suficientes, aún tiene la opción de filtrar en el software.
Había olvidado varios filtros. Voy a volver a leer la hoja de datos :).
¿Qué característica específica en un registrador CAN está buscando que los registradores CAN existentes (con software de análisis) no ofrecen?
He simplificado la pregunta, pero no es solo un analizador de redes CAN. Tengo que recopilar datos y realizar algunas acciones simples.

Respuestas (1)

El cuadro CAN más corto es de 55 bits, por lo que en el peor de los casos con un bus completamente saturado que consiste en cuadros de un byte de datos (que no es realmente realista para un bus CAN con algún tipo de rendimiento útil) recibirá un cuadro cada 220 µS (55 / 250000). El microcontrolador ST más barato que tiene un controlador CAN es el STM32F042 ($1), y tiene una frecuencia de CPU máxima de 48 MHz. Entonces, con este dispositivo, tendría aproximadamente 10560 (48 * 220) instrucciones por mensaje en el peor de los casos.

En términos de manejo del controlador CAN y procesamiento de mensajes CAN, esta es una cantidad considerable de poder de procesamiento, suficiente para volcar los mensajes en una EEPROM o tarjeta SD con una gran cantidad de procesamiento posterior si es necesario. Si eso es realmente todo lo que hace su dispositivo, entonces no me preocuparía demasiado y cualquiera de los dispositivos STM32 estará bien. En todo caso, la RAM probablemente será un problema mayor si necesita almacenar mensajes en búfer, etc.

En la práctica, dudo que el bus esté funcionando cerca de su capacidad máxima (aunque solo usted lo sabe) y si puede usar los filtros de hardware para ignorar una parte de los mensajes, obtendrá más y más ciclos de instrucciones por mensaje.

Se supone que cada instrucción toma exactamente un ciclo. Esto no es cierto para ninguna instrucción que toque la memoria (consulte el manual de referencia técnica del Cortex-M3, por ejemplo, también se aplica a M0) o aritmética como multiplicar y dividir. Así que sería conservador y dividiría ese número entre dos o cuatro, al menos.