I'm developing a PID controller to control the position of a laser beam. The position is measured using a Position Sensitive Device (PSD). I modeled the plant according to the manufacturer specs and I'm using Matlab/Simulink with PID tuner and embedded coder to generate the code for an F28335 micro-controller.

As long as I use a PI controller, the results are consistent with the model, but as soon as I introduce a differentiator and try to obtain a sharper step response, the system becomes unstable, with a lot of oscillation and saturation.

My guess is that the problem is the noise in the feedback sensor, so I tried to filter both the feedback signal and the error to no avail. Is there any other reason why the real system becomes so unstable? Any suggestions?


This is the compensator formula provided by the Simulink PID block:

enter image description here

  • $\begingroup$ A significant amount of noise can indeed be devastating when trying to calculate the derivative. What kind of filters did you try? Also the sensor probably also adds a delay, which can also cause instabilities. $\endgroup$ – fibonatic Jul 25 '15 at 17:21
  • $\begingroup$ I'm using the "Filtered derivative" provided by the Simulink PID block, which is also automatically tuned. I've tried adding some white noise to the feedback loop in the Simulink model and the system is no longer stable. I can increase the filter coefficient to decrease the effect of the noise, but then the step response is slower again. I guess there's not much I can do with that amount of noise. $\endgroup$ – Wolfy Jul 25 '15 at 18:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.