Need help with simulation of three-phase rectifier with hysteresis controller

MATLABpower-factor-correctionrectifiersimulinkthree phase

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

Best Answer

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

--EDIT--

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.

FIXES

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

Related Topic