Implémentation d’un régulateur PID numérique
avec un circuit DSP
On considère le schéma bloc d’un asservissement numérique représenté à la figure suivante :
yc(k) e(k) ucm(k) y(k)
+ R(z) T(z)
-
Où :
• yc(k) : grandeur de consigne
• y(k) : grandeur de sortie à réguler
• e(k)= yc(k)-y(k), erreur instantanée
• ucm(k)= uc(k)-y(k), ucm la grandeur de commande.
• R(z) : fonction de transfert du correcteur numérique
• T(z) : fonction de transfert numérique du processus à commander
Dans le domaine continu, on a défini le régulateur PID par la fonction de transfert :
1
ucm (p) = k p �1 + + Td p�
Ti p
Où Kp, Ti et Td sont respectivement, les gains des actions: proportionnelle, intégrale et dérivée.
La transition du domaine continu au domaine discret suppose une approximation de l’intégrale par
une somme discrète et de la dérivée par une différentiation discrète.
La partie intégrale et dérivée peuvent être estimées en utilisant une approximation d’ordre un. Le
signal est échantillonné à l’instant k et maintenu jusqu’à l’instant k+1.
l’algorithme du régulateur peut s’écrire :
𝑇𝑇𝑒𝑒 𝑇𝑇𝐷𝐷 𝑇𝑇𝑒𝑒 2𝑇𝑇𝐷𝐷 𝑇𝑇𝐷𝐷
𝑢𝑢[𝑘𝑘 + 1] = 𝐾𝐾𝑝𝑝 �1 + + � 𝑒𝑒[𝑘𝑘 + 1] + 𝐾𝐾𝑝𝑝 � −1− � 𝑒𝑒[𝑘𝑘] + 𝐾𝐾𝑝𝑝 𝑒𝑒[𝑘𝑘 − 1] + 𝑢𝑢 [𝑘𝑘]
2𝑇𝑇𝑖𝑖 𝑇𝑇𝑒𝑒 2𝑇𝑇𝑖𝑖 𝑇𝑇𝑒𝑒 𝑇𝑇𝑒𝑒
On considère que l’expression du signal de commande est de la forme :
ucm [k + 1] = A1 e[k + 1] + A0 e[k] + A−1 e[k − 1] + ucm [k]
Expliciter l’expression des différentes constantes A1, A0 et A_1.
Travail demandé :
Objectif : implémentation d’un régulateur PID numérique
La fréquence d’échantillonnage du système est fixée par le timer2 : à chaque fin de comptage
(TMR2=PR2) le programme d’interruption est exécuté ; ce programme doit assurer la lecture de la
consigne, la lecture de la mesure, le calcul de l’erreur et le calcul de la commande.
1. Donner la valeur de PR2 ainsi que la configuration de T2CON permettant de fixer la
fréquence d’échantillonnage à 10Khz,
2. Donner la configuration des bits associés à l’interruption du timer2,
3. En exploitant le document traitant des régulateurs numériques ci-joint, donner le programme
du régulateur numérique.
4. En prenant Kp=0.1, Ti=0.002, Td=0.001, saturation positive 15 V et saturation négative -
15V , tester le régulateur avec une entrée échelon unitaire numérique .
5. Développer un programme en langage C pour dsPIC33F permettant de programmer le
régulateur PID numérique.
6. Déclarer un tableau réservé au signal de commande, sortie du régulateur.
On suppose que la mesure est nulle (écart=1).
On donne :
Fosc= 8 MHz, PLL = 1 ;
Prototype de l’interruption:
Void __attribute__((__interrupt__(no_auto_psv))) _T2Interrupt(void);
On pourra suivre l’algorithme suivant :
Interruption PID
/*mesure de la sortie*/
yn
ADC ; //lecture échantillon
/*calcul de l’erreur*/
en=wn-yn ; // consigne – mesure
/*calcul de la commande*/
vn= A0en + A1en-1 +A2en-2 + vn-1 ;
/*sortie*/
Si(vn <=Uinf) un=Uinf ; //anti windup
Sinon
Si(vn >=Usup) un=Usup ; //anti windup
Sinon un=vn ;
/*vieillissement*/
en-2 = en-1 ;
en-1 = en ;
vn-1 = vn ;
retour