AvrIO  1.4.5
Bibliothèque C modulaire pour ATMEL AVR
Gyroscope 3 axes

Description détaillée

Ce module permet de gérer un gyroscope 3 axes.
-----— Convention des axes utilisée -----—
La convention utilisée est celle des aéronefs :

En ce qui converne l'accélaration, la convention est que tout axe aligné sur la gravité terrestre vers le bas aura une valeur de +1g. Ainsi les accélérations en g seront :

Graphe de collaboration de Gyroscope 3 axes:

Fonctions

int iGyro3dAttitude (float *xAtt, const float *xRate, ticks_t xRateTime, float fA)
 Calcul des angles à partir des vitesses angulaires. Plus de détails...
 
int iGyro3dCalibrate (uint16_t usNumOfSamples)
 Calibration du gyro. Plus de détails...
 
int iGyro3dInit (void)
 Initialise le module Gyro. Plus de détails...
 
int iGyro3dRead (float *xRate)
 Lecture des vitesses angulaires d'un Gyro. Plus de détails...
 
int iGyro3dReadRaw (int *xRate)
 Lecture des vitesses angulaires brutes d'un Gyro. Plus de détails...
 
void vGyro3dAttidudeClear (float *xAtt)
 Réinitialise le calcul d'attitude. Plus de détails...
 
void vGyro3dSaveZero (void)
 Sauvegarde du calage du zéro courant en EEPROM.
 
void vGyro3dSetZero (const int *xZero)
 Modification du calage du zéro. Plus de détails...
 
void vGyro3dZero (int *xZero)
 Lecture du calage du zéro. Plus de détails...
 

Macros

#define GYRO3D_NOT_CALIBRATED   (1)
 Indique que le gyroscope n'a pas été calibré
 

Documentation des fonctions

int iGyro3dAttitude ( float *  xAtt,
const float *  xRate,
ticks_t  xRateTime,
float  fA 
)

Calcul des angles à partir des vitesses angulaires.

Requiert le module task et donc un timer kernel (AVRIO_TASK_ENABLE).

Paramètres
[in]xRatePointeur sur le vecteur dans lequel sont stockées les vitesses angulaires (en g)
[in,out]xAttPointeur sur le vecteur dans lequel seront stockées les angles (x: roulis, y: piqué ou tangage, z: lacet).
fAlphaLa composante z ( $\alpha$) de ce vecteur permet de passer à la fonction le coefficient du filtre numérique passe-bas intégré à la fonction:

\[y_{t} = \alpha \cdot x_{t} - (1 - \alpha) \cdot y_{t - 1}\]

  • $y_{t}$ sortie du filtre (la vitesse angulaire filtrée)
  • $x_{t}$ entrée du filtre (la vitesse angulaire mesurée)
  • $y_{t - 1}$ sortie du filtre au calcul précédent
  • $\alpha$ coefficient du filtre. Plus la valeur de ce paramètre est faible est plus le filtrage sera important.
    La valeur doit être dans l'intervalle ]0 ; 1[ car 1 correspond à une absence de filtrage ( $y_{t} = x_{t}$) et 0 à un filtrage complet du signal d'entrée. En conséquence, les valeurs suivantes de $\alpha$ seront interprétées de la façon suivante :
    • $\alpha=1$ : pas de filtrage
    • $\alpha\in]0,1[$ : filtrage
Renvoie
0 en cas de succès, négatif en cas d'erreur
int iGyro3dCalibrate ( uint16_t  usNumOfSamples)

Calibration du gyro.

Calcul la valeur du zéro par moyennage d'un certains nombre de mesures et stocke le résultat en EEPROM

Paramètres
usNumOfSamplesNombre d'échantillons de mesure utilisés pour le calcul
Renvoie
0 en cas de succès, une valeur négative sur erreur.
int iGyro3dInit ( void  )

Initialise le module Gyro.

Le circuit est initialisé et la valeur du zéro est chargée de l'EEPROM. Si la valeur stockée en EEPROM est corrompue, la valeur du zéro est remise à zéro et stockée en EEPROM et la fonction retourne GYRO3D_NOT_CALIBRATED.

Renvoie
0 en cas de succès, GYRO3D_NOT_CALIBRATED si une calibration est nécessaire, une valeur négative sur erreur.
int iGyro3dRead ( float *  xRate)

Lecture des vitesses angulaires d'un Gyro.

Paramètres
[out]xRatePointeur sur le vecteur dans lequel seront stockées les vitesses d'angle (en °/s)
Renvoie
0 en cas de succès, une valeur négative sur erreur.
int iGyro3dReadRaw ( int *  xRate)

Lecture des vitesses angulaires brutes d'un Gyro.

Paramètres
[out]xRatePointeur sur le vecteur dans lequel seront stockées les vitesses d'angle en LSB
Renvoie
0 en cas de succès, une valeur négative sur erreur.
void vGyro3dAttidudeClear ( float *  xAtt)

Réinitialise le calcul d'attitude.

Réinitialise le vecteur passé en arguments et les filtres passe-bas et d'intégration de la fonction iGyro3dAttitude()

Paramètres
[in,out]xAttPointeur sur le vecteur dans lequel seront stockées les angles (x: roulis, y: piqué ou tangage, z: lacet).
void vGyro3dSetZero ( const int *  xZero)

Modification du calage du zéro.

La valeur est aussu stockée en EEPROM afin d'être rechargée lors de l'initialisation.

Paramètres
[in]xZeroPointeur sur le vecteur de zéro
void vGyro3dZero ( int *  xZero)

Lecture du calage du zéro.

Paramètres
[out]xZeroPointeur sur le vecteur dans lequel sont stockées les vitesses calculées lors du calibrage (en LSB)