LLC resonant converter — first-harmonic design

A worked design for a half-bridge LLC stage, carried out the way the textbooks do it: replace the square wave by its first harmonic, replace the rectifier and its load by the equivalent resistance they present at that frequency, and what is left is a linear network that can be written down. Steigerwald's 1988 comparison of resonant topologies is where the method comes from, and every converter application note since repeats it.

It is here because it is the shape a real engineering worksheet has: a page of stated inputs, a chain of definitions that never mutates anything, a complex impedance, three gain curves that have to be compared against each other, and a verdict at the end that says whether the design meets the specification.

tank

The specification.

Vbus=400⁢V
Vout=48⁢V
Pout=1000⁢W
fsw_min=60⁢kHz
fsw_max=200⁢kHz

The bridge drives a square wave between 0 and V_bus. Only its first harmonic is kept: peak 4/π of the half-swing, and the network sees the rms of that.

Vsq_pk=4π·Vbus2=4π·400⁢V2=254.648⁢V
Vsq_rms=Vsq_pk2=254.648⁢V2=180.063⁢V

The rectifier and the output load together look resistive to that harmonic. The 8/π² is the same 4/π twice over — once for the voltage the bridge applies and once for the current the rectifier draws.

Rload=Vout2Pout=(48⁢V)21000⁢W=2.304⁢Ω
Iout=PoutVout=1000⁢W48⁢V=20.8333⁢A
n=VbusVout=400⁢V48⁢V=8.33333
Rac=8π2·n2·Rload=8π2·8.333332·2.304⁢Ω=129.691⁢Ω

The tank is chosen from three numbers: where it resonates, how heavily it is damped at full load, and how much magnetising inductance sits across it.

f0=100⁢kHz
Qnom=0.45
Ln=4

Everything else follows. Z0 is the characteristic impedance the chosen Q asks for at this load; the resonant frequency then fixes the two components.

Z0=Qnom·Rac=0.45·129.691⁢Ω=58.361⁢Ω
T0=12·π·f0=12·π·100⁢kHz=1.59155×10−6⁢s
Lr=Z0·T0=58.361⁢Ω·1.59155×10−6⁢s=92.8844⁢µH
Cr=T0Z0=1.59155×10−6⁢s58.361⁢Ω=27.2708⁢nF
Lm=Ln·Lr=4·92.8844⁢µH=371.538⁢µH

Worth checking that the parts that came out reproduce the numbers they were derived from, since a slip in the algebra above would not show up anywhere else on the page.

f0check=12·π·Lr·Cr=12·π·92.8844⁢µH·27.2708⁢nF=100⁢kHz
Qcheck=LrCrRac=92.8844⁢µH27.2708⁢nF129.691⁢Ω=0.45

The second resonance, with the magnetising inductance in series. The converter cannot be operated below it, so it is the floor on the sweep.

fmin_res=12·π·Cr·(Lr+Lm)=12·π·27.2708⁢nF·(92.8844⁢µH+371.538⁢µH)=44.7214⁢kHz

The tank impedance seen by the bridge: Lr and Cr in series with Lm in parallel with the reflected load. Complex, because the phase is the whole point — the bridge has to see an inductive load to switch softly.

fn X_Lr defined
fn X_Lm defined
fn X_Cr defined
fn Z_par defined
fn Z_in defined

Taken apart the three ways a worksheet asks for.

Zat_f0=Z_in⁡(f0)=Z_in⁡(100⁢kHz)=(99.1036 + 55.0575i) ohm
Rin=Re⁡(Zat_f0)=Re⁡((99.1036 + 55.0575i) Ω)=99.1036⁢Ω
Xin=Im⁡(Zat_f0)=Im⁡((99.1036 + 55.0575i) Ω)=55.0575⁢Ω
mag=|Zat_f0|=|(99.1036 + 55.0575i) Ω|=113.37⁢ohm
phase=arg⁡(Zat_f0)·180π=arg⁡((99.1036 + 55.0575i) Ω)·180π=29.0546

Positive is inductive, which is the half of the plane the bridge must stay in.

fn phase_deg defined
softswitching=phase_deg⁡(fsw_min)>0=phase_deg⁡(60⁢kHz)>0=1

The gain, normalised to the resonant frequency. This is the expression the whole first-harmonic method exists to produce.

fn gain defined

A family of curves is written by naming its members, so the load each one stands for has a name on the page rather than a number in a call.

fn light defined
fn nominal defined
fn heavy defined
plot⁡(light,nominal,heavy,fsw_min,fsw_max)
100000 150000 200000 0.5 1 1.5 2 2.5 Hz light nominal heavy
gain

Unity at resonance, whatever the load — the property that makes f0 the design point. Below it the converter boosts, above it it bucks.

nominal⁡(f0)=nominal⁡(100⁢kHz)=1
light⁡(f0)=light⁡(100⁢kHz)=1
heavy⁡(f0)=heavy⁡(100⁢kHz)=1

Where the nominal curve peaks, and how much gain is there. The slope is exact rather than a difference quotient, so the peak is found by asking where the slope crosses zero.

fn slope defined
fpeak=roots⁡(slope,fmin_res,f0)=roots⁡(slope,44.7214⁢kHz,100⁢kHz)=56.0867⁢kHz
Mpeak=nominal⁡(fpeak)=nominal⁡(56.0867⁢kHz)=1.62792

The gain the specification actually demands, at both ends of the input range.

Vbus_min=340⁢V
Vbus_max=420⁢V
Mneeded_max=n·VoutVbus_min=8.33333·48⁢V340⁢V=1.17647
Mneeded_min=n·VoutVbus_max=8.33333·48⁢V420⁢V=0.952381
margin=Mpeak−Mneeded_max=1.62792−1.17647=0.451451
verdict={if margin > 0 then "gain margin available" else "redesign: peak gain too low"if margin>0if margin > 0 then "gain margin available" else "redesign: peak gain too low"otherwise={if 0.451451 > 0 then "gain margin available" else "redesign: peak gain too low"if 0.451451>0if 0.451451 > 0 then "gain margin available" else "redesign: peak gain too low"otherwise="gain margin available"

The impedance curve, drawn as a magnitude in ohms so the axis is a number.

fn Z_mag defined
fn Z_ohm defined
plot⁡(Zohm,fsw_min,fsw_max)
100000 150000 200000 50 100 150 200 Hz

The lowest impedance across the operating range bounds the tank current, and min over a sampled vector is how a worksheet asks that without a loop.

sweep=range⁡(fsw_min,fsw_max,10⁢kHz)=range⁡(60⁢kHz,200⁢kHz,10⁢kHz)=[60000 Hz, 70000 Hz, 80000 Hz, 90000 Hz, 100000 Hz, 110000 Hz, 120000 Hz, 130000 Hz, 140000 Hz, 150000 Hz, 160000 Hz, 170000 Hz, 180000 Hz, 190000 Hz, 200000 Hz]
Zsweep=map⁡(Zohm,sweep)=map⁡(Zohm,[60000 Hz, 70000 Hz, 80000 Hz, 90000 Hz, 100000 Hz, 110000 Hz, 120000 Hz, 130000 Hz, 140000 Hz, 150000 Hz, 160000 Hz, 170000 Hz, 180000 Hz, 190000 Hz, 200000 Hz])=[69.8676, 82.2021, 94.0515, 104.415, 113.37, 121.196, 128.16, 134.482, 140.327, 145.824, 151.067, 156.128, 161.059, 165.902, 170.687]
Zlow=min⁡(Zsweep)=min⁡([69.8676, 82.2021, 94.0515, 104.415, 113.37, 121.196, 128.16, 134.482, 140.327, 145.824, 151.067, 156.128, 161.059, 165.902, 170.687])=69.8676
Itank_max=Vsq_rmsZlow⁢ohm=180.063⁢V69.8676⁢ohm=2.57721⁢A

Currents and stresses, which is what the design is finally judged on.

Ipri=PoutVsq_rms=1000⁢W180.063⁢V=5.5536⁢A
VCr_pk=Ipri·2·X_Cr⁡(f0)=5.5536⁢A·2·X_Cr⁡(100⁢kHz)=458.366⁢V
ELr=12·Lr·(Ipri·2)2=12·92.8844⁢µH·(5.5536⁢A·2)2=2.86479⁢mJ

Rated against the specification.

VCr_rating=630⁢V
capacitorok=VCr_pk<VCr_rating=458.366⁢V<630⁢V=1