Dans cette partie, je montre comment lire et calculer les
largeurs des impulsions PWM venant du récepteur RF afin qu'ils puissent
être utilisés pour contrôler le mouvement du quadrotor, et
pour mieux comprendre le fonctionnement du contrôleur de vol, j'aime
montrer au début les principes de base pour les signaux du
récepteur.
Les ESC sont contrôlés par des trains
d'impulsions PWM variant de 1000ìs à 2000ìs avec une
amplitude de 5v, c'est à dire que la position d'arrêt de l'ESC est
généralement atteinte avec une impulsion de 1000ìs et une
accélération maximale est atteinte avec une impulsion de
2000ìs, la longueur de l'impulsion change lorsque nous changeons la
position du joystick sur l'émetteur RC Figure 3.23. Les
systèmes multicopters sont très instables et la stabilité
est obtenue par d'énormes corrections par seconde, par exemple le
contrôleur de vol de ce projet fait 250 correction / seconde ceci est
également connu comme le taux de rafraîchissement ou la
fréquence du contrôleur, en bref cela signifie que les quatres ESC
sont corrigés tous les 4ms (la fréquence des signaux PWM à
fournir au ESCs par le contrôleur de vol est de 250 Hz).
Figure 3.23 : Simulation des pulsations PWM de
fréquence 50 Hz pour deux canaux du récepteur RF.
45
Chapitre III Conception et mise en oeuvre du
fonctionnement
46
Dans notre cas, la fréquence des signaux PWM du
récepteur RF (50 Hz) est cinq fois plus faible que la fréquence
du contrôleur de vol (250 Hz), cela signifie que le quadrotor ne peut pas
attendre les signaux du récepteur lors du vol.
Malgré tout cela, le processeur de l'Arduino Uno
"ATmega328p" nous donne des outils pour faire résoudre à ce
problème en utilisant les interruptions de changement d'état de
broche «Pin Change Interrupt Register PCI0». Ça signifie que
nous pouvons interrompre le programme en cours pour effectuer une tâche
spéciale lorsque l'état logique de la broche numérique
change, après cette interruption le processeur continue
l'exécution du programme d'une façon normal. Cependant cette
méthode nécessite moins de boucles CPU donc il faut garder la
routine d'interruption aussi courte que possible, sinon on va gâcher
l'exécution du programme en cours.
L'interruption de changement de broche « PCI0 » se
déclenchera si l'une des broches PCINT7 à PCINT0 se bascule
d'état, les bits (PCINT0, PCINT1, PCINT2 et PCINT3) qui correspondent au
registre d'interruption « PCI0 » se réfèrent
respectivement aux broches numériques (8, 9, 10 et 11) de l'Arduino
Figure 3.24, selon le schéma du contrôleur de vol
Figure 3.21 les entrées du récepteur sont
connectées aux broches numériques 8 à 11.
Figure 3.24 : Diagramme des broches de
l'ATmega328p.
Dans le programme du contrôleur de vol, on peut
créer des sous-programmes d'interruption qui serait toujours
exécutées chaque fois que les broches numériques 8
à 11 changent d'état logique, ceci consiste à mesurer le
temps entre les fronts montants et descendants des impulsions PWM venant du
récepteur. L'organigramme suivant explique une partie du sous-programme
de l'interruption pour lire un seul canal « canal 1 » du
récepteur, la même partie se répète pour les autres
canaux sauf que les différents canaux du récepteur sont
liées à des différentes broches du registre PORTB.
Chapitre III Conception et mise en oeuvre du
fonctionnement
Voir si on a un front Non Voir si on a un front
Montant Descendant
Précédente_canal 1=0
La même routine se répète pour les autres
canaux {canal 2 (PINB1), canal 3 (PINB2) et canal 4 (PINB3)}, le sous-programme
de l'interruption est appelé chaque fois dans le programme principal du
contrôleur de vol si l'une des entrées 8, 9, 10 ou 11 change
d'état. Les variables d'entrées du
Affecter la variable Time 1 dans la variable Temp actuelle
(Time 1 =Temp actuelle)
Se souvenir de l'état actuel du variable
(Précédente_canal 1=1)
Oui
Le bit 0 du
PORTB
(PINB0=1)?
Oui
Non
Calculer la longueur de l'impulsion du canal 1 Reciver_input
1 = Temp_actuelle - Time1
Se souvenir de l'état actuel du variable
(Précédente_canal 1=0)
Précédente_canal 1=1
L'entrée PINB0 se Bascule de 1 à 0
Oui
Non
47
Sous-programme d'interruption :
Activer le registre de L'interruption de changement de broche
« PCI0 »
Affecter le compteur us dans la variable Temp actuelle = micros
( );
Chapitre III Conception et mise en oeuvre du
fonctionnement
48
récepteur (Reciver_input 1, 2 et 4) de la routine
d'interruption sont destinées pour le calcul des points de consigne
(Pitch, Roll et Yaw) du contrôleur PID afin de contrôler les
impulsions PWM des ESC. L'entrée « Reciver_input 3 » qui
correspond à la commande «Throttle », est mise comme un signal
de base pour accélérer les moteurs. Cette image Figure
3.25, représente les axes du roulis (Roll), tangage (Pitch) et
lacet (Yaw) d'un aéronef.
Figure 3.25 : Les mouvements de base.
L'angle de roulis positif soulève l'aile gauche et
abaisse l'aile droite, l'angle de tangage positif soulève le nez et
abaisse la queue et l'angle de lacet positif déplace le nez vers la
droite. Ceci est la norme utilisé pour ce contrôleur de vol du
quadrotor.
Pour plus d'informations sur les registres utilisés
dans le programme, voir le manuel du datasheet pour l'ATMEGA328p dans l'annexe
de ce mémoire.