I am attempting to design a closed loop three-phase rectifier with hysteresis control using MATLAB simulink. The outer loop compares output DC voltage with reference voltage, given to a PI controller and the output of the PI controller is multiplied with unity sin waves to generate three-phase reference currents given to the hysteresis controller. It is better described in this paper: https://www.icats.ws/proceedings2015/Renewable%20Energy%20and%20Power%20Electronics/ICATS_2015_submission_152.pdf

This is the block diagram of controller in simulink (IR,IY, IB and VR, VY, VB are input currents and voltages of the three-phase rectifier): enter image description here

No matter what I do, I cannot seem to get the right output. I have tried different methods of tuning, and limiting PI output with a saturator yet the results don't seem to change.I am expecting a DC voltage of 600V yet I only get like 10V, something like this: enter image description here

I could even attach the simulink file if anyone would be willing to take a look! This is a fairly simple controller yet idk why I am not able to get this right! PLEASE HELP!

Edit: This is the full circuit. The DC voltage at the output capacitor is the waveform shown above.

enter image description here

Edit 2: Link to simulink file: https://drive.google.com/file/d/1XwaKvbu3KuRrH_qxiBRG9FGturlkCRJ4/view?usp=sharing

  • 3
    \$\begingroup\$ Why is this been downvoted and why is there a vote to close as "Opinion based". This is dissapointing for this site, this is a valid question \$\endgroup\$
    – user16222
    Feb 10, 2022 at 12:17
  • \$\begingroup\$ Is this 100% simulink or do you have the electrical domain in Simscape? I suspect this downto trying to capture a non-causal system using a signal-flow methodology \$\endgroup\$
    – user16222
    Feb 10, 2022 at 12:20
  • \$\begingroup\$ @JonRB Yeah some blocks are from specialised power system library in simscape but there were no connection or compatibility issues. Infact I had previously successfully implemented another control method using more or less the same blocks. It's just this hysteresis control strategy that's not working. \$\endgroup\$ Feb 10, 2022 at 12:49
  • 1
    \$\begingroup\$ How does the waveform shown relate to any node on the diagram shown above it? \$\endgroup\$
    – Andy aka
    Feb 10, 2022 at 13:13
  • \$\begingroup\$ @Andyaka Hello, so that diagram only shows the controller. I hadn't added the whole circuit diagram as it is fairly standard three phase rectifier but I will add it for clarity \$\endgroup\$ Feb 10, 2022 at 15:14

1 Answer 1


All active rectifiers have one common requirement - MUST be in-sync with the supply voltage. If you are out of sync however two things happen

  1. DPF concerns and thus could violate some power quality requirements
  2. Collapsing DCLink as you short the bus out because you fire in the wrong quadrant

without looking into details, I suspect #2 is the issue.

The method you are proceeding with is using the Matlab PLL blockset to generate a per-source angular sawtooth, from which you generate a PU reference sinewave for Vabc (120deg separation). Perfectly fine and the method I use is similar to a Clarke transformation and a TypeII tracker to perform exactly the same task.

Conceptually the hysteresis control is also the classic way: current demand from PI multiplied by the PU sine references going into a comparator to produce the PWM

So there is going to be one of 5 things wrong

  1. Your references are wrong - you have a scope on VR and the PLL output, do the same for all 3 channels to ensure the reference is correct and in alignment to the AC
  2. Your PI gains are wrong. the input to the PI is the the voltage error and the output is the current DEMAND The timeconstant is related to the series boost inductors and thus the gains need to be correct. Consider making a PI out of fundamental blocks instead of the macro block so you can easily scope the error, P-gain, I-gain, summation. Make sure the saturation limits are appropriate
  3. Simulation time... is it discrete or continuous? what is the value? Have you considered using Simscape instead of SimPowerSystems.
  4. any boost converter (2l like this or 3l) can't really operate from 0V... typically the system is permitted to charge up to the natural rectification level before boosting. Your shots show the system attempting to boost from the start. Include an ENABLE and delay the boost function until say 5ms from the start if 400Hz or 30ms if 50Hz.
  5. Loading vs control. There is a relationship between the delta-V you can reliably boost to, the boost inductors and the minimum load. You are boosting to 600V, if this is from a 400-ll (ie 540V dcl) that +60V boost might be too tight and the controller will run away and "regulate" to a higher voltage. Boosting from 200V-ll (ie 270Vdcl) is viable boosting to 600V. NOTE its not that it is impossible, you need some sort of hiccup mode to stop switching, now hysteresis control could produce 1MHz switching freq so your simulation might show it is ok ... if you put viable minimum pulsewidth and deadtime into the PWM stage you will see this problem
  6. hysteresis based 2l converters have some serious limitations and while this is a great testcase you might need to consider moving onto a FOC type solution with a SVPWM output stage

==update== So this is an example in SIMSCAPE (next gen physical domain simulator in matlab) NOTE: the loops are not tunes fantastically, it is just an example. ALso there is load changes throughout.

  1. Mini-inrush (I preset the cap at 500V)
  2. 100W
  3. 10kW
  4. 30kW

enter image description here

enter image description here

Once you have gone through my suggestion list, there is one other thing that is required, you need to either invert the current feedback OR swap UPPER/LOWER (on a leg) gatedrive, I did it via invertering the RELAY block output logic ( >0.1 output 0, < -0.1 output 1).
Why do you need to turn LOWER devices on if the current is too low? well this is a booster so you need to charge up the line inductors (ie drag them to a lower potential) so that they will force current to flow when you turn them off to boost the DCLink


Review of OP model.

So there are several things wrong with this model that all contribute to it not working.

  1. no startup consideration. The DCLink capactor is 5mF and is to be charged up from 0V at the same time the PI is also winding up trying to meet the voltage demand of 600V
  2. PWM generation is the wrong way. you need to turn the LOWER devices on if the error is positive. For DC->AC power flow you want upper devices on to pull the load up for more current into the load, for AC->DC you want to pull the source down for more current to flow
  3. The 3 PLL (to extract the AC voltage) are set with a starting phase of zero. This means all three need a minimum of one complete electrical cycle to lock-on and when you consider point #1 and point #2 it was never going to be possible (well #2 makes it impossible, #1 improbable)
  4. a standing resistive load (36R -> 10kW) that the system must start into and thus #1,2 and 3 make this even harder
  5. The hysteresis as well as being inverted (for boosted rectification) is also 2A (+-1A) and for 10kW that is a large amount of ripple, especially with the large line inductors.


set the PLL with an initial phase to help it lock on

YELLOW = -120deg and BLUE +120deg

pre: enter image description here

post fix: enter image description here

Look at that difference, the controller stands a chance of actually using the correct phase information instead of shorting out the supply. This only works in simulink (and any simulators) as they typically start from teh same point but in an industrial application this startup case MUST be considered and that is why during "precharge" the controller is allowed to settle to sync with the supply

Set initial voltage of the capacitor The inrush from the supply and holding off the model functioning MUST be considered and is a real concern for practical drives as you can easily blow capacitors, diode, MOSFET, upstream breakers... for now I have set the initial voltage for time in simulation and time to implement a real precharge

enter image description here

Swap PWM sense This is required to implement the boost feature There are many ways todo it and the quickest was in the RELAY (the pwm generation) enter image description here

PI gains They are well out of sync... Kp = 5 Ki = 2500 and saturation limits of 150A when 10kW only needs 16A on the DC side

Kp reduced to 2, Ki reduced to 100, PI clamps [0, 30] (from [0, 150])

enter image description here enter image description here

Now I could share the updated SimPowerSystem model but the point is to understand why aspects had to be changed so it would be better if you did the changes on your model.

I could share my simscape model but well this is mine

  • 1
    \$\begingroup\$ thank you once again. I have worked through the list but I am still not getting it right. Could you please share the model file with me? It would be immensely helpful. \$\endgroup\$ Feb 11, 2022 at 6:54
  • 1
    \$\begingroup\$ OMG yes it worked!! I fixed it following your steps, thank you so much. Honestly I am blown away by how much time you gave and the way you explained it! I can't thank you enough. Unrelated but, how does one learn these things? Like the issues that you pointed out, I could never have noticed on my own, and no specific resource describes these things. I read up about rectifiers in general but no where were the specific points related to switching, loading, control, start-up were described. Can you suggest any learning resources? Or any general advice to master these things? \$\endgroup\$ Feb 11, 2022 at 17:06
  • 1
    \$\begingroup\$ also how did you fix the kp and ki values? Since the inner hysteresis loop makes it non-linear I was finding it difficult to analyze and tune as we do for a simple plant. And for fixing the saturation limit, you chose 30 because of the input current limit right (for 10kW)? \$\endgroup\$ Feb 11, 2022 at 17:27
  • 2
    \$\begingroup\$ You won't find any book on the practical considerations, it comes from experience or working with drives for a long time. The Kp,Kp... gut feel and TOTALLY not tuned but it is stable and it was based upon the response once I corrected the start up issues. Tuning will be based upon the boost inductor as your plant. the saturation limit... maybe 150A is appropriate for your end system but for this. not at all but 40A might be a better limit for 10kW load, such a limit needs to be high enough for the system to respond but low enough that WHEN something goes wrong it doesn't compound the situation \$\endgroup\$
    – user16222
    Feb 11, 2022 at 18:11

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.