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?
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]
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.
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.
Gracias
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.3
busque en el SDK
directorio, incluidos los Documentation
subdirectorios y Examples
. fis_driver
El fis_driver
có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 INT2
señ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 STATUS0
el 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 INT2
señ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 :-)
Sam Gibson
Ekambaram