This application note details a possible control implementation for a three-phase back-to-back converter. In the proposed example, the rectifier is tied to the grid using an LCL filter, in a transformer-less fashion. On the other side, the inverter drives a passive RL load.


The following zip file contains an example of control using MATLAB Simulink.

Minimum requirements:

  • Imperix ACG SDK or newer.
  • MATLAB Simulink R2016a or newer.
  • Plexim PLECS VIEWER 4.4.2 or newer (free)

Operating principles

Grid connection

As with any Voltage Source Converter (VSC) topology, this system requires that the DC bus is appropriately pre-charged before normal operation can be initiated (\begin{array}{l}V_{DC,min}=\widehat{V_{g,ll}}\end{array}). To this end, a pre-charge circuit is introduced between the converter and the grid, with a set of three resistors that limit the DC bus charging current. These resistors can be later bypassed during normal operation, thanks to a software-controlled relay. TN131 gives further recommendations regarding system start-up techniques for grid-tied applications.

Grid-side control

The control of the inverter is subdivided into 2 parts. First, a closed-loop controller regulates the bus voltage by drawing current from the grid. Second, this grid current is controlled in the stationary reference frame, with an additional term for the active damping of the LCL filter. The relevant documentation is given below:

Load-side control

On the load side, a passive load is used. This allows the application example to be as generic as possible. Typically, this second converter may also be part of a drive (see for instance AN004, which addresses the direct torque control of a permanent magnet synchronous machine).

In the present case, the load currents are controlled using a closed-loop controller in the dq domain. The grid angle Ξ is re-used for the sake of simplicity. However, a different angle generation mechanism can be used depending on the application.

Further information on the dq-type current control can be found in TN106: Vector current control.


The proposed control was implemented in Matlab/Simulink and the system model was simulated with PLECS. The following graphs show the simulation results obtained with:

  • Grid voltage: 400V RMS

  • DC bus voltage: 725V

  • Reference load peak current: Step from 0A to 11A at t=300ms

  • Load resistor: 30Ω

  • Switching frequency: 20kHz

A reference load current step is imposed at t=300ms. During the transient, a voltage drop of 4V can be observed on the DC bus voltage. This voltage drop (0.6% of the DC bus voltage) is corrected by the bus voltage control. In this application example, the current drawn by the load-side inverter is not feed-forwarded into the bus voltage control. Naturally, the introduction of such compensation would improve the control dynamics and reduce this voltage drop.

Looking at the presented simulation results, the following comments can be made:

  • During the transient, as well as during steady-state, the grid current is in phase with the grid voltage, as specified by the reference (Ig_q_ref = 0).

  • The load current Il_d reaches its reference in 25 ms (95% of the final value), following the same behavior as a step response of a first-order system.

  • The grid currents (Ig_alpha, Ig_beta) follow their references with an instantaneous error of less than 0.02A.

The following figures plot the grid and load currents, respectively (phase A). The load current is filtered through a basic LR-type filter, while the grid current is filtered by a LCL-type filter. The load current ripple reaches 1.7A at this operating point. The grid current ripple is significantly lower and reaches the design value of 10mA.

Quick-start guide

Required hardware and wiring

Experimentation on this Application Note can be made using standard imperix equipment:

  • 1x “Type A” rack with 6x PEB8024 modules

  • 2x passive filters racks or:

    • 6x 2.5mH inductor (L1,L2)

    • 3x 3”F capacitor (Cf)

    • 3x 1Ω resistor (Rf)

    • 3x 2.5 mH inductor (Ll)

  • 6x DIN800V voltage sensors

  • 3x DIN50A current sensors

  • 1x grid connection panel

In addition, the following equipment is needed:

  • 3x load resistors (Rl)

The side figure shows the proposed wiring for this application.

The following table summarizes the parameters used to test this application.







Grid voltage (l-l, RMS)

230 V

Bus voltage reference

725 V

PWM frequency

20 kHz

Inductance L1 (LCL)


Capacitance Cf (LCL)

3 ”F

Inductance L2 (LCL)

2.5 mH

Resistance R1 (LCL)

22 mΩ

Resistance Rf (LCL)

1 Ω

Resistance R2 (LCL)

22 mΩ

Inductance Ll (load)

2.5 mH

Resistance Rl (load)

30 Ω

System start-up

These steps can be followed to start up the system:

  1. Generate run-time code for the provided Simulink file using imperix’s SDK for automated code generation by building the model (Ctrl+B). Consult the Quick-start guide if needed.

  2. Connect to the B-Box RCP using BB Control. To do so, consult the Quick-start guide if needed.

  3. In the debugging tab, display the following variables: precharge_relay, bypass_relay, gridSide_active, Vdc, Vdc_ref, loadSide_active and Il_d_ref.
  4. Check that all analog inputs are correctly configured and protection thresholds appropriately adjusted. Consult PN105 for detailed instructions if needed.

  5. Pre-charge the DC bus through the precharge resistors by closing the precharge relay (set precharge_relay = 1, while bypass_relay is still 0).

  6. When the DC bus voltage is stabilized (i.e. when grid current is negligible), close the bypass relay (bypass_relay = 1).

  7. Check that Vg_d is constant and that Vg_q is close to zero to validate the phase order and the correct operation of the PLL.

  8. Set the desired DC voltage setpoint (e.g. 725V) and start the rectifier control by setting gridSide_active = 1.

  9. Click on ‘Enable output’ to allow the generation of PWM signals.

  10. Set the desired load current Il_d_ref and start the load-side operation by setting loadSide_active = 1.

System shut down 

The following steps detail the procedure to shut down the system:

  1. Deactivate the load-side controller by setting loadSide_active = 0.

  2. Deactivate the grid-side controller by setting gridSide_active = 0. The DC bus voltage decreases to the rectified grid voltage within a few seconds.

  3. Disconnect the grid part (open precharge_relay and bypass_relay). The DC bus voltage decreases slowly.

  4. To dissipate the remaining DC bus energy in the load resistors, set a load current Ig_d_ref of 1A and restart the load current control (loadSide_active = 1). The DC bus voltage decreases quickly to zero.

  5. When Vdc is zero, disconnect the load part by setting Ig_d_ref = 0 and loadSide_active = 0.

  6. Block all PWM output signals by clicking on ‘Disable outputs’.

Remote control GUI

Altering the controller tunable parameters (e.g. relay commands, controller setpoints,...) can be done easily from BB Control. Alternatively, a GUI like the one shown below can be built to give instant access to all relevant variables. More information on how to develop a GUI using Matlab App Designer is given in PN130: GUI with the App Designer.

Experimental results

The following figures represent the experimental results obtained with:

  • Grid voltage: 400V RMS

  • DC bus voltage: 725V

  • Load reference peak current: 11A

  • Switching frequency: 20kHz

As in simulation, the grid current is in phase with the grid voltage, as specified by its zero quadrature reference value Ig_q_ref = 0. In this case, the reactive power is 0. Other setpoints could be specified.

All currents (grid Ig_alpha, Ig_beta and load Il_d) follow their reference value. A slightly larger error is visible compared to the simulation. Part of this difference can be explained by the relatively large distortion of the grid voltage (domestic grid voltage at imperix premises).

The next figure shows the results obtained using an oscilloscope under the same conditions. As it can be seen, all signals are in phase with the grid voltage and show a low level of distortion.

As expected, the load current ripple is significantly larger than the grid current ripple, which is hidden in the residual closed-loop control noise.

  • CH1 - yellow: the grid voltage (phase A) ,

  • CH2 - cyan: grid current (phase A)

  • CH3 - magenta: the load current (phase A)

  • No labels