Velocidad de comunicación I2C a través de sensores

1

Tengo curiosidad por la rapidez con la que puedo comunicarme entre varios sensores. Tengo un tablero con un adxl345 y un itg3200 gyro MEMS de 3 ejes en I2C. Estoy tratando de construir una IMU que requiere un sondeo rápido de ambos sensores. Cuanto más rápido trato de sondear, más códigos de error recibo. ¿Cómo puedo calcular el retraso óptimo requerido para la comunicación simultánea? También, ¿qué tan rápido puede I2C realmente comunicarse entre múltiples sensores?

PS. Estoy en un atmega128 chip @ 16MHz.

    
pregunta 1337holiday

1 respuesta

2

\ $ I ^ 2C \ $ es un protocolo serial temporizado, que en general significa que hay muy poco que limita la velocidad eléctricamente. La mayoría de los buses \ $ I ^ 2C \ $ se ejecutan a 100 kHz o 400 kHz, lo que superará con creces la capacidad de la mayoría de las IMU para generar datos.

Por ejemplo, formé parte de un equipo de robótica que utilizó un Memsense nIMU y si miras la hoja de datos, dice que el ancho de banda es de 50Hz y genera 34 bytes en un paquete. Esto significa que teóricamente podría subir a \ $ 50 * 34 * 8 = 13,600 \ $ bits por segundo o 13.6 Kbps. El chip con el que corrimos podría funcionar hasta 400 kHz, por lo que podría manejar algunos de estos en el bus con el máximo rendimiento de datos.

Mirando la hoja de datos del atmega128 que proporcionó, dice que la interfaz "TWI" o de dos cables está limitada a 400 kHz. Conociendo el protocolo \ $ I ^ 2C \ $, esto será 2 relojes para la condición de inicio, 1 reloj para la condición de parada, y 9 relojes para la dirección y 9 relojes por byte. Entonces, al utilizar el nIMU al que hice referencia anteriormente, esto da un \ $ 34_ {bytes} * 9_ {relojes por byte} + 9_ {relojes de dirección} + 2_ {startbit} +1_ {stopbit} = 318 \ $ relojes por paquete. Esto significa que no había límite en la frecuencia de muestreo, podríamos leer \ $ {400,000 / 318} = 1257 \ $ paquetes por segundo. Dado que estamos limitados por el muestreo a 50 paquetes por segundo, podríamos tener 25 IMU que envían datos.

Mirando la hoja de datos de ITG, tendrá que hacer algunos cálculos matemáticos para calcular exactamente la tasa de muestreo máxima, pero creo que 125Hz parece una buena línea de base (consulte la sección 8.2). Da salida a 3, números de 16 bits que dan 48 bits por muestra. \ $ 48 * 125 = 6,000 \ $ bits por segundo. Bien dentro del rango de los 400kHz a los que tiene acceso también. Con el adxl345 parece que la velocidad máxima de salida de datos es de 3,200 bits por segundo (¿creo?).

Por lo que parece, el rendimiento máximo combinado de los dos dispositivos que ha elegido es de 9.200 bits por segundo, y el atmega128 tiene un rendimiento de ~ 400.000 bits por segundo. No creo que deba preocuparse por la capacidad de \ $ I ^ 2C \ $ atascando el sistema.

    
respondido por el Kit Scuzz

Lea otras preguntas en las etiquetas