contrails-moon
Contrails !
  1. Accueil
  2. Instruments
  3. Projet de PA

Contrails ! Pilote Automatique à capteurs MEMS

 

Trappe  bagage MCR 4S
Photo CSY

 

Projet de pilote automatique

Gabriel Consigny nous fait part de son remarquable projet de pilote automatique (PA) sur son MCR 01 à moteur 912.

Sans être spécialiste, il a lui-même conçu et réalisé les circuits à composants montés en surface et les logiciels de commande.

 

L'article de Gabriel Consigny

Le point au 01/01/2008

Les microcapteurs MEMS maintenant disponibles chez de nombreux fabricants permettent la réalisation d'avionique de type " glass cockpit " et de pilotes automatiques légers et performants.

L'installation de tels systèmes est donc possible sur un avion léger ou un ULM, mais le coût des modèles disponibles à la vente se chiffre tout de même en milliers d'Euros.

J'ai personnellement choisi de tenter une réalisation personnelle, ce que j'ai entrepris fin 2005, dans le but de :

- me former à l'électronique numérique
- satisfaire ma curiosité pour les systèmes de régulation

L'exposé qui suit n'est donc en aucun cas celui d'un expert en la matière, mais au contraire d'un débutant souhaitant expérimenter pour comprendre, même si le succès final est aléatoire.

J'ai été grandement aidé par les conseils de Claude GUTH, créateur d'Open Avionics, et Jérôme DELAMARE, enseignant à l'IUT et l'Ecole d'Ingénieurs de Grenoble.

 

Version 1 : Contrôle d'altitude

Principe

capteurs pression
Photo CSY

Le module est équipé de deux capteurs Freescale : un capteur de pression absolue permettant le suivi de l'altitude, et un capteur de pression différentielle en vue de la mesure de la vitesse air, ce dernier n'étant pas exploité à ce jour (inutile pour le PA).

Ces capteurs sont d'une mise en œuvre facile car l'électronique intégrée sort directement un signal analogique 0 ~ 5V proportionnel à la pression mesurée.

 

Tout le reste est confié à un seul circuit intégré MAX 1463 qui présente l'avantage de cumuler les fonctionnalités suivantes :

Dessin sur Kikad
Photo CSY
Deux entrées analogiques
Amplification et offset programmables des signaux avant conversion
Conversion Analogique/Numérique de précision programmable jusqu'à 16 bits
Module de calcul permettant la mise en œuvre des algorithmes de régulation
Plusieurs sorties possibles, en tout ou rien ou PWM (en français : MLI = modulation de largeur d'impulsion)
 

Hard

Ensemble PA Version 1
Photo CSY
Le "hard" se résume donc à un petit CI double face (dessiné sur "Kikad" et gravé maison), portant les deux capteurs, le MAX et une alimentation 5V stabilisée, plus les composants passifs (résistances, condensateurs et connecteurs); le tout enfermé dans un coffret alu portant un bouton-poussoir en guise d'"interface utilisateur".

La commande de profondeur elle-même utilise le trim électrique de profondeur commandé par l'intermédiaire de deux relais, le tout étant en place d'origine sur le MCR-01. Le module PA agit donc par impulsions "Trim Up" ou "Trim Down", de durée variable, comme le ferait manuellement le pilote en appuyant sur les boutons correspondants.

Un switch inverseur "Manu - Auto" permet de sélectionner le fonctionnement souhaité du trim. Il permet aussi de désactiver facilement le PA en cas de fonctionnement inapproprié de ce dernier.

 
Interface de puissance
Photo CSY

Les signaux de sortie du MAX n'étant pas assez puissants pour actionner les relais de trim, une petite interface à transistors a été intercalée entre les deux, cette interface portant deux LEDs qui permettent de visualiser les signaux Trim Up et Trim Down.

 

Principe de fonctionnement

L'"interface utilisateur" ultra simple (bouton-poussoir) permet uniquement de fixer la consigne d'altitude. Le trim est donc en position "manu" pendant la phase de montée. Une fois atteinte l'altitude (ou plus exactement l'altitude-pression ou niveau de vol) souhaitée, le pilote appuie sur le bouton-poussoir pour donner la consigne, et bascule le switch sur "Auto".

Logiciel

MAX 1463 n'est pas un vrai microcontrôleur, mais plutôt un circuit spécialisé dans le traitement de signaux analogiques issus de capteurs. Ses possibilités de calcul et ses circuits de sortie permettent cependant de se passer de tout autre composant, donnant un circuit très simple.

La programmation s'effectue en Assembleur (langage machine) spécifique à ce composant, ne disposant que de 16 instructions. Le programme est tapé sur ordinateur, transformé en code hexadécimal, puis transféré dans la mémoire "flash" du MAX à travers une petite interface.

S'il est assez facile d'apprendre la fonction de ces 16 instructions, il est moins aisé de programmer les calculs nécessaires à l'aide de ces seules instructions. La plus grande partie du temps de développement a donc été consacrée à la programmation.

Principe du calcul :

L'idée de base est de programmer un régulateur PID (à action Proportionnelle, Intégrale et Dérivée) appliquant la formule :

X = Kp (P−Pc) + Ki ∫(P−Pc)dt + Kd [d(P−Pc)/dt]

Avec :

X : position du chariot de trim sur la vis sans fin
P−Pc : erreur d'altitude (différence de pression absolue : mesure − consigne)
∫(P−Pc)dt : somme de zéro à t de l'erreur ci-dessus
d(P−Pc)/dt : dérivée de l'erreur ci-dessus
Kp, Ki et Kd : constantes permettant de régler l'ampleur des actions proportionnelle, intégrales et dérivée, respectivement. Ces constantes dépendent aussi des unités employées.

NB1 : X est une position linéaire, alors que le MAX ne calcule et ne fournit que des temps d'impulsion (Δt). Il y a donc une autre constante Vc (vitesse du chariot) définie par Vc = ΔX/Δt ; mais cette dernière est intégrée dans les coefficients K, ce qui amène à calculer les temps d'impulsions par une formule de la forme :

Δt = Kp (P−Pc) + Ki ∫(P−Pc)dt + Kd [d(P−Pc)/dt]

NB2 : il est possible d'envisager la lecture de la position du chariot de trim à l'aide d'un potentiomètre linéaire par exemple, mais par souci de simplicité, mon système ne possède pas de tel dispositif. Le régulateur n'a donc aucun retour d'information sur la position du chariot de trim.

Il fonctionne en considérant que la position de départ est la bonne (trim réglé en manuel par le pilote), et qu'il suffit d'effectuer les corrections nécessaires par des impulsions de durée Δt, le signe de ce dernier imposant le choix "Trim Up" ou "Trim Down".

On constate que même si la position initiale du trim n'était pas la bonne (pour maintenir l'altitude), l'action intégrale se charge de remettre les choses en ordre en trouvant automatiquement la bonne position.

De plus, cette même action intégrale corrige automatiquement toute dérive due au système, par exemple celle résultant, sur le trim d'origine du MCR (modifié, paraît-il sur les modèles plus récents) du fait que les élastiques tirant sur le chariot d'un seul côté, la vitesse de déplacement du chariot n'est pas la même pour les impulsions UP ou DOWN.

Sur le plan théorique, on notera que ceci peut amener à la saturation du registre mémoire affecté à la fonction Intégrale, mais ceci n'a jamais été constaté en vol (même sur plusieurs heures).

Détermination des coefficients

La principale difficulté, dans un régulateur PID, est de déterminer les bons coefficients Kp, Ki et Kd qui vont permettre de stabiliser le système; en l'occurrence l'avion à l'altitude souhaitée.

Les cours de régulation regorgent de savantes démonstrations mettant en jeu les notions de phase, nombres imaginaires, fonction de transfert, et autres friandises que j'ai (provisoirement ?) renoncé de comprendre.

La deuxième idée qui vient à l'esprit est d'essayer en tâtonnant diverses combinaisons, en souhaitant aboutir finalement à la bonne (ou s'en approcher). Malheureusement, il y a un gros problème : mon module ne comporte pas de réglage des coefficients, ceux-ci étant intégrés dans le logiciel.

Pour changer le coefficients, il faut donc atterrir, ramener le module à la maison, effacer le programme en mémoire, modifier les coeffs dans le code source, réintroduire le nouveau programme en mémoire, retourner au terrain, tout rebrancher et…constater qu'il est déjà trop tard pour se remettre en vol ce jour-là !

Après quelques essais pittoresques d'oscillations permanentes en vol, plus ou moins stables mais plus souvent divergentes, j'ai décidé de mettre en œuvre l'idée N°3 :

Modélisation du vol

modélisation
Photo CSY

Le vol du MCR (dans le plan vertical seulement) a été modélisé en appliquant des notions simples de mécanique et d'aérodynamique ; ceci sur un simple tableur (Excel).

On applique alors une perturbation initiale à ce modèle virtuel. Par exemple : au temps t = 0 l'avion est "lancé" en vol horizontal à l'altitude A mais à une vitesse inférieure à sa vitesse de sustentation à l'incidence de croisière. Il va donc descendre, reprendre de la vitesse, et subir une série d'oscillations dans le plan vertical.

Le constat que la période de ces oscillations (environs 35 secondes) était très proche de mes mesures en vol (autour de 30 secondes) m'a convaincu que ce modèle était "acceptablement" proche de la réalité.

 
comparaison régulation
Photo CSY

L'étape suivante a donc été d'introduire mon algorithme de régulation PID dans ce modèle mathématique. Il était alors possible d'étudier la réponse de l'ensemble à des perturbations extérieures (comme ci-dessus, ou bien entrée dans une zone d'ascendance ou de descendance, etc…) en essayant diverses combinaisons de coefficients Kp, Ki et Kd ; mais ceci tranquillement installé à la maison devant mon ordinateur.

Les valeurs de coefficients ayant permis une bonne stabilisation ont ensuite été introduites dans le logiciel, et en-avant pour un Nième essai en vol.

 

Fonctionnement en vol

Et là, à ma très grande surprise, le système a fonctionné "tip-top" du premier coup ! Je n'en revenais pas de voir l'aiguille de l'alti scotchée sur l'altitude de consigne, tout en observant les signaux incessants Up et Down matérialisés par les LEDs.

Le système revenait même à l'altitude de consigne sans oscillation lorsque je tentais une manœuvre de diversion, et trouvait aussi le bon réglage pour des virages à altitude constante.

Dans la turbulence, il y avait bien-sûr de petites variations d'altitude (en gros : +/− 20 ft à +/− 40 ft en cas de turbulence plus forte), mais avec re-stabilisation rapide ensuite.

Conclusions sur la Version 1

1- Le maintien automatique d'altitude est très pratique et reposant en croisière, l'altitude étant le seul paramètre qu'on ne visualise pas en regardant dehors, ce qui impose une consultation permanente du tableau de bord, et les corrections correspondantes.

A fortiori en zone contrôlée, avec niveau de vol imposé, on a l'esprit plus libre pour d'autres tâches si l'altitude est maintenue automatiquement.

2- La détermination des coefficients d'un régulateur PID reste malgré tout un problème, surtout dans le cas (voir Version 2) où on ne sait pas modéliser le système. Il semble donc important de pouvoir modifier ces coefficients en vol.

3- Le succès de la version 1 était en fait un peu fragile, car il s'est avéré par la suite que le remplacement des élastiques de trim par d'autres plus raides a modifié le comportement jusqu'à le rendre moins stable dans certaines conditions (alors même que la dureté de ces élastiques n'entrait pas en jeu dans le modèle mathématique utilisé).

Ceci plaide également pour la possibilité de modifier en vol les coefficients du PID, de façon à pouvoir s'adapter à ces variations ou à d'autres (variation de masse totale, etc.).

4- Les deux objectifs énoncés au début de cet article (et parmi lesquels ne figurait même pas l'obtention d'un système fonctionnel !) ont été atteints ; l'expérience s'avérait enrichissante, ce qui m'a motivé pour essayer d'aller un peu plus loin.

 

 

Version 2 : Contrôle d'altitude et de roulis

Cahier des charges

boitier PA version 2
Photo CSY

Fort de l'expérience précédente, j'ai décidé fin 2006 de m'attaquer au contrôle simultané de deux axes : tangage (comme ci-dessus) et roulis.

Toujours dans l'idée d'utiliser des capteurs MEMS, et d'élaborer un système autonome ne faisant pas appel à des données extérieures (comme par exemple celles d'un GPS), il me fallait 3 capteurs : Pression absolue (Altitude), Gyromètre (vitesse de rotation sur l'axe de roulis) et Accéléromètre 1 axe (recalage du Gyro).

 
circuit imprimé
Photo CSY

Par ailleurs, il fallait pouvoir régler facilement les coefficients Kp, Ki et Kd de deux régulateurs indépendants, soit 6 potentiomètres plus un pour le réglage du zéro de roulis, et enfin trois boutons-poussoirs étaient nécessaires (Reset, consigne d'altitude et bascule entre le mode automatique et le mode "trim" de roulis) ; sans compter la gestion des deux boutons-poussoirs de trim d'ailerons sur le manche.

Pour les sorties, il fallait deux sorties tout ou rien pour le tangage (signaux Up et Down comme dans la version 1), une sortie (à déterminer en fonction de l'actionneur choisi) pour le roulis, et deux LEDs pour indiquer les modes de fonctionnement en cours.

En comptant bien, on arrive à 10 entrées analogiques et 5 contacts à gérer ; plus 3 sorties vers les actionneurs et deux vers de LEDs ; soit en tout 20 entrées-sorties.

La commande de roulis doit être de type trim avec élastiques de rappel (comme dans le cas du trim de profondeur) laissant par sécurité au pilote la possibilité d'agir sur les ailerons même contre l'automatisme ou en cas de blocage de l'actionneur en butée par exemple.

Choix du matériel

Cette fois-ci, il fallait au cœur du système un vrai microcontrôleur, seul capable de gérer tant d'entrées-sorties et d'avoir la puissance et la vitesse de calcul nécessaire à ce projet.

Mon choix s'est porté sur le PIC 2455 de Microchip.

Langage de programmation : le PIC peut être programmé en C ou en Assembleur. J'ai dans un premier temps choisi ce dernier pour sa vitesse d'exécution, s'agissant d'une application temps réel où le temps de réaction (principalement pour le contrôle du roulis) est essentiel.

servo
Photo CSY

Pour l'actionneur, j'ai choisi un servomoteur de modélisme parmi les plus puissants, destiné au modélisme naval. Il y avait des doutes (non confirmés) sur sa fiabilité et sa puissance, mais c'était le plus simple à mettre en œuvre: commandé par signal PWM ; malgré l'inconvénient de nécessiter une alimentation spéciale en 5 volts, de puissance suffisante.

 

Réalisation du hard

circuit imprimé en deux pièces
Photo CSY

Même principe que pour la Version 1 : circuit imprimé maison en deux parties superposées, plus deux petites platines pour le Gyro et l'Accéléro (photos 3 et 4) ; le tout enfermé dans un boitier alu un peu plus gros que le précédent (Photo 5), avec accès en face supérieure aux 7 potentiomètres de réglage par tournevis, 3 boutons-poussoirs et 2 LEDs (Photo 6).

 
Version 2 dans son boitier
Photo CSY
 
Chaine roulis
Photo CSY
La partie actionneur de profondeur utilise les mêmes composants que la Version 1, y compris l'interface de puissance de commande des relais, avec ses deux LEDs indicatrices. Celle de roulis comporte le Servo plus son alimentation basée sur un régulateur 5V/3A et un gros condensateur de filtrage (Photo 7).
 
 

Principe de fonctionnement

Pour l'altitude, il est identique à celui de la version 1 : un bouton-poussoir permet de fixer la consigne d'altitude ; et le switch Auto-Manu permet de choisir le mode souhaité.

Pour le roulis, il y a deux modes de fonctionnement, commutés par bouton-poussoir : le mode Trim et le mode Auto. En mode Trim, seul sont actifs le potentiomètre et les boutons de trim du manche permettant d'ajuster le zéro du servo pour obtenir une inclinaison nulle. En mode Auto, le système contrôle le roulis, le potentiomètre de zéro restant actif pour ajuster l'inclinaison nulle, mais les boutons du manche sont désactivés.

Logiciel

Là encore, c'est la partie qui a demandé le plus gros travail. Il a d'abord fallu apprendre le langage Assembleur, puis les nombreuses fonctionnalités et spécificités du PIC (configuration, Timers, interrupts, conversion analogique/digital, etc…).

En gros, le logiciel est divisé en deux parties :

a) un interrupt prioritaire déclenché par Timer toutes les millisecondes pour :

Lire le signal du Gyro et l'intégrer pour obtenir l'angle de roulis instantané
Lire le signal de l'accéléromètre
Effectuer la compensation de dérive du Gyro en fonction du signal d'accéléro
Calculer l'algorithme de PID "roulis" et en déduire la variable de calibration du PWM correspondant

b) le programme principal (non prioritaire) qui effectue le reste des tâches, à savoir :

Lecture de position des 7 potentiomètres
Détection d'activation des trois boutons-poussoirs et actions correspondantes
Lecture et filtrage numérique du signal du capteur de pression
Calcul de l'algorithme de PID "tangage" et de la durée de signal Trim Up ou Trim Down correspondant ; et envoi toutes les secondes des signaux correspondants
Gestion des deux modes de fonctionnement "roulis" : Trim et Auto

Détermination des coefficients

Pour l'altitude, on a gardé les mêmes coefficients que sur la Version 1 en milieu de course des potentiomètres, mais ces derniers permettent de les augmenter ou de les diminuer.

Pour le roulis, il n'a pas été fait de simulation, l'idée étant d'essayer directement en vol, maintenant que les coefficients Kp, Ki et Kd sont modifiables par potentiomètre.

Fonctionnement

À ce jour, les essais en vol du module V2 n'ont pas donné satisfaction.

Le module qui semble fonctionner correctement au sol, ne régule pas correctement en vol, ni pour l'altitude, ni pour le roulis.

Altitude : Le principe et les coefficients étant les mêmes que pour la V1, on peut se demander pourquoi ce module V2 ne fonctionne pas bien en maintien d'altitude.

En fait, la principale différence réside dans la conversion analogique/digital, qui se fait sur 16 bits dans le cas V1, et seulement 10 bits dans V2.

Il en résulte d'après mes mesures que la précision de lecture d'altitude (hauteur déterminant un incrément de 1 unité après conversion A/D) est de 15 cm pour V1 alors qu'elle est de 9,5 m dans le cas de V2 (le rapport étant de 216/210 = 26 = 64).

L'impression en vol est d'ailleurs que le régulateur agit fort mais trop tard, ce qui peut s'expliquer par le fait qu'il doit attendre que l'erreur d'altitude soit de 9,5 m pour la sentir, et là, sa réaction est trop forte.

Des essais en jouant sur les potentiomètres de réglage des coefficients K n'ont pas non plus donné satisfaction.

Roulis

Le régulateur agit pour l'instant trop mollement, et n'empêche pas l'avion de partir en roulis à gauche ou à droite.

Les causes potentielles identifiées sont :

- Trop grande mollesse des ressorts de rappel de manche
- Réglage des actions (en particulier proportionnelle) insuffisantes
- Dérive excessive du Gyromètre
- Eventuelle influence, là aussi, du manque de précision de la conversion A/D

 

Suite envisagée sur la Version 2

Suite aux conclusions ci-dessus, j'ai décidé de changer de langage et me mettre au C.

Un début de réécriture de mon programme en C a montré une bien meilleure stabilité du gyromètre; ceci étant principalement dû au fait que le C me permet de manipuler des variables en virgule flottante, alors qu'en Assembleur je ne manipulais que des entiers.

La présence de bruit sur les capteurs associée à un filtrage numérique par calcul de moyennes en virgule flottante permet de gagner artificiellement de la précision sur la conversion A/D, ce qui pourrait résoudre le problème de tenue d'altitude.

J'envisage donc, dans un premier temps la réécriture complète du logiciel en C, suivie d'une nouvelle campagne d'essais.

Si ceci ne donne pas satisfaction, il faudra probablement modifier le hard pour intercaler un convertisseur A/D 16 bits entre le capteur de pression et le microcontrôleur, et décider si cela est nécessaire aussi pour le Gyro.

A suivre…

Gabriel CONSIGNY

 

Image courriel  Envoyer un message

 

Precedente   Précédente      
© 2005-2017 Gilles Thesee
Dernière modification le
01-01-2014 à 13:45:14

HTML-Kit Button