BTS CIEL Date:
TP 1 /5
TP ASSERVISSEMENT ET PYTHON
I) PRESENTATION :
On considère le système asservi retour unitaire décrit par le schéma-bloc ci-dessous :
- on note p la variable de Laplace, les grandeurs seront notées en minuscule dans le domaine temporel et en majuscule dans le
domaine de Laplace tel que L(e(t)) = E(p) ;
- le correcteur est un correcteur P.I.D. (parfait) de fonction de transfert C(p) ;
N G ( p)
- le système à réguler est connu par sa fonction de transfert G(p)= où NG(p) et DG(p) sont deux polynômes.
DG ( p)
On pose
- NG(p) = n0 + n1 . p + n2 . p² + … + nk . pk,
- DG(p) = d0 + d1 . p + d2 . p² + … + dl . pl . k est le degré du numérateur, l le dégré du dénominateur. k < l.
Afin de déterminer la réponse temporelle du systeme corrigé, nous avons besoin de définir la fonction de transfert en
boucle ouverte BO(p), puis la fonction de transfert en boucle fermée BF(p).
II) MISE EN EQUATION :
1) Exprimer BO(p) puis BF(p) en fonction C(p) et G(p).
BO(p)= C(p)×G(p)×1 .
Pour la boucle fermée on utilise la formule de black
S ( p) C ( p )∗G( p)
BF(p)= =
E( p) 1+ C ( p )∗G( p)
2) S(p) = BF(p) . E(p) et la réponse temporelle s(t) s'obtient en recherchant la transformée inverse de Laplace de S(p).
Pour ce premier essai, on considère C(p) = 1
Le programme [Link] permet de tracer la réponse temporelle s(t) à un échelon unitaire e(t) pour C(p) = 1
Le systeme que nous allons étudier est décrit par la fonction de transfert :
On note numerateur et denominateur les listes associées au numérateur NG(p) et au dénominateur DG(p) de la
fonction de transfert G(p).
A l'aide de l'annexe et de l'expression de G(p), compléter les lignes de code ci dessous ( 9 et 10):
numerateur = [ 8]
denominateur = [ 0.0072 , 0.273 , 1.113 , 1 ]
3) A l'aide de l'annexe, complétez ( lignes 17 et 18 ):
# Multiplication des fonctions de transfert G(p) et C(p)
num_GC = numerateur
den_GC = denominateur
GC = lti(num_GC, den_GC)
BTS CIEL Date:
TP 2 /5
III) REPONSE INDICIELLE :
1) Executer le programme et faite une copie d’écran.
2) Quelle est la grandeur permettant d’évaluer la précision du système ? Evaluer cette grandeur. Conclure.
C’est l’erreur de position ∈. ∈ est la différence entre l’entrée et la sortie .∈= 1- 0.895 = 0.105 .
Donc y a bel et bien une erreur.
3) Quelle est la grandeur permettant d’évaluer la stabilité du système ? Evaluer cette grandeur. Conclure.
C’est le dépassement est la différence entre la valeur maximale et la valeur finale de la sortie en pourcentage
noté D%.
D%= (1.235-0.895) *100 = 34%
Ou
C’est la grandeur : 1+C ( p )∗G ¿) = denominateur. Si tous les pôles (solutions) de sa fonction de transfert en
BF ont leur partie réelle strictement négative.
BTS CIEL Date:
TP 3 /5
4) Quelle est la grandeur permettant d’évaluer la rapidité du système ? Evaluer cette grandeur.
C’est à partir de 95% de la valeur final que l’on considère le système comme établit donc la rapidité se
détermine à partir de tR5% . Si on évalue ,d’après le graphe tR5% =1.77 secondes
0.95*Sinfini= 0,85025
1.05*Sinfini=0.93975
Nous allons maintenant créer des fonctions permettant de mesurer ces grandeurs.
IV) MESURES DES CRITERES DE PERFORMANCES :
1) Ecrire la fonction erreur_statique(y,t) qui prend en argument les listes y et t et qui renvoie l’erreur statique.
L’erreur statique sera calculée pour la dernière valeur de y en supposant qu’alors le régime permanent est atteint.
def erreur_statique(y):
# L'entrée à l'état stationnaire est 1 (échelon unitaire)
entree = 1
# La valeur de la sortie à l'état stationnaire est la dernière valeur de y
y_final = y[-1]
# Calcul de l'erreur statique
erreur = entree - y_final
return erreur
erreur_statique(y)
print(f"Erreur statique : {erreur_statique(y):.4f}")
2) Ecrire la fonction depassement(y,t) qui prend en argument les listes y et t et qui renvoie le dépassement relatif.
On pourra utiliser [Link] pour trouver l’index de l’élément maximum dans les tableaux.
def depassement(y):
# La valeur maximale de la réponse y(t)
y_max = y[[Link](y)]
entree = 1
depassement_val = (y_max-entree)* 100
return depassement_val
depassement(y)
print(f"Dépassement relatif : {depassement(y):.2f}%")
3) Le dépassement permet de mesurer le degré de stabilité mais pas la stabilité d’un système. Rappeler la condition
que doivent respecter les pôles d’un système pour que celui ci soit stable. En utilisant les fonctions roots et real (voir
annexe A2), écrire la fonction stabilite(dénominateur) qui prend en argument le dénominateur d’une fonction de
transfert en renvoie True si le système est stable et False si le système est instable.
Les valeurs du temps de réponse à 5 %, du dépassement, de l’erreur statique et si le système en boucle fermée est stable
s’affichent dans la console.
Si tous les pôles (solutions) de sa fonction de transfert en BF ont leur partie réelle strictement négative.
4) Relever ces valeurs, comparer ces valeurs avec celles évaluées précédemment pour valider les nouvelles fonctions
créées.
II semble nécessaire de choisir un correcteur qui améliore notablement la réponse du systeme. Nous verrons cela dans
la suite.
BTS CIEL Date:
TP 4 /5
Erreur statique : 0.1111
Dépassement relatif : 34.36%
V) CORRECTION DU SYSTEME :
La correction d'un systeme asservi linéaire, en vue de répondre aux exigences de précision, rapidité et d'oscillations, n'est
jamais aisée et est souvent réalisée à partir de méthodes pratiques plus ou moins empiriques. Le correcteur Proportionnel,
Dérivateur, Intégrateur (P.I.D.) est fréquemment employé afin d'améliorer le comportement des systemes asservis. On se
propose de mettre en oeuvre une procédure d'optimisation du correcteur P.I.D.
On considère le systeme asservi retour unitaire décrit par le schéma-bloc ci-dessous :
Nous avons étudié les performances de ce système asservi non corrigé dans la partie 1 de ce TP.
Nous utiliserons dans cette partie le programme précédent [Link]. avec les fonctions erreur_statique(y, t) ,
depassement(y, t) , stabilite(denominateur) , et le calcul du temps de réponse.
Lancer ce programme.
On installe dans le systeme un correcteur P.I.D. :
(
C ( p ) =K P . 1+
1
+T . p
T i. p d )
BTS CIEL Date:
TP 5 /5
Le systeme devient :
N C ( p)
1) Mettre le correcteur sous la forme C(p) = où NG(p) et DG(p) sont deux polynômes à définir.
D C ( p)
( )
1 K p∗T i∗p+ K P + K P∗T i∗p ¿ T d∗p
C ( p ) =K P . 1+ +T d . p = =
T i. p T i∗p
2 2
5∗1 , 1∗p+5+ p ∗0.218∗1.1∗5 5+5.5 p+1.199 p
=
1.1 p 1.1 p
2) Remplacer C = lti([1], [1]) par C = lti([ ???????], [?????]) qui renvoie la fonction de transfert du correcteur P.I.D
en prenant comme paramètres du correcteur Kp=5, Ti=1,1 et Td=0,218.
num_C=[1.199,5.5,5]
den_C=[1.1,0]
C = lti(num_C,den_C)
# Multiplication des fonctions de transfert G(p) et C(p)
num_GC = [Link](num_C, numerateur)
den_GC = [Link](den_C, denominateur)
GC = lti(num_GC, den_GC)
3) Tracer la réponse temporelle s(t) pour un échelon unitaire
Copier / coller ci dessous s(t) et relever le temps de réponse à 5 %, le dépassement et l’erreur statique.
Temps de réponse à 5% : 0.16 secondes
Erreur statique : 0.0000
Dépassement relatif : 18.10%
les racines sont : [-33.41487401 -3.20485404 -1.29693861]
le système est stable
BTS CIEL Date:
TP 6 /5
4) Expliquer la valeur obtenue pour l’erreur statique.
C’est dû au P.I intégré dans le PID qui annule l’erreur statique pour une entrée en échelon grâce a l’action intégrale.
5) Changer la valeur de Kp et optimiser le temps de réponse à 5 %.
Le Kp influe sur le temps de réponse :
-Si on l’augmente le temps de réponse devient sensiblement plus rapide mais on observe des oscillations
ce qui peut perturber nos montage en créant des surtensions.
BTS CIEL Date:
TP 7 /5
-Si on le diminue le temps de réponse devient très lent
VI) INFLUENCES DU CORRECTEUR :
Le programme python [Link] permet de changer de manière interactive les paramètres du correcteur.
1) Décrire les influences de ces paramètres sur la réponse indicielle du système en boucle fermée, sur le diagramme de
Bode en boucle ouverte et sur la marge de phase.
Kp :
si on l’augmente le temps de réponse devient sensiblement plus rapide mais on
Influence la rapidité du système
observe des oscillations ce qui peut perturber nos montages en créant des surtensions, si on le diminue le
temps de réponse devient très lent.
Augmente le gain à toutes les fréquences, déplace le gain vers le haut
Ti : Ralentit la réponse, annule l'erreur statique à long terme
TD : Réduit le dépassement
Décrire les influences de ces paramètres sur la réponse indicielle du système en boucle fermée, sur le diagramme de Bode en
boucle ouverte et sur la marge de phase
BTS CIEL Date:
TP 8 /5
ANNEXE
Bibliothèque numpy :
import numpy as np
Produit de deux polynômes
Si et
p1 = [nm ,…, n1, n0] et p2 = [nn ,…, n1, n0]
p1p2 =
Ex :
et
p1 = [2 , 4]
p2 = [1, 2 , 4]
p1p2 = [Link](p1, p2) => [ 2, 8, 16, 16]
Addition de deux polynômes
Si et
p1 = [nm ,…, n1, n0] et p2 = [nn ,…, n1, n0]
p1p2 = [Link](p1, p2)
Ex :
et
p1 = [2 , 4]
p2 = [1, 2 , 4]
p1+p2 = [Link](p1, p2) => [1, 4, 8]
Bibliothèque scipy:
from [Link] import lti, step
Détermination de fonction de transfert
Soit une fonction de transfert
G = lti([nm , nm-1 ,… , n1 , n0], [dn , dn-1 ,… , d1 , d0])
Ex :
On aura donc
G = lti([2 , 4], [1 , 2 , 4])
Retrouver les coefficients à l’aide d’une fonction de transfert
G = lti([2 , 4], [1 , 2 , 4])
[Link] donne les coefficients du polynôme au numérateur de la fonction de transfert. => [2 , 4]
[Link] donne les coefficients du polynôme au dénominateur de la fonction de transfert. => [1 , 2 , 4]
BTS CIEL Date:
TP 9 /5
Fonction de transfert en boucle fermée avec correcteur à retour unitaire :
N G ( p) N C ( p)
Si G(p)= et C(p)=
DG ( p) DC ( p)
NG N C
×
CG DG DC NG × NC
On a = =
1+ CG N G N C DG × DC + N G × N C
1+ ×
D G DC
num_BF = [Link]([Link], [1])
den_BF = [Link]([Link], [Link]([Link], [1]))
BF = lti(num_BF, den_BF)
Réponse indicielle ou réponse à un échelon:
La fonction utilisée est step(ft, X0=None, T=None, N=None) avec comme paramètre la fonction de transfert et comme
paramètres optionnels :
- X0 le vecteur d'état initial, par défaut nul ;
- T un tableau des instants temporel à calculer ;
- N le nombre de points à calculer si T n'est pas défini.
La fonction calcul la réponse à un échelon unitaire uniquement.
Pour d'autres valeurs d'échelon, il suffit de multiplier la réponse par l'amplitude de l'échelon.
(Cela fonctionne car la réponse d'un système linéaire à une entrée est proportionnelle à cette entrée.)
t, y = step(BF, T=t)
- t : Le tableau des temps auxquels la réponse a été calculée.
- y : Le tableau des valeurs de la réponse du système à l'entrée échelon unitaire.
- T : représente le tableau de temps auxquels on souhaite obtenir la réponse du système
BTS CIEL Date:
TP 10 /5
) qui prend en argument les listes y et t et qui renvoie l’erreur statique. L’erreur statique sera calculée pour la dernière
valeur de y en supposant qu’alors le régime permanent est atteint.
def stabilite(dénominateur):
dénominateur = [ 0.0072 , 0.273 , 1.113 , 1 ]
racines=roots(dénominateur)
return racines
print(f"les racines sont : {real(racines).2f})