Dossier : Ma centrale inertielle
Ce dossier regroupe une série d'articles sur l'avancement de la construction de ma centrale inertielle. Ces articles regroupent mes réflexions, essais, résultats et algorithmes.
Acte I : Les premiers tests sur les capteurs
- Scène 1 : Réception des premiers capteurs
Bonjour à tous,
Je poste mon commentaire en espérant que je n’arrive pas après la bataille. Je commencerai par l’accéléromètre, il faut impérativement l’alimenter par une tension très stable (pas l’alimention générale du system). Il faut choisir un modele qui possède sa propre alim (Stabilisée de 3,3V par exemple). Cela fait on récupère la sortie du convertisseur pour chaque axe de l’accéléromètre (12Bit => entre 0 …et 4095).
Cela nous donne pour un axe (par ex. X) -> ValeurAxeX . Vref . / 4095 (soit au hasard une valeur saisie de 2172.) on aura 2172 . 3,3 . / 4095 = 1,75V
La tension pour la valeur 0G sera de Vref / 2 soit 3.3/2 = 1,65 -> 1,75 – 1,65 = 0,10V
La « datasheet » nous donne la sensibilité du capteur en V/g par ex : 0,4785V/g
Donc pour terminer nous aurons la valeur G pour l’axe : 0,10 / 0,4785 = 0,208g
Maintenant pour obtenir l’inclinaison de notre système il faut faire un peut de géometrie. En admettant que nous avons obtenu par le calcul precedent les resultats suivant pour les 3 axes
Acc[X] = 0,208g ; Acc[Y] =0,792g ; Acc[Z] =0,335g
Acc[system] = SQRT( Acc[X]^2 + Acc[Y]^2 + Acc[Z]^2) (Pythagore en 3D)
Cos(Angle[projXsuraxeX] = (Acc[x] / Acc[System])
Cos(Angle[projYsuraxeY] = (Acc[Z]/ Acc[system])
Cos(Angle[projZsuraxeZ] = (Acc[Z]/ Acc[system]
Avec Acc(systeme) = SQRT( Accx^2 + Accy^2 + Accz^2)
Ce qui donne
AngleX = arcos(Acc[X]/Acc[system])
AngleY = arcos(Acc[Y]/Acc[system])
AngleZ = arcos(Acc[Z]/Acc[system])
Pour le gyroscope (on utilisera les rotations autour des axes X et Y), c’est le même mode de calcul soit par exemple le résultat sur la sortie du convertisseur (12Bit => entre 0 …et 4095) du gyroscope (rotation autour de X) on obtient 1950 ce qui nous donne => 1950 . 3,3 / 4095 = 1,571V
La « datasheet » nous donne pour 0 Variations (Vzerorate) -> 1,23V et La sensibilité du gyroscope -> 0,002V/deg/sec
Donc nous avons : vitesse de rotation autour de l’axe X ((1950 . 3,3/4095)-1,23)/0,002= 170 deg/sec
En conclusion la régulation de vitesse des moteurs pourra se faire en utilisant l’accéléromètre qui nous donne l’inclinaison du système. Le système devra ramener l’ensemble à l’équilibre (Inclinaison Zero) et l’on fera une correction par le gyroscope pour "amortir" un peu les réactions!!!. (Certains utilisent des filtres ) En effet la gravitation terrestre induit une erreur sur les axes de l’accéléromètre.(On est pas dans l'espace) Enfin pour terminer il faudra penser à recaler le gyroscope à intervalle régulier car ils ont la fâcheuse idée de beaucoup dériver.
Bonjour, je vous rassure, vous n'arrivez pas après la bataille ! J'ai mis le projet en stand-by suite à un problème de communication I2C. Je le reprendrais quand j'aurais un peu plus de temps.
En tout cas, merci pour cette explication. Votre méthode est valable (comme vous le dites vous même) pour un système SANS accélération et en négligeant le biais du gyroscope. Dans ce cas, je compte commencer par tester cette méthode là : http://www.ferdinandpiette.com/blog/2011/05/le-filtre-de-kalman-etendu-principe-et-exemple/ qui me permettra de prendre en compte et de calculer le biais.
Ensuite, j'ai plusieurs autres méthodes en tête qui me permettront de prendre en compte cette accélération.
Ferdinand Piette