J'ai cherché un peu sur ce forum en ce qui concerne le gyroscope L3G4200D, et je n'ai pas vu ce problème mentionné, mais j'ai vu d'autres en parler sur d'autres forums. Je vois une étrange grande valeur dans ma sortie lorsque le gyroscope est à l'arrêt. Malheureusement, personne ne semble avoir pu expliquer pourquoi, alors j'ai pensé demander
Donc, je collecte des données du gyroscope en utilisant i2c à 400 kHz (mode rapide), en collectant les données du gyroscope en utilisant la lecture multi-octets (six octets à la fois). Échantillonnage à 100 Hz (essayé également le 800 Hz supérieur), également essayé avec le filtrage activé et désactivé à différentes valeurs. Je n'utilise pas la broche d'interruption, mais j'utilise l'attribut `` mise à jour des données de bloc '' dans le GYRCTRLREG4, de sorte que les données ne sont pas sorties jusqu'à ce que LSB et MSB soient lus. 2000dps complets et rien fait avec le FIFO. Je peux poster mes valeurs de registre exactes si cela aide, mais je pense que la plupart d'entre vous n'auront pas la fiche technique à portée de main.
L'image ci-dessous montre mon problème. Les données produites sont bonnes, calculées correctement (à ma connaissance) et le bruit général est très acceptable. Mais ensuite, j'ai remarqué que ces «blips» gênants apparaissaient au hasard lorsque l'appareil est à l'arrêt. Si je le laisse immobile pendant quelques secondes, j'obtiendrai l'un de ces pics, toujours égal à environ 250-255 (donc ~ 18 lors de la conversion, en utilisant '(sortie * 70) / 1000'). Les pics, comme je le dis, sont aléatoires, peuvent apparaître dans n'importe quel plan (dans l'image ci-dessous, vous pouvez voir le premier pic dans le plan X, le second dans le Y), toujours autour de la même valeur, et un, deux ou tous trois peuvent se produire en même temps. La grande valeur est uniquement pour un seul échantillon, puis revient à la normale.
J'ai vu dans un autre thread quelque part que je devrais utiliser la fonction d'attente de données de bloc dans GYRCTRLREG4, comme je l'ai mentionné précédemment, mais aucun changement. J'ai réduit le problème à être lorsque le MSB est nul ou supérieur, c'est-à-dire un nombre positif, puis lorsque le MSB et le LSB sont combinés, j'obtiens ces grands nombres. Par exemple, j'attrape les deux octets nécessaires pour le plan X, j'obtiens un -6 dans le LSB, et un 0 dans le MSB, les combiner me donne 250, puis la conversion donne (250 * 70) / 1000 = 17,5 dps ( c'est-à-dire trop grand pour stationnaire / incorrect). Dans le même échantillon, les deux octets pour le plan Y sont -3 LSB et -1 MSN, leur combinaison donne -3 et la conversion donne -0,21 (c'est-à-dire attendu / correct).
Été sur ce problème depuis des jours maintenant, je vois également un peu de ces pointes aléatoires avec mon magnétomètre, donc je pense que c'est moi qui lit l'appareil (via i2c) de manière incorrecte?
Toutes les suggestions ou choses à essayer sont vraiment les bienvenues!