I have been developing a control software for the grid connected three phase inverter i.e. for below given power electronics converter

enter image description here

The control software implements below given control algorithm (for the sake of clarity only the inner current control loop is mentioned)

enter image description here

As can be seen from the block diagram above the current control loop consists of two PI controllers in the synchronous reference frame \$(d,q)\$. Let's say I would like to tune the PI controllers based on the experimental method (I know that I can design the current controllers analytically based on known values of the parameters of the output filter) exploiting the step response of the closed loop (basically the Ziegler-Nichols method for the closed loop).

My first idea how to realize this experimental tuning procedure was following:

  1. connect three phase induction motor (I don't have any other load) to the output of the filter
  2. implement a piece of software ("step generator") capable to produce the "step" signal with modifiable amplitude and time duration at its output
  3. set some fix value of the transform angle for the inverse Park transform (let's say \$\theta = 0\,\mathrm{rad}\$)
  4. in the control software connect the output of the "step generator" to the reference input of the PI controller for the id component and block the PI controller for the \$i_q\$ component (I don't want the connected induction motor starts rotating because of it wil start induce the voltages to the stator windings and it seems to me that those voltages are disturbances from the current PI controllers pointe of view)
  5. in the control software connect the output of the "step generator" to the reference input of the PI controller for the iq component and block the PI controller for the \$i_d\$ component (same reason as above)

My question is whether the procedure described above could work?


As far as the block \$(d,q)/(\alpha,\beta)\$ it implements the so called inverse Park transform i.e. \begin{equation} \begin{bmatrix} x_{\alpha} \\ x_{\beta} \end{bmatrix} = \begin{bmatrix} \cos\left(\theta\right) & -\sin\left(\theta\right) \\ \sin\left(\theta\right) & \cos\left(\theta\right) \\ \end{bmatrix} \cdot \begin{bmatrix} x_{d} \\ x_{q} \end{bmatrix} \end{equation}

  • \$\begingroup\$ I tried reading step 4 and 5 and couldn't quite follow. Are you basically saying that you will tune the two PI controllers separately? Will you tune each one of them by applying a few step responses and finding the parameters that give you a good current response? Lastly, I can't tell what that block [dq / \$\alpha \beta\$ ] is doing just from looking at it. So how could I know how \$v_d\$ \$v_q\$ affect the output and if the each PI can be tuned separately. \$\endgroup\$
    – jDAQ
    Commented Jun 10, 2021 at 5:46
  • \$\begingroup\$ @jDAQ thank you for your response. Yes, I am going to tune the two PI controllers separately based on the step responses. As far as the \$(d,q)/(\alpha,\beta)\$ block it represents the so called inverse Park transformation (for details please the edit). \$\endgroup\$
    – Steve
    Commented Jun 10, 2021 at 6:42

2 Answers 2


Since you have two PI controllers in there it only makes sense to tune them separately, by setting, in turn, \$i_d\$ to zero, and then \$i_q\$ to zero. You will need fairly high bandwidth in order for it to respond as fast as possible to changes in current, while the voltage loop (for the DC link) is usually slow, maybe even 10x slower. And the two paths that I see are to either set I=0 and P=1 and then adjust manually P and then I until you get satisactory results, or try to set both to some predefined values, e.g. P=1 and I=fs/4 (half Nyquist), then take it from there.

One thing to note is that you may want to start with a light load, because that's where the highest instabilities are (small loads cause little damping). That will almost surely require a lower P gain to start with.

Your method seems sound enough for testing the response to a step in the command. For a step in the load, I'd use a mechanical clamp, or something that can be added as suddenly as possible to the motor shaft; that would be a step load. No need to make it extreme. Always start small, so errors are easier to tame.

Take all I said with a grain of salt because I don't have much experience with these. In fact, the only reason I answered with something was because someone else might see the possible horrors of my answer and then try to correct them with a better one.


If you are trying the ZN method using the step response, you need to do it for the open loop plant. Not for the closed loop like you are trying here.

So here is what I think you should do:

  1. Connect the motor and lock the shaft so it doesn't rotate and interfere with your tuning.
  2. Set a fixed angle for the inverse transform.
  3. Apply the output of the step generator as a voltage (Vd or Vq) to the inverse transform while keeping the other voltage zero.
  4. Measure the output currents and apply the transform to get Id or Iq.
  5. Use the response for tuning the controller.

Then repeat this for the other axis.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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