Correcteurs Usuels
Ce chapitre présente les correcteurs P, PI et PID sous forme numérique. Pour chaque correcteur, nous donnons la fonction de transfert en
Schéma de régulation numérique
Dans une boucle de régulation numérique, le correcteur
Correcteur Proportionnel (P)
Forme continue
Forme discrète
Le correcteur P est indépendant de la fréquence, sa numérisation est donc triviale :
Équation de récurrence
Propriétés
- Avantage : Simple à implémenter, réponse rapide
- Inconvénient : Erreur statique non nulle en général
Correcteur Proportionnel-Intégral (PI)
Forme continue
où :
: gain proportionnel : constante de temps d'intégration
Forme discrète (Tustin)
En appliquant la substitution de Tustin
En posant
Démonstration
Partant de
En posant
Équation de récurrence
À partir de
Forme incrémentale
Cette forme est dite incrémentale car la commande est calculée comme une correction de la valeur précédente. Elle présente l'avantage de limiter les discontinuités lors de changements de consigne.
Implémentation
# Initialisation
u_prev = 0
eps_prev = 0
# Paramètres
a = 1 + Te / (2 * Ti)
b = 1 - Te / (2 * Ti)
# Boucle de contrôle
def pi_controller(eps):
global u_prev, eps_prev
u = u_prev + Kp * (a * eps - b * eps_prev)
u_prev = u
eps_prev = eps
return u
Correcteur Proportionnel-Intégral-Dérivé (PID)
Forme continue
où :
: gain proportionnel : constante de temps d'intégration : constante de temps de dérivation
Forme parallèle
Le PID peut aussi s'écrire sous forme parallèle :
avec
Forme discrète (Tustin)
En appliquant Tustin à chaque terme :
- Terme P :
- Terme I :
- Terme D :
Équation de récurrence (forme incrémentale)
La forme incrémentale du PID numérique est :
En regroupant les termes :
avec :
Équation de récurrence (forme position)
Implémentation
# Initialisation
u_prev = 0
eps_prev1 = 0 # epsilon[n-1]
eps_prev2 = 0 # epsilon[n-2]
# Coefficients
q0 = Kp + Ki * Te + Kd / Te
q1 = -Kp - 2 * Kd / Te
q2 = Kd / Te
# Boucle de contrôle
def pid_controller(eps):
global u_prev, eps_prev1, eps_prev2
u = u_prev + q0 * eps + q1 * eps_prev1 + q2 * eps_prev2
# Mise à jour des variables
u_prev = u
eps_prev2 = eps_prev1
eps_prev1 = eps
return u
Améliorations pratiques
Anti-windup
Lorsque l'actionneur sature, l'intégrateur continue d'accumuler l'erreur, ce qui provoque un dépassement important lors du retour en zone linéaire. L'anti-windup limite cet effet :
def pi_controller_antiwindup(eps, u_min, u_max):
global u_prev, eps_prev, integral
# Calcul de la commande
integral += Ki * Te * eps
u = Kp * eps + integral
# Saturation avec anti-windup
if u > u_max:
u = u_max
integral = u_max - Kp * eps # Recalcul de l'intégrale
elif u < u_min:
u = u_min
integral = u_min - Kp * eps
eps_prev = eps
return uFiltrage de la dérivée
L'action dérivée amplifie le bruit de mesure. On ajoute souvent un filtre passe-bas :
où
Tableau récapitulatif
| Correcteur | Fonction de transfert | Annule l'erreur statique | Action anticipatrice |
|---|---|---|---|
| P | Non | Non | |
| PI | Oui | Non | |
| PID | Oui | Oui |
Choix de la période d'échantillonnage
Pour un bon fonctionnement du correcteur numérique, la période d'échantillonnage
où
Attention
Une période d'échantillonnage trop grande dégrade les performances et peut même rendre le système instable.
