Filter coefficient (N) in PID block?

118 visualizzazioni (ultimi 30 giorni)
Robert
Robert il 17 Feb 2013
Commentato: Sam Chak il 20 Lug 2025
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

Risposta accettata

Arkadiy Turevskiy
Arkadiy Turevskiy il 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 Commenti
Marzieh Hosseini
Marzieh Hosseini il 6 Mag 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?
Andre Elliot
Andre Elliot il 15 Mag 2023
Hi what are u, N, y and the meaning of DSTATE? nice day.

Accedi per commentare.

Più risposte (4)

Shashank Prasanna
Shashank Prasanna il 17 Feb 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 Commento
Brian Candiloro
Brian Candiloro il 13 Gen 2023
Can this filter term be realized in a physical opamp differentiator circuit or only in code?

Accedi per commentare.


Robert
Robert il 17 Feb 2013
Thank you for the response, but I saw that link and do not quite understand it entirely, especially the filter block.
So in essence should the code look something like this:
Derivative PID:
Derivative_gain*(set_rate - N*acutal_rate)?
I am not quite sure where the filter (1/s) comes into play.
Thank you

Robert
Robert il 21 Feb 2013
Any ideas?
  1 Commento
Seng Tak Goh
Seng Tak Goh il 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];

Accedi per commentare.


stanley
stanley il 20 Lug 2025
filter coffiect
  2 Commenti
stanley
stanley il 20 Lug 2025
PID Block → Filter Coefficient
Sam Chak
Sam Chak il 20 Lug 2025
Hi @stanley, What exactly is your question on the derivative filter coefficient of the PID Controller?

Accedi per commentare.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by