I'm designing a PI controller for a boost converter. I was able to find a set of gains that fit for all situations, but I get a slow response at full-load.

I was thinking instead of using gain scheduling, 1 set of gains for little to no load and 1 set of gains when load is significant (say more than 25% of the maximum load).

Now my question. What are the gotchas about gain scheduling? In books they don't say much about implementation details.

I was thinking that in order for gain scheduling to work, I need to apply the Ki gain of the integrator AFTER the integration and not before. That way I canchange seamlessly from one set of gain to the other.

I.e :

Use this => integrator = integrator + error; output = Kiintegrator + Kperror;

Instead of integrator = integrator + Kierror; output = integrator + Kperror;

Am I on the right path?




if you want the transition between two sets of controller parameters to be smooth, you need to apply the integral gain before the integrator. The controller output will perform a step otherwise, which is the exact opposite of seamless.

Your speaking of a PI controller and you have to apply a suitable strategy for the proportional gain too. Possible solutions are, but not limited to:

  • apply a 2nd order filter to the controller parameters to ensure smooth transistion, this might affect controller stability during transistion but this shouldn't be a problem with your simple control loop.
  • Implement a controller per parameter set, one of the controllers is active while the others are in tracking mode, switch over when another set of parameters is required. This will ensure, that the controller runs instantly with the correct parameters which typically doesn't destabilise the control loop. (Simulink PID Block, search for tracking)
  • Try to find a function that expresses the perfect controller parameters based on the current load situation and adjust the parameters accordingly. This might be tedious though.
  • $\begingroup$ Yeah, thanks for the answers. I will try them $\endgroup$
    – Ben
    Jan 19 '19 at 17:50
  • $\begingroup$ I have a current inner loop (high bandwidth) and a voltage outer loop (slow-ish bandwidth) $\endgroup$
    – Ben
    Jan 19 '19 at 17:51
  • $\begingroup$ @Ben So your using a PI controller for the current loop and a P controller for the voltage loop? A PD controller might be better suited for your voltage loop. $\endgroup$
    – Simon
    Jan 19 '19 at 19:02
  • $\begingroup$ PI+lead controller for voltage loop Lead controller is kind of similar to a derivative $\endgroup$
    – Ben
    Jan 20 '19 at 3:07
  • $\begingroup$ @Ben Ah, OK. I haven't looked at the concrete problem yet and don't know these things by heart xD. $\endgroup$
    – Simon
    Jan 20 '19 at 11:43

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.