CAN configuración de velocidad de transmisión - STM32F207

5

Necesito configurar el módulo CAN de un STM32F207 a las siguientes velocidades de transmisión diferentes: 500 kbit / s, 600 kbit / s, 700 kbit / s y 1 Mbit / s. Para 500 kbit / sy 1 Mbit / s puedo obtener valores enteros exactos para los siguientes registros.

  • Prescaler = 2 (Controlador CAN cronometrado a 30 MHz)
  • BS1 Timequanta = 8
  • BS2 Timequanta = 6

Pero cuando hago el cálculo para 600 kbit / s, no puedo obtener valores enteros para los registros mencionados anteriormente.

¿No es posible llegar a los valores de registro exactos para las velocidades en baudios de 600 kbit / s, 700 kbit / s, etc.?

    
pregunta Vivek V

2 respuestas

5

Nunca he oído hablar de CAN a 600 Kbps. ¿Pero podemos resolver esto?

Con un reloj de 30 MHz, dividido por 2, ¿cuántos Tq necesitamos para alcanzar 600kbps?

15,000,000 / 600,000 = 25Tq

Entonces, usamos 1 Tq para el bit de inicio, luego tenemos que dividir 24 Tq entre BS1 y BS2. ¿Qué hay de 14 y 10?

    
respondido por el Rocketmagnet
3

Con una velocidad de transmisión de 600 kbit / s, tiene un tiempo de bit nominal de 1.67 μS.

El tiempo de bit nominal se divide en tres segmentos: SYNC_SEG , BS1 y BS2 .

  • SYNC_SEG = Tq = (BRP [9: 0] + 1) x Tpclk
  • BS1 = Tq x (TS1 [3: 0] + 1)
  • BS2 = Tq x (TS2 [3: 0] + 1)

Un reloj CAN de 30 MHz nos da un Tpclk de 33.33 ns.

1.67 μS / 33.33 nS nos da casi exactamente 50 tics de reloj por tiempo de bit. Una buena regla general es tener su punto de muestreo en 70-80% del tiempo de bit nominal. Más hacia el 80%, mayor es la tasa de baudios. Así que configuremos BRP[9:0] a 4, lo que nos da:

Tq = (4 + 1) x 33.33 ns = 166.65 ns

Así que ahora Tq es 1/10 del tiempo de bit nominal y nos da números fáciles para trabajar. Para un punto de muestreo del 80%:

  • SYNC_SEG = 1 Tq = BRP [9: 0] de 4
  • BS1 = 7 Tq = TS1 [3: 0] de 6
  • BS2 = 2 Tq = TS2 [3: 0] de 1

Una palabra de advertencia:

Recomiendo encarecidamente que no se ejecute a 1 Mbit / s. Tuve un proyecto en el que el cliente especificó el sistema para que se ejecutara a 1 Mbit / s y no causó muchos dolores de cabeza. Y fue completamente innecesario, ya que solo estábamos enviando un mensaje cada 500 ms.

Jugamos con todo. Diferentes chips de transceptor, esquemas de terminación, diseño de placa, velocidades de muestreo, puntos de muestreo, filtros de modo común, etc. Fue una pesadilla. Y no solo para nosotros. Cada subsistema tenía problemas de comunicación. Después de cuatro años de mendigar y rogar por una tasa de baudios más baja, finalmente la redujeron a 125 kbit / s.

Si tiene algún control sobre la velocidad de transmisión seleccionada, menor es mejor. Si es una especificación del cliente, dígales tan a menudo como pueda que es una mala idea.

    
respondido por el embedded.kyle

Lea otras preguntas en las etiquetas