Configuración de IMU FIS1100

Hemos estado trabajando en la unidad de sensor de movimiento FIS1100.

Decidimos usarlo como sensor de movimiento tradicional (el FIS1100 se puede operar en dos modos, el modo de motor de actitud y el modo de sensor tradicional). Estamos utilizando I2C para la comunicación con el sensor de movimiento. Leer y escribir en el sensor de movimiento funciona correctamente. Después de realizar las configuraciones, no veo ninguna salida en los registros de datos de salida.

¿Alguien puede decirme dónde me equivoqué en mi configuración, ya que esta es mi primera experiencia con sensores de movimiento?

A continuación se muestra mi configuración:

CTRL1 - 0x00
CTRL2 - 0x00 [escala completa = 2g y ODR = 1000]
CTRL3 - 0x00 [escala completa = 32 gps y ODR = 1000]
CTRL4 - 0x00 [No hay magnetómetro externo conectado a FIS1100]
CTRL5 - 0x00 [Paso bajo deshabilitado y filtros de paso alto]
CTRL6 - 0x00
CTRL7 - 0x83 [Habilitación de sincronización de muestras, acelerómetro y giroscopio]

Cómo leo los datos de los registros de datos de salida [Ax,Ay,Az y Gx,Gy,Gz]

Lea el registro STATUS0 [Detener la actualización de los datos de salida].
Leer registros de datos de salida [A[X,Y,Z] [H,L] , G[X,Y,Z] [H,L] ].

Nota: También hemos realizado una autocomprobación del acelerómetro, pero no hay
datos de salida en los registros de datos de salida.

Producción:

MS conf completó
/ ************* CTRL registra después de la configuración **************************** ***/
ctrl1 = 0x0
ctrl2 = 0x0
ctrl3 = 0x0
ctrl4 = 0x0
ctrl5 = 0x0
ctrl6 = 0x0
ctrl7 = 0x83
/************************ ********************************/
ESTADO0 = 0
ax = 0 : ay = 0 : az = 0 ;
gx = 0 : gy = 0 : gz = 0 ;

La hoja de datos se puede descargar desde el siguiente enlace
https://www.fairchildsemi.com/datasheets/FI/FIS1100.pdf


Editado para agregar respuestas a preguntas y esquema:

Leer y escribir en el sensor de movimiento funciona correctamente: lo confirmé probando las líneas I2C con DSO; además, cuando leí el registro 0x00, obtuve 0xFC.

¿Cómo ha demostrado que el diseño de su hardware (incluida la interfaz I2C) es correcto? - Usamos el diagrama de aplicación (sección 1.4 en la hoja de datos) dado en la hoja de datos FIS1100 (excepto que no hemos usado magnetómetro).

¿Cómo sabe que su programa de software es correcto? - Cuando leí la hoja de datos esto es lo que entendí, podemos controlar el sensor de movimiento FIS1100 con siete registros de control. He enumerado cómo los he configurado en la sección SALIDA anterior. Aquí es donde necesito saber si hay que hacer algo además de lo que he hecho anteriormente, o si lo estoy configurando mal.
Diagrama esquemático

Gracias

Hola: deberá proporcionar mucha más información antes de que la gente pueda ayudarlo :-( Usted dijo: "Leer y escribir en el sensor de movimiento funciona correctamente". (a) ¿Cómo lo confirmó exactamente ? (b) Leer el registro 0 del dispositivo: ¿qué valor lee? (c) ¿Cómo ha demostrado que el diseño de su hardware (incluida la interfaz I2C) es correcto? (d) Proporcione un diagrama esquemático y explique su hardware. (e) ¿Cómo sabe que ¿Su programa de software es correcto? Proporcione respuestas completas y claras a esas preguntas, agregándolas al final de su publicación original, usando el botón "editar".
Hola Sam, por favor déjanos saber si necesitas más información sobre nuestra configuración :)

Respuestas (1)

Gracias por agregar el esquema y las respuestas hasta ahora. En base a eso, tengo algunas preocupaciones sobre el diseño del hardware y algunas sugerencias para que progreses en la solución de problemas.

hardware :

a) Al leer el registro 0 del FIS1100 con éxito, eso me da cierta confianza en la funcionalidad del bus I2C. Sin embargo:

  • Aunque el bus I2C funciona al menos hasta cierto punto , personalmente usaría una sonda de alcance de baja capacitancia (es decir, no una "x1") y verificaría las formas de onda I2C en ambos lados del traductor de voltaje I2C PCA9306. Esto es para tener aún más confianza en la forma de onda y verificar que cumpla con los requisitos de temporización que se muestran en la hoja de datos FIS1100.

  • La necesidad de comprobar la forma de onda del bus I2C es especialmente cierta en el lado de 3,3 V (MCU) del PCA9306, donde me sorprende la elección del diseñador de 10k Ω resistencias pull-up, especialmente si el bus operará a más de 100kHz.

b) Aunque dice que su diseño se basa en la hoja de datos, también es diferente en varios aspectos, entre ellos:

  • Sin control MCU del pin FIS1100 RST (restablecimiento); solo un reinicio de encendido. Incluso si ese pulso de restablecimiento cumple con los requisitos de FIS1100 (debe verificar eso), no tiene forma de restablecer el FIS1100 sin un ciclo de encendido. Además, como explicaré más adelante, el SDK FIS1100 "oficial" pasa por un procedimiento de reinicio más complejo (pero no completamente explicado) que no puede hacer, sin el control de MCU del pin de reinicio FIS1100.

  • Vinculaste el pin RESV3 a tierra a través de 100k Ω resistencia _ La hoja de datos dice que debe estar conectado a tierra, y en la hoja de datos se muestra una conexión directa a tierra. No sabemos cómo su cambio en el diseño de ejemplo podría afectar el comportamiento de FIS1100, ya que este es un pin reservado. Sin embargo, a menos que tenga información específica del fabricante del circuito integrado para desviarse de la hoja de datos, tal desviación es generalmente un plan arriesgado.

  • Según mi experiencia con otras IMU, un buen desacoplamiento de potencia es vital para un comportamiento correcto. Veo que su esquema muestra los condensadores recomendados C20 y C21, pero también se debe considerar el diseño de PCB .

  • Falta el desacoplamiento recomendado del pin PCA9306 V REF2 (consulte la sección 9.2.2.1 en la hoja de datos PCA9306 ).

Software :

Hice una búsqueda rápida por usted, pero solo encontré un lugar con un código de muestra para usar el FIS1100, y ese es el SDK oficial del fabricante. Como no ha mencionado usar eso, le explicaré cómo puede obtenerlo:

  • Vaya a este enlace para crear una cuenta "My Fairchild". (Obviamente, ese enlace puede deteriorarse con el tiempo, así que prepárese para consultar su sitio web si ese enlace falla).

  • Inicie sesión en su nueva cuenta, actualice el perfil de su cuenta y complete la dirección de su empresa (a mi antigua cuenta "My Fairchild" le faltaba uno de los campos de dirección y la descarga no continuaría hasta que se completara esta parte del perfil de la cuenta ).

  • Vaya a: https://www.fairchildsemi.com/evaluate/e Evaluation-boards /FEBFIS1100.html

  • Descargue la guía del usuario para su placa de evaluación FIS1100 desde el enlace en esa página; le muestra un esquema de muestra y un diseño de PCB.

  • En la parte inferior de esa página, en "Recursos relacionados", haga clic en el ícono "Archivos de soporte de FEB (ZIP)" (no puedo vincularlo aquí, ya que usa un montón de JavaScript y se debe hacer clic en la página que mencioné anteriormente, y primero debe iniciar sesión en su cuenta "My Fairchild").

  • Después de leer y aceptar el acuerdo de licencia, puede descargar el archivo (la versión actual es de 41,2 MB), que es un ejecutable de instalación de Windows (lamentablemente). Cuando se ejecuta (requiere permisos de administrador), ofrecerá instalar todo el software (y los controladores) necesarios para usar su kit de evaluación FIS1100, en su placa MCU recomendada.

  • En el directorio de instalación, por ejemplo, predeterminado: C:\Program Files\Fairchild Semiconductor\FIS1100 SDK 1.0.3busque en el SDKdirectorio, incluidos los Documentationsubdirectorios y Examples. fis_driverEl fis_drivercódigo fuente del subdirectorio se puede revisar fácilmente para ver cómo se utilizan los distintos registros y señales del FIS1100. Debido a la licencia del software, no creo que pueda incluir ese código aquí.

  • Curiosamente, ese código fuente incluye rutinas de autoprueba de acelerómetro y giroscopio que no siguen exactamente la secuencia de eventos que se muestra en la hoja de datos FIS1100. No sé si las diferencias son importantes, pero dijiste que:

También hemos llevado a cabo una autocomprobación del acelerómetro, pero no hay datos de salida en los registros de datos de salida.

Por lo tanto, consideraría intentar la autocomprobación nuevamente, pero siguiendo la secuencia de accesos al registro que se muestra en el código fuente, en lugar de la que se muestra en la hoja de datos. También sería interesante si la INT2señal se comporta como se describe en la hoja de datos, cuando intente realizar la autocomprobación.

  • Tenga en cuenta que la Fis1100_reset()función en el código fuente de ejemplo, alterna manualmente el pin FIS1100 RST (que su esquema no le permite hacer), afirmándolo por 100uS, y luego envía algunos comandos para los cuales no puedo (rápidamente) encontrar el significado . Nuevamente, eso podría (o no ) ser relevante para el comportamiento incorrecto que está viendo.

  • Dijiste que tu:

Leer registro STATUS0 [...] Leer registros de datos de salida [...] ctrl7 = 0x83

Bien, entonces tiene configurado CTRL7 bit 7 (SyncSimpl). Por lo tanto, puede serle útil verificar exactamente lo que se informa en STATUS0el registro. Por ejemplo, si los bits del acelerómetro y el giroscopio son todos cero, eso sugeriría que el acelerómetro y el giroscopio no están produciendo ninguna lectura. También sería interesante si la INT2señal se comporta como se describe en la hoja de datos cuando intenta hacer esto.

Espero que esos comentarios y sugerencias sean útiles en la resolución de problemas; por supuesto, depende de usted si decide usar esa información :-)

Hola Sam, Conectar el pin RESV3 a tierra a través de la resistencia es el error que hemos estado cometiendo. Después de quitar la resistencia, nuestro sensor de movimiento funciona correctamente. Gracias por dedicar tu tiempo y ayudarnos :)
@Ekambaram - Esas son buenas noticias - ¡gracias por los comentarios y me alegro de que hayas encontrado el problema! Desafortunadamente, dado que es un pin "reservado", es probable que nunca sepamos su uso exacto. Como siempre, siga la hoja de datos :-) ¡Gracias de nuevo!