Proportional resonant controller
Table of Contents
This article presents the basic theory of operation of a proportional resonant controller, as well as introduces its use for the control of single-phase voltage source inverters. Its implementation in Simulink and C++ code is available for download.
What is a proportional resonant controller?
A proportional resonant controller (abbreviated PR controller), is a particular type of transfer function that is often implemented for the closed-loop control of systems with a sinusoidal behavior. As their name indicates, they possess both a proportional and a resonant term, which can be tuned independently. More resonant terms can also be added to attenuate specific harmonics.
In power electronics, proportional resonant controllers (PR) have attracted significant interest for AC current/voltage control applications due to their performance and simple implementation.
Indeed, in DC applications, conventional PI controllers provide excellent performance, notably a minimal steady-state error, thanks to the (almost) infinite DC gain provided by the integral control action. However, in AC applications, PI controller(s) in stationary reference frame inevitably present a delayed tracking response, because finite gains at the fundamental frequency cannot prevent steady-state error.
A well-known countermeasure to this shortcoming is the implementation of the control within a synchronous reference frame. This means that PI controller(s) are implemented inside a rotating reference frame (dq), which is synchronized with the AC frequency (e.g. of the grid or the electric motor, see TN106). This allows re-locating the (almost) infinite DC gain at the desired frequency, namely 50/60Hz (or the motor rotating speed).
Proportional resonant controllers offer an alternative to this conventional approach. As they operate directly in the stationary reference frame, no coordinate transformations are required. Furthermore, their resonant term offers a finite, but very high, gain at the targeted AC frequency, which achieves the same tracking and perturbation rejection capabilities as PI controller(s) in a rotating reference frame (dq-control).
In single-phase systems, the fact that no Park transformation is needed is a significant benefit since the formulation of the direct and quadrature axes is not obvious (see TN124 on fictive axis emulation).
In three-phase systems, controlling unbalanced AC currents and voltages in a stationary reference frame avoids having to decouple the controlled variables as would be necessary in a rotating reference frame (dq). This presents a significant advantage of the PR controller in a stationary reference frame (\(\alpha \beta\)) compared to PI controller(s) in the synchronous reference frame (dq).
Operating principles of proportional resonant control
In essence, the transfer function of proportional resonant (PR) controllers transfer function can be derived from a PI controller in synchronous reference frame (dq) using Laplace and Park transformation. The result of this transformation leads to the following transfer function [1] :
$$ G_{C}(s)=K_{p}+\displaystyle\frac{2K_{i}s}{s^{2}+\omega_{0}^{2}} $$
where \(\omega_0\) designates the target reference current frequency. In this expression, the denominator term \(s^{2}+\omega_{0}^{2}\) creates infinite control gain at \(\omega_0\).
Practically, this expression may be difficult to implement into a digital controller, which is why a more practical alternative is to introduce some damping around the resonant frequency, resulting in:
$$ G_{C}(s)=G_{Cp}(s)+G_{Cr}(s)=K_{p}+\displaystyle\frac{2K_{i}\omega_{c}s}{s^{2}+2\omega_{c}s+\omega_{0}^{2}} $$
were \(\omega_c\) designates the resonant cut-off frequency (i.e. width of the resonant filter). In this second expression, the gain at \(\omega_0\) is now finite, but still high enough for enforcing a sufficiently small steady-state error. Interestingly, the widening of the bandwidth around \(\omega_0\) also offers increased tolerance towards slight frequency deviations, such as in most practical grid-tied applications.
Proportional resonant digital control implementation
A practical implementation can be easily derived using the bilinear (Tustin) transform. The resulting discrete transfer function for the resonant term, discretized with a period \(T_s\), yields:
$$ G_{Cr}(z) = \displaystyle \frac{Y(z)}{E(z)} = \displaystyle \frac{a_{1}(1-z^{-2})}{b_{0}+b_{1}z^{-1}+b_{2}z^{-2} } \quad\text{ with }\quad
\begin{array}{l}
a_1=4K_{i}T_{s} \omega_{c} \\
b_0=T_{s}^2\omega_{0}^2+4T_{s}\omega_{c}+4 \\
b_1=2T_{s}^2\omega_{0}^2-8 \\
b_2=T_{s}^2\omega_{0}^2-4T_{s}\omega_{c}+4
\end{array} $$
Once transformed into a difference equation, the resonant part yields:
$$y(k)=\displaystyle\frac{1}{b_0}[a_{1}\cdot e(k)-a_{1}\cdot e(k-2)-b_{1}\cdot y(k-1)-b_{2}\cdot y(k-2)]$$
This difference equation can be easily used for generating run-time code. The corresponding block diagram is given below and can be easily replicated in Simulink or PLECS. A similar implementation is given in [2].

Note that the gains \(b_0, b_1,\) and \(b_2\) depend on the fundamental frequency \(\omega_0\). The PR controller can thus be made frequency adaptive by calculating these coefficients at each execution step, using frequency estimation methods such as a SOGI-PLL for computing \(\omega_0\).
Tuning and performance evaluation
Proportional resonant controllers can be tuned relatively easily. There are three gains to determine: \(K_p, K_i,\) and \(\omega_c\). The proportional gain defines the bandwidth and the phase margin in the same way as a PI controller and thus can be tuned similarly, for example, by using the magnitude optimum method. The parameters \(K_i\) and \(\omega_c\), on the other hand, define the height and width of the resonance peak. The following figures show the impact of these parameters on the transfer function of the controller. Further details regarding the tuning can notably be found in [3].

Additionally, the following figure illustrates the step responses of the proposed resonant controller with various values of the resonant gain \(K_i\).

Academic references
[1] D. N. Zmood and D. G. Holmes, “Stationary frame current regulation of PWM inverters with zero steady-state error,” in IEEE Trans. on Pow. Elec., Vol. 18, N°. 3, May 2003.
[2] R. Teodorescu, F. Blaabjerg, M. Liserre and P. C. Loh, “Proportional resonant controllers and filters for grid-connected voltage-source converters,” in IEE Proc. on Electr. Power Appl., Vol. 153, N°. 5, Sep. 2006.
[3] D. G. Holmes, T. A. Lipo, B. P. McGrath and W. Y. Kong, “Optimized Design of Stationary Frame Three Phase AC Current Regulators,” in IEEE Trans. on Pow. Elec., Nov. 2009.
B-Box / B-Board implementation
Simulink
The Simulink model provided above contains a subsystem that uses the above-presented resonant controller implementation. This block can easily be integrated into any control algorithm. Besides, the provided dialog box offers simple configuration parameters.


C/C++ code
The imperix IDE gives access to a library containing numerous pre-written and pre-optimized functions. Controllers such as P, PI, PID and PR are already available and can be found in the controllers.h/.cpp
files.
As for all controllers, proportional resonant controllers are based on:
- A pseudo-object
PRcontroller
, which contains pre-computed parameters as well as state variables. - A configuration function, meant to be called during
UserInit()
, namedConfigPrController()
. - A run-time function, meant to be called during the user-level ISR, such as
UserInterrupt()
, namedRunPrController()
.
The necessary parameters are documented within the controller.h header file. They are namely:
Kp
andKi
, proportional and integral gain, respectively.wres
, which is the nominal frequency (center of the resonant term, in rad/s.), as well aswdamp
, the “width” of the resonant term (limits the quality factor of the resonant term).tsample
, corresponding to the sampling (interrupt) period.

Implementation example
#include "../API/controllers.h"
PrController mycontroller; #resonant controller object
float Kp = 10.0;
float Ki = 500.0;
float w0 = TWO_PI*50.0;
float wc = 10.0;
tUserSafe UserInit(void)
{
ConfigPrController(&mycontroller, Kp, Ki, w0, wc, SAMPLING_PERIOD);
return SAFE;
}
Code language: C++ (cpp)
tUserSafe UserInterrupt(void)
{
//... some code
Evsi = Vgrid + RunPrController(&mycontroller, Igrid_ref - Igrid);
//... some code
return SAFE;
}
Code language: C++ (cpp)
Experimental results
In order to illustrate the performance of the proposed PR controller implementation, current control results are shown below. A current reference step is performed in both simulation (dark red) and experimental (light red). The following graphs show a comparison between both results :

As it can be seen, the current matches the given reference in steady state. However, slight discrepancies between simulation and experimental results are observed due to harmonic distortions present on the grid.