Vous êtes sur la page 1sur 4

ASSERVISSEMENTS PAR LOGIQUE FLOUE

Enoncé 12.6.1 On veut régler un système par régulateur flou: Banc SIMA en position. Cahier
des charges: dépassement voisin de 5 %. On dispose des mesures de position et de vitesse.
On a modélisé – et linéarisé – le banc SIMA du laboratoire d'automatique de l'EIG
(sans l'amplificateur de puissance) par ses matrices d'état:
-1.5224e-001 0 4.1266e+000
As = 1.5915e+000 0 0
-1.9076e+003 0 -1.1112e+004
0 -8.0128e+001
bs = 0 bsv = 0
9.2600e+002 0
csT = 0 1 0 ds = 0
L'amplificateur de puissance est modélisé par un filtre du premier ordre:
Kcm = 1,98 Tcm = 0,5 [ms]

A Créer un régulateur flou:


• définition des ensembles linguistiques pour les variables d'entrée (écart de position
et vitesse) et pour la sortie (tension de commande de l'ampli du moteur).
• établissement des règles de commande.
B Introduction sous MATLAB:
lancer la fonction fuzzy.
introduire la fuzzification des signaux.
introduire les règles de commande
spécifier les méthodes de calcul (et, ou, implications, ...)
enregistrer le régulateur sous un nom choisi.
C Ouvrir Simulink et SIMAflc1.mdl. Si on ne dispose pas du schéma Simulink mentionné
(créé à l'EIG), on en crée un à l'aide du modèle d'état ci-dessus et on le complète par un
régulateur flou (provenant de la librairie simulink\blocksets&toolboxes\simulink-fuzzy)
précédé d'un multiplexeur et de gains à la sortie et aux deux entrées. Raccorder l'écart de
position entre consigne (issue d'un bloc Step) et mesure à la première entrée et la mesure de
vitesse à la deuxième entrée. Ouvrir le bloc Fuzzy-Logic-Controller et inscrire le nom choisi en
B dans la fenêtre. Dans State–Space, placer les valeurs A = As et B = bs ci-dessus, puis
placer la matrice unité C = eye(3,3) et D = [0;0;0]. Pour Matrix–Gain1, K = csT et pour
Matrix–Gain2, K = [1 0 0].

-0.1
Step
Sum Mux 1.98 x' = Ax+Bu
Gain1 100 K
05.e-3s+1 y = Cx+Du
0.1 Gain3 Transfer Fcn State-Space Matrix
Fuzzy Logic Gain1
Gain2 Controller
Mux
K

Matrix
Gain2

D Lancer une simulation. Au besoin, modifier le régulateur flou et l'enregistrer sous un


nouveau nom avant de relancer une simulation. On peut aussi comparer avec un régulateur
classique (P, PI, PID, PD) inséré à la place du régulateur flou.

Corrigés d’exercices pour section 12.6 1 020222


ASSERVISSEMENTS PAR LOGIQUE FLOUE
Corrigé 12.6.1 A On va définir tout d'abord un choix simple de fuzzyfication, à trois
variables linguistiques par grandeur.
µ µ µ
N EZ P N EZ P N EZ P
1 1 1

e ω ucm
–1 +1 –1 +1 –1 +1
Pour commencer, on définira des grandeurs arbitraires pour les "angles" des fonctions
d'appartenance: ±0,25 et 0 pour e et ucm et ±0,25 et ±0,5 pour ω. Ces valeurs seront ensuite
ajustées en fonction des résultats obtenus en C. On a prévu un certain "offset" sur la vitesse
pour qu'une vitesses faible soit considérée comme nulle.
Pour les règles de commande, on raisonne d'abord à vitesse nulle. Pour un écart de
réglage positif, on applique une sortie de tension négative et réciproquement. Pour un écart de
réglage nul, une vitesse positive demandera une sortie de tension négative et réciproquement.

ucm e
N EZ P
P EZ N N
ω EZ P EZ N
N P P EZ

Lorsque l'écart de position et la vitesse sont de signes opposés, le module du premier a


déjà tendance à diminuer: on décide de "ne rien faire": EZ. On aura donc 9 règles à introduire
dans l'éditeur de régulateur flou.

B On lance MATLAB et son Toolbox.

» fuzzy

On ajoute une entrée, puis on choisit les noms des entrées et sortie. Avec un double-
clic dans les fenêtres des entrées et sorties, on accède à l'éditeur de fonctions d'appartenance
«Membership Function Editor» dans lequel on applique les choix de A. On introduit alors les
règles dans le «Rule Editor» selon le choix fait en A. Il reste à spécifier la méthode
d'inférence, on a choisi "somme – produit": «prod» pour le ET et le =>, et «mean» pour le OU
et l'agrégation. On enregistre alors le choix sur le disque et dans l'espace de travail:
Exo1261a.

C Après avoir chargé dans l'espace de travail les paramètres du système,

» simainer
Faute de donnée, on charge ´x10431b´: SIMA avec inertie additionnelle
» simaflc1

On lance le programme de simulation, avec une consigne sans discontinuité pour variation de
0 à π/10. On spécifie Exo1261a dans le bloc Fuzzy Logic Controller. On applique une valeur
initiale de 100 sur le gain de sortie.

Corrigés d’exercices pour section 12.6 2 020222


ASSERVISSEMENTS PAR LOGIQUE FLOUE
Corrigé 12.6.1 D On exécute une simulation.

1.2
position
1
consigne

0.8

0.6
vitesse
0.4

0.2

tension
-0.2
courant

-0.4

-0.6
0 0.5 1 1.5 2 2.5 3 3.5 4

Pour un premier essai, on peut s'estimer satisfait. On remarque toutefois une forte
oscillation sur la vitesse. Celle-ci reste toutefois inférieure à 2,5 [V] qui correspond à l'offset
choisi. En 3 nouveaux essais successifs, on a réduit l'offset de vitesse à ±0,05 et élargi la base
de EZ à ±0,75. Sur la sortie, on a également élargi la base de EZ à ±0,5 pour diminuer les
oscillations.

1.2

1
consigne
0.8 position

0.6

0.4
vitesse

0.2

-0.2

-0.4

-0.6
0 0.5 1 1.5 2 2.5 3 3.5 4

Les oscillations sur la vitesse et la position on bien diminué, mais le retard sur la
position a légèrement augmenté. Le résultat est toutefois très bon et on s'en satisfait. On a
encore essayé de reprendre le choix initial sur la sortie, mais avec un gain réduit à 50: les
performances obtenues sont très voisines. Pour atteindre d'excellentes performances, il
faudrait encore faire de nombreux essais.

Corrigés d’exercices pour section 12.6 3 020222


ASSERVISSEMENTS PAR LOGIQUE FLOUE
Corrigé 12.6.1 D (suite) Avec un saut de consigne de 5 [V] qui correspondent à π/2.
8

consigne
5

position
4

vitesse
2

1
tension

0
courant
-1
0 0.5 1 1.5 2 2.5 3 3.5 4

On peut encore se limiter au seul écart de réglage en appliquant un gain de 0 sur


l'entrée de vitesse (attention à l'échelle de temps: temps total 2,5 [s]).
12

10
vitesse
8

6
consigne position

2
tension

0
courant
-2

-4

-6
0 0.5 1 1.5 2 2.5

La qualité du réglage est considérablement dégradée, mais reste acceptable.

Corrigés d’exercices pour section 12.6 4 020222