Buscar marcas de tiempo de los mensajes CAN recibidos por un microcontrolador

0

El kit de microcontrolador (kit de descubrimiento STM32F4) que estoy usando tiene soporte CAN y USB. Quiero programar mi microcontrolador para que cada vez que se reciba un mensaje CAN, se transmita a través de USB a la PC host. También necesito ver la hora a la que se recibió cada mensaje CAN. En la PC host puedo ver esta información.

¿Cómo puedo encontrar la información de tiempo sobre el mensaje CAN recibido, es decir, a qué hora se recibió cada mensaje CAN?

Ya tengo un método que explicaré aquí. Necesito su sugerencia con respecto a mi idea o puede sugerir un nuevo método.

Mi método: ejecuta un temporizador dentro del microcontrolador. Cada vez que se recibe un mensaje CAN, el valor presente en el temporizador se almacena y el temporizador se reinicia. El valor del temporizador almacenado junto con la información del mensaje CAN se transfiere a través de USB a la máquina host.

Aquí, cada incremento del temporizador puede ser equivalente a 1 milisegundo o 1 microsegundo, según la configuración del temporizador. El microcontrolador siempre enviará la diferencia horaria entre dos mensajes CAN.

También estoy planeando usar otro contador que aumentaría para cada desbordamiento del temporizador. A veces, un mensaje CAN puede llegar solo después de dos segundos (o incluso en otro momento). En ese caso el temporizador puede desbordarse. Cada vez que un temporizador ha terminado, el contador se incrementará. Esto sucede hasta que llega el siguiente mensaje CAN. Este valor de contador también se transmitirá a la PC host.

¿Cómo está mi método anterior? ¿Hay alguna idea mejor?

    
pregunta robomon

2 respuestas

2

Nunca trabajé con STM32F4, pero como la mayoría de los otros controladores con CAN, tiene registro de marca de tiempo. Revisé este manual de referencia, este tiene un registro

Echa un vistazo a CAN_RDTxR. Tiene campo de marca de tiempo. La descripción dice,

  

Este campo contiene el valor del temporizador de 16 bits capturado en el SOF   detección.

Es posible que desee utilizar esta función incorporada en lugar de usar sus propios temporizadores, etc.

(P.S. Le recomendaría encarecidamente que utilice FIFO, si no los está utilizando)

    
respondido por el Swanand
0

¿Qué sucede si el segundo contador que utilizará para detectar un desbordamiento del timer1 también se desborda? ¿Cómo capturarás ese desbordamiento?

Una solución más simple sería utilizar un módulo RTC (externo o incorporado) para realizar un seguimiento del tiempo. Cada vez que reciba un mensaje a través de CAN, lea la hora del módulo RTC y envíelo a través de USB. Esto también te ahorrará muchas complicaciones relacionadas con el software.

Si aún no desea utilizar un módulo RTC, simplemente envíe los datos cada vez que los reciba a través de CAN a través de USB. Si el otro extremo del USB está conectado a una computadora, obtenga el tiempo de la computadora en sí (¿puede capturarlo usando Microsoft Visual Studio?).

    
respondido por el Akshay Immanuel D

Lea otras preguntas en las etiquetas