III.5.4. Contrôle des ESC :
Dans cette partie, le but est de générer les
impulsions de commande à envoyer pour les quatre ESCs en fonction des
variables de sorties PID, afin de contrôler la vitesse des moteurs du
quadrotor. Les ESC sont connectés à l'Arduino Uno du
contrôleur de vol via les broches digitales (D4, D5, D6 et D7) du
registre PORTD. Au début du programme principal, ces broches
numériques doivent être déclarés en tant que
sorties. Après avoir calculé les variables de sortie du
contrôleur PID pour les axes de commande (Pitch, Roll et Yaw), il devient
possible de calculer les largeurs d'impulsion à fournir pour les ESC
toutes les 4 ms afin de corriger la position du quadrotor.
Throttle est mis comme le signal De base pour le calcul
des Impulsions des ESCs
Affecter le signal Throttle à la variable entière
d'accélération : Accélération = Reciver_input
3
Non
Accélération> 1800
Oui
Accélération = 1800
Laisser 200us de gap pour garder le contrôle Total à
plein vitesse
Calcul des impulsions de correction :
Largeurs d'impulsion esc 1 Largeurs d'impulsion esc 2 Largeurs
d'impulsion esc 3 Largeurs d'impulsion esc 4
58
esc_1 = accélération - Pid_sortie_pitch +
Pid_sortie_roll - Pid_sortie_yaw esc_2 = accélération +
Pid_sortie_pitch + Pid_sortie_roll + Pid_sortie_yaw esc_3 =
accélération + Pid_sortie_pitch - Pid_sortie_roll -
Pid_sortie_yaw esc_4 = accélération - Pid_sortie_pitch -
Pid_sortie_roll + Pid_sortie_yaw
Au début, il est nécessaire de déclarer
le signal d'entrée du récepteur Throttle « Reciver_input 3
» comme la variable de base d'accélération. Pour assurer que
les trois contrôleurs PID ont suffisamment d'espace pour corriger le
quadrotor à pleine vitesse, la variable d'accélération est
limitée à 1800 ìs au lieu de 2000 ìs. De cette
façon, chaque contrôleur PID peut ajouter 200 ìs
supplémentaires en cas de besoin. Pour calculer les impulsions des ESC,
il suffit de combiner les variables de sorties PID séparées
(Pitch, Roll et Yaw) et de les ajouter ou les soustraire à la variable
d'accélération suivant cet algorithme :
Chapitre III Conception et mise en oeuvre du
fonctionnement
59
La Figure3.31 représente les axes Roll,
Pitch et Yaw du quadrotor, la correction des impulsions des ESCs se fait selon
les quatre instructions de l'algorithme citées en haut.
Figure 3.31 : Disposition des ESCs et direction de
rotation du quadrotor
Pour l'axe de Roulis, si le quadrotor penche vers la droite en
raison du vent ou de la turbulence, cela conduit le Gyro d'envoyer un angle de
roulis positif (Données d'entrée Roll du Gyro> 0), lorsque le
pilote ne veut aucun mouvement (le joystick de l'émetteur est en
position centrale) c'est à dire la variable roulis du récepteur
est de 0 ° / sec (Pid_Roll_consigne= 0°) implique que la sortie
roulis du contrôleur PID est positive (Pid_sortie_roll> 0) car
l'erreur????> 0. Donc pour que le quadrotor puisse revient à
l'état stable 0°, la vitesse du moteur avant droit doit augmenter
et ceci est fait en ajoutant la sortie du contrôleur PID Roll
(Pid_sortie_roll) à l'impulsion de l'ESC 1.
Le même principe pour le tangage (Pitch), lorsque le
front du drone est incliné en bas à cause d'une perturbation ou
du vent, le Gyro envoie un angle de tangage négatif et la sortie du
contrôleur PID Pitch devienne négative (Pid_sortie_pitch< 0),
en soustrayant la sortie du PID Pitch de l'impulsion ESC 1 implique que la
vitesse du moteur1 s'augmente et le quadrotor retrouve l'état stable
0°, cela est illustré dans la Figure 3.32 et la
Figure 3.33 pour l'axe de roulis (Roll) et la même chose
pour le tangage (Pitch).
Le même principe se répète pour chaque
combinaison moteur / ESC.
Chapitre III Conception et mise en oeuvre du
fonctionnement
60
Figure 3.32 : L'algorithme du PID conduit le quadrotor
de revenir À l'état voulu en agissant sur les ESCs
Figure 3.33 : Retour à l'état de consigne
désiré par le pilote 0°.
Selon les dernières instructions citées dans
l'algorithme en haut :
Si la sortie PID Pitch est (-) : les impulsions
Si la sortie PID Roll est (-) : les impulsions
Si la sortie PID Yaw est (-) : les impulsions
|
|
|
et
et
et
|
|
|
ESC 1
|
ESC 4
|
ESC 2
|
ESC 3
|
|
|
|
|
ESC 3
|
ESC 4
|
ESC 1
|
ESC 2
|
|
|
|
|
ESC 1
|
ESC 3
|
ESC 2
|
ESC 4
|
Chapitre III
|
Conception et mise en oeuvre du
fonctionnement
|
Si la sortie PID Pitch est (+) : les impulsions
Si la sortie PID Roll est (+) : les impulsions
Si la sortie PID Yaw est (+) : les impulsions
|
|
|
et
et
et
|
|
|
ESC 1
|
ESC 4
|
ESC 2
|
ESC 3
|
|
|
|
|
ESC 3
|
ESC 4
|
ESC 1
|
ESC 2
|
|
|
|
|
ESC 1
|
ESC 3
|
ESC 2
|
ESC 4
|
L'étape suivante consiste à envoyer les
impulsions calculées aux ESC, ceci est fait en maintien les sorties
numériques du PORTD (D4, D5, D6 et D7) à un niveau logique haut
avec un délai de temps correspond aux largeurs d'impulsions ESC
calculées précédemment. Pour avoir le front descendant des
impulsions, il suffit d'exécuter une boucle « while »
jusqu'à ce que les quatre bits de poids fort du registre PORTD soient
à zéro, ça signifie la fin de l'impulsion ESC.
Pour s'assurer que la fréquence des signaux PWM est de
250 Hz, un temporisateur de boucle vide est employé pour
s'exécuter jusqu'à ce que les 4 ms soient expirées.
Finalement, il en résulte quatre trains d'impulsions PWM
synchronisé avec une fréquence de 250 Hz,
Figure3.34.
Figure 3.34 : Simulation des impulsions PWM de
fréquence 250 Hz à envoyer pour deux ESCs
61
Chapitre III Conception et mise en oeuvre du
fonctionnement
62
Chapitre III Conception et mise en oeuvre du
fonctionnement
Toutes les données pour contrôler les moteurs sont
disponibles. L'organigramme suivant explique l'algorithme utilisé pour
générer des impulsions PWM aux ESC:
Initialisation des variables flottantes : Boucle_temps,
timer_ch 1, timer_ch 2, timer_ch 3, timer_ch 4, esc_boucle_temps
On attend jusqu'à 4000 us le TIMER microseconde Micros ( )
est utilisé pour
Sont écoulés. Calculer le temps
écoulé.
Micros ( ) - boucle_temps < 4000
Non
Oui
La fréquence du contrôleur de vol est de 250Hz. Cela
signifie que les ESCs ont besoin de leur Impulsions toutes les 4ms.
Stocker le temps actuel du compteur pour la prochaine boucle
: Boucle_temps = micros ( )
Met à la fois les sorties numériques D4, D5,
D6 et D7 haut :
PORTD |= B11110000
|
|
Calcule des largeurs d'impulsions à Fournir pour les
ESCs.
Restez dans cette boucle jusqu'à ce que D4, D5, D6 et D7
soient zéro. Non
Oui
Esc_boucle_temps = micros ( )
Stocker le temps actuel du compteur Chaque fois que la boucle
est exécutée.
Si (timer_ch 1 = esc_boucle_temps) PORTD &= Si (timer_ch 2
= esc_boucle_temps) PORTD &= Si (timer_ch 3 = esc_boucle_temps) PORTD
&= Si (timer_ch 4 = esc_boucle_temps) PORTD &=
|
Rendre la sortie numérique
|
B11101111
|
B11011111
|
|
B10111111
|
À zéro pour chaque ESC si
|
B01111111
|
Le délai de temps de
|
|
L'impulsion est expirée.
|
Timer_ch 1= esc_1 + Boucle_temps Timer_ch 2=
esc_2 + Boucle_temps Timer_ch 3= esc_3 +
Boucle_temps Timer_ch 4= esc_4 + Boucle_temps
PORTD = 16
Fin de la boucle principale void loop.
63
|