Filter coefficient (N) in PID block?
201 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Robert
le 17 Fév 2013
Commenté : Andre Elliot
le 15 Mai 2023
Good evening folks!
While tuning my quadrotor model in Matlab I found that the Matlab PID function had a Filter coefficient (N) term in the PID equation. However I have not encountered such a term in my typical PID programs. How would one implement this term into the PID equation and what would be some simple C code to add this term into the derivative? I tried generating C code from my model but got a lot of header and C program files with nothing close to simple.
My current PID code line in C is:
U2 = KP * phi_error + KI * phi_errorsum + KD * (PHI_RATE_desired-PHI_RATE);
Many Thanks, Robert
0 commentaires
Réponse acceptée
Arkadiy Turevskiy
le 12 Mar 2013
The code would look like that.
FilterCoefficient = (Kd * u - Filter_DSTATE) * N;
y = (Kp * u + Integrator_DSTATE) + FilterCoefficient;
Integrator_DSTATE += Ki * u * 0.01;
Filter_DSTATE += 0.01 * FilterCoefficient;
HTH.
Arkadiy
4 commentaires
Marzieh Hosseini
le 6 Mai 2021
Hi,
Is it the same code if I want to implement PID in Matlab code, while I am controlling a device directly with Matlab and I got real time information in my Matlab?
Plus de réponses (3)
Shashank Prasanna
le 17 Fév 2013
Hi Robert, this link should give you a better idea of what N means:
If you have Simulink Control Design toolbox, then you can use the built in pidtune functionality to tune the PID.
1 commentaire
Brian Candiloro
le 13 Jan 2023
Can this filter term be realized in a physical opamp differentiator circuit or only in code?
Robert
le 21 Fév 2013
1 commentaire
Seng Tak Goh
le 11 Mar 2019
Hi Robert,
In essence, the filtered derivative is doing a first order filtering on the change of the inputs, scaled by D gain.
The 1/s integrates the previous output scaled by N term, then adding the input change scaled by D * N to produce the output.
If you multiply the D term of the continuous form by s, you will see it better how the filtering comes into play.
In discrete form:
y[n] = D*N*(u[n]-u[n-1]) + (1-N*Ts)*y[n-1];
Voir également
Catégories
En savoir plus sur PID Controller Tuning dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!