Why do I receive incorrect results when I use the Derivative block in Simulink?
조회 수: 27 (최근 30일)
이전 댓글 표시
I implemented a PID controller using a Derivative block, but the output of the closed-loop system does not match the expected results, which were computed using the closed-loop transfer function.
채택된 답변
MathWorks Support Team
2009년 9월 14일
The Derivative block is not equivalent to the ideal s-domain derivative, i.e. "s". The main reason for this is that a pure derivative is not causal, i.e., it needs to know future inputs to tell its value at the present time. The Derivative block outputs the value (u[t]-u[t-dt])/dt where "dt" is the last time step taken by the ODE solver. When using variable-step solvers, this is only faintly related to "h(s)=s". This is why the simulated results do not match the closed-loop transfer function results.
To work around this issue, implement an approximate derivative via a high-pass filter of the form "s/(1+a*s)", where "a" is small compared to the dominant time constant of the plant. This will not only eliminate time-domain discrepancies, but also ensure that the PID controller can be implemented.
A PID block that uses an approximate derivative is implemented in Simulink and can be found in the Additional Linear section of Simulink Extras library.
댓글 수: 0
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 General Applications에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!