Mi bus CAN funciona a 125 kbit/s y utiliza exclusivamente formato de trama extendida. Me gustaría saber cuál es la tasa máxima de tramas CAN que puedo enviar. Suponga que la longitud de los datos es siempre de ocho bytes.
De acuerdo con esta página de Wikipedia , cada cuadro tiene una longitud máxima de cuadro de (1+11+1+1+18+1+2+4+64+15+1+1+1+7) = 128
bits:
Teniendo en cuenta un espacio entre tramas mínimo de tres bits , la tasa máxima de paquetes por debajo de 125 kbit/s debe ser: 125000 / ( 128 + 3) = 954
tramas por segundo.
Pero en mi prueba, no pude llegar tan alto. La velocidad de fotogramas máxima que puedo lograr (con los datos de ocho bytes) es de alrededor de 850 fotogramas por segundo.
¿Qué está mal aquí, mi cálculo o mi método de prueba?
Según la sugerencia de Olin Lathrop, ampliaré el relleno de bits.
CAN usa la codificación NRZ y, por lo tanto, no está contento con las series largas de unos o ceros (pierde la noción de dónde deberían estar los bordes del reloj). Resuelve este problema potencial mediante el relleno de bits. Al transmitir, si encuentra una serie de 5 unos o ceros sucesivos, inserta un bit de la otra polaridad, y al recibir, si encuentra 5 unos o ceros sucesivos, ignora el bit siguiente (a menos que el bit sea el mismo que el anterior). bits, en cuyo caso emite un indicador de error).
Si está enviando todos ceros o todos unos para sus datos de prueba, una cadena de 64 bits idénticos dará como resultado la inserción de 12 bits rellenos. Esto aumentará la longitud total de los cuadros a 140 bits, con una tasa de cuadros en el mejor de los casos de 874 cuadros por segundo. Si los bits de datos son los mismos que el MSB del CRC, obtendrá otro bit relleno allí y la velocidad de fotogramas bajará a 868 fotogramas/seg. Si el CRC tiene series largas de unos o ceros, eso reducirá aún más la velocidad de fotogramas. La misma consideración se aplica a sus identificadores.
Un total de 16 bits rellenos producirá una velocidad de fotogramas ideal de 850,3 fotogramas por segundo, por lo que debe tenerlo en cuenta. Una prueba rápida sería usar datos de prueba con bits alternos y ver qué sucede con su velocidad de fotogramas.
El marco 2.0a (estándar) más pequeño que puede construir es de 47 bits... El marco 2.0b (extendido) más pequeño que puede construir es de 67 bits... Eso INCLUYE 3 bits de espacio entre cuadros y EXcluye el relleno de bits... En teoría podemos construir un marco que nunca se llene; En realidad, ¡el relleno de bits va a suceder bastante!
El baudio máximo para CANBus 2.0a/b es 1Mbit.
A 1 Mb/S, un solo bit (dominante/recesivo) tiene una longitud de 1 uS, es decir. 0.000'001 S
Entonces, un marco de 67 bits [el marco teórico más pequeño de 2.0b] tardará 67 uS en transmitirse, antes de que se pueda transmitir otro marco (67 bits).
1'000'000 / 67 da 14.925 fotogramas completos (+ 25 bits del siguiente fotograma)
Como corre a 1/8 de esa velocidad, puede obtener como máximo 1/8 de los paquetes
14'925 / 8 = 1'865 cuadros/Segundo @125Kb
En el momento en que esté utilizando todos los 64 bits (8 bytes) de datos, y ASUMIENDO que no ha desencadenado "errores" de relleno de bits al tener cadenas de 1 o 0 consecutivos
1'000'000 / (67 + 64) = 7'633
7' 633 / 8 = 954
Y eso también suponiendo que su cableado sea perfecto. ¿Su bus de lata está hecho de cable UTP de 120 ohmios y está desacoplado capacitivamente en ambos extremos? ¿O algún cable al azar con una resistencia de 120 ohmios en un extremo?
En general, diría que lo está haciendo bastante bien para obtener el 90 % del rendimiento máximo teórico.
Olin tiene razón con su descripción del relleno de bits y cómo eso puede afectar negativamente el rendimiento teórico de CAN. Otra cosa que puede degradar aún más el rendimiento real del teórico es la latencia. Incluso si su controlador CAN puede lograr una utilización del bus del 100%, es posible que el procesador host no pueda manejar Tx y/o Rx a esa velocidad. Esto podría ser el resultado de un procesador lento y/o un firmware ineficiente que implementa la pila CAN.
Otra pregunta interesante desde la perspectiva de un receptor sería
¿Cuál es la frecuencia máxima de transferencia de tramas en el peor de los casos?
Para este caso, los bits de relleno probablemente se pueden ignorar, ya que hacen que la frecuencia sea más baja.
.
Mirando solo a los marcos de identificación estándar:
Para la longitud de datos 1, tendría que calcular con
55 Bits (sobrecarga mínima + 8 bits de datos + 3 espacios de interfase)
--> la frecuencia máxima de fotogramas para 1 Mbit es de aproximadamente 18181,8/s (1/0,000055)
Para la longitud de datos 0 (también puede ser una información) tendría que calcular con
47 Bits (sobrecarga mínima + 3 espacios de interfame)
--> la frecuencia máxima de fotogramas para 1 Mbit es de aproximadamente 21276,6/s (1/0,000047)
olin lathrop
Tristán
QueRosaBestia
Penghe Geng
Penghe Geng
QueRosaBestia
olin lathrop
olin lathrop
usuario4574
QueRosaBestia