Quelle valeur avez-vous réellement stockée dans "Register 0x31 — DATA_FORMAT"?
Je vais supposer que vous n'avez rien stocké dans ce registre, il est donc toujours dans sa valeur de réinitialisation de 00. En d'autres termes, pendant que vous collectiez des données (du tableau 16 et également de la page 17 de la fiche technique ADXL345 ):
- Enregistrez 0x31 - DATA_FORMAT == 00.
- FULL_RES == 0. Le périphérique est donc en mode 10 bits et les bits de plage déterminent la plage g maximale et le facteur d'échelle.
- Le bit Justify == 0. Donc, mode justifié à droite avec extension de signe.
- Les Range Bits == 00. Donc + - 2g range.
La première chose que je ferais serait de récupérer les valeurs 16 bits d'origine telles que lues sur l'accéléromètre. (c.-à-d., si j'ai jeté négligemment les données originales et qu'il ne me reste que des nombres en unités de "g" qui ont été calculés en soustrayant un décalage et multipliés par un facteur d'échelle incorrect, je copierais les données collectées dans un feuille de calcul et divisez par ce même facteur d'échelle (incorrect), puis ajoutez ce décalage pour essayer de récupérer quelque chose proche des valeurs d'origine).
Ensuite, je représenterais graphiquement les données et voir si cela ressemble plus à "saturation", "linéaire" ou "roll-over" (comme décrit ci-dessous).
La fiche technique est incroyablement vague quant à ce qui se passe lorsque le capteur subit une accélération supérieure à 2 g.
diatribe tangentielle
Est-ce que je vous ai dit à quel point cela m'ennuie quand les rédacteurs techniques insistent pour écrire à la voix passive? Lorsque l'auteur utilise la voix passive dans la phrase que vous avez citée,
"Toutes les données, à l'exception de celles de la plage ± 16 g, doivent être écrêtées pour éviter le retournement." (page 17)
Je ne peux pas dire exactement qui est censé faire cette coupure.
Beaucoup de gens recommandent d'utiliser la voix active . Lorsque je suis ces recommandations, mon texte est généralement plus clair quant à qui fait quoi. N'est-ce pas mieux quand j'écris des choses qui sont plus faciles à comprendre , plutôt que d'utiliser un style que les gens ont été trompés en pensant des sons "plus professionnels" ou "plus savants"?
écrêtage automatique
Ma meilleure supposition est que l'accéléromètre effectue automatiquement cet écrêtage.
saturation : si vous voyez l'accélération s'accélérer à travers des valeurs plausibles, puis rester mystérieusement coincé sur un plateau, saturant à ou près de + 2g, alors l'accéléromètre a "utilement" coupé les données pour vous. Après l'écrêtage, la valeur "top" n'indique plus "une accélération très proche de + 2g", mais indique désormais "une accélération d'au moins 2g, et peut-être beaucoup plus - il n'y a aucun moyen de le savoir".
Parce qu'il était en mode 10 bits justifié à droite, lorsque j'interprète ces valeurs 16 bits comme des entiers signés normaux 16 bits, je m'attends à voir des valeurs allant de
- 0x01FF = +511, indiquant plus de 1,992 g. Peut-être beaucoup, beaucoup plus.
- 0x01FE = +510, indiquant 510/256 g ~ = 1,992 g
- 0x01FD = +509, indiquant 510/256 g ~ = 1,988 g
- ...
- 0x0001 = +1, indiquant 1/256 g = 0,0039 g
- 0x0000 = 0, indiquant 0 g
- 0xFFFF = -1, indiquant -1/256 g = 0,0039
- ...
- 0xFE02 = -510, indiquant -510/256 = -1,992 g
- 0xFE01 = -511, indiquant -511/256 = -1,996 g
- 0xFE00 = -512, indiquant quelque chose de plus négatif -1,996 g. Peut-être bien, beaucoup plus négatif.
(Oui, je sais que 4 décimales de précision ne sont pas garanties pour ce capteur). (J'ai vu certains appareils saturer à un autre moment, comme -511 ou -510. Je peux généralement regarder les données et déterminer le point de saturation réel).
Vous pouvez récupérer des données utiles à partir de cet ensemble de données tronquées. Vous pouvez l'utiliser pour mesurer, par exemple, combien de millisecondes l'accélération était d'au moins 1,5 g. Hélas, lorsque vous voyez les plateaux dans ce type de jeu de données, il est impossible de mesurer l'accélération maximale ou l'impulsion totale - le mieux que vous puissiez faire est de dire: «Eh bien, nous savons que l'accélération maximale est d' au moins 2 g et probablement plus ", et calculons" eh bien, nous calculons que l'impulsion totale est au moins (quelque chose) newton * seconde ".
alternatives
Il devrait être possible de déterminer si l'accéléromètre écrête ou non à partir des données. (J'ai décrit la "saturation", "linéaire" et "roll-over" en termes de montée en puissance - avec certains ensembles de données, il peut être plus clair de regarder la rampe de descente à la place).
linéaire : si vous voyez l'accélération s'accélérer à travers des valeurs plausibles, puis continuer à augmenter vers des valeurs plus élevées (valeurs supérieures à 512, ou plus négatives que -512), alors vous avez de la chance - l'accéléromètre n'a pas fait d'écrêtage, et vous disposez de données valables sur toute la gamme.
roll-over : si vous voyez l'accélération s'accélérer à travers des valeurs plausibles, et juste avant qu'elle n'atteigne +2 g, elle saute instantanément à une valeur non réaliste physiquement près de -2 g et continue ensuite à augmenter - peut-être par zéro, puis approchant à nouveau + 2g, et sautant à nouveau près de -2 g - alors vous avez un bouclage par retournement. Si vous êtes chanceux, les valeurs changent de façon extrêmement fluide, ce qui permet de détecter chaque retournement et de "déballer" ces valeurs pour récupérer la vraie force g.
ps: n'hésitez pas à éditer Open Circuits: Rocket Computer .