Convertitori statici

Lo schema di principio di un convertitore statico è il seguente:

I bipoli 120 sono, al momento, bipoli generici. Le convenzioni di segno andranno rispettare durante la trattazione ai fini di distinguere generatori e utilizzatori.

Il deviatore “r”, in questa sede, è un deviatore ideale: le commutazioni avvengono all’istante (non entra nella trattazione la caratteristica dell’interruttore).

L’induttore “L” serve per garantire la compatibilità nelle chiusure: chiudendo un carico capacitivo, infatti, si hanno delle sovracorrenti importanti che danneggerebbero l’interruttore.

Di contro, la capacità “C” serve per garantire la compatibilità sulle aperture: aprendo un carico induttivo, infatti, si avranno delle sovratensioni che verterebbero in maniera gravosa sull’interruttore.

L’interuttore si traduce in un “bit”: posizione 1 e posizione 0 .

Posizione deviatore relativa allo “stato logico” del bit r

Le equazioni del circuito sono dunque le seguenti:

v_L= rv_C-v_2-v_0

Tali relazioni sono valite istante per istante. In pratica (con commutazioni istantanee) il deviatore fa si che si abbiano due circuiti differenti per i suoi due stati. Esso rimane nella posizione “r=1” per un tempo t_{ON} e rimane nella posizione “r=0” per un tempo pari a t_{OFF} . Il periodo in esame sarà dunque :

T =   t_{ON} +  t_{OFF}

Passando ai valori medi:

\frac{1}{T}\int_{0}^{T}v_Ldt =  \frac{1}{T}\int_{0}^{T}  rv_C dt -  \frac{1}{T}\int_{0}^{T} v_2dt-  \frac{1}{T}\int_{0}^{T} v_0dt

Particolare attrenzione va rivolta all’addendo di tipo \frac{1}{T}\int_{0}^{T}  rvdt  :

Il termine integrando “rv ” lo si considera come prodotto di funzioni ortonormali. In tal caso, l’integrale del prodotto è pari al prodotto degli integrali.

i valori istantanei sono rappresentati in corsivo, mentre quelli medi sono rappresentati con lettere maiuscole:

\frac{1}{T}\int_{0}^{T}vdt =V
\frac{1}{T}\int_{0}^{T}r dt=  \frac{1}{T}\int_{0}^{ t_{ON} }1 dt + \frac{1}{T}\int_{  t_{ON} }^{ t_{OFF} }0 dt  =  \frac{1}{T}\int_{0}^{ t_{ON} }1 dt   = \frac{ t_{ON}  }{T} = D

Il termine D prende il nome di “Duty-Cycle” e può assumere valori da 0 a 1,
Le equazioni possono quindi essere scritte in termini di valor medio:

V_L = DV_C-V_2-V_0

Il valor medio della tensione sull’induttore, a regime, deve esser nullo (altrimenti la corrente crescerebbe a rampa virtualmente fino a raggiungere un valore infinito.

0 = DV_C-V_2-V_0
DV_C = V_2+V_0

Di seguito le differenti “configurazioni”.

step-DOWN

Data la seguente configurazione:

2 = cortocircuito
1 =Generatore
0 =Carico

Il bipolo 0 diventa il carico e il bipolo 1 il generatore. Il bipolo 2 viene cortocircuitato e dunque V2=0, V0 = Vut e V1 = Vg. . Notare che, nel caso specifico, Vc = Vg sempre.
Le equazioni diventano

DVg =V_ {ut}

La tensione sul carico è così determinabile (Vc=Vg):

V_{ut}=DVg

Il nome “step-down” deriva dal fatto che la tensione di uscita (Vut) è minore (o uguale) alla tensione del generatore.

NOTA: negando il segnale duty-cycle (che pilota il deviatore) si avrebbe:
V_{ut}=(1-D)Vg

0\leq D  \leq  1 => 0  \leq Vut  \leq Vg

Codice MatLab per l’analisi Dinamica. Si risolvono due circuiti separati (a seconda dello stato di “r”). La condizione iniziale per la corrente (V.D.S.) è lo stato finale del circuito precedentemente risolto. La risoluzione avviene per diversi periodi, fino alla condizione di regime. Si veda come risolvere un generico circuito in MatLab.

%STEP-DOWN
close all
clear 
clc
%Convertitore
L = 0.01;%[H]
%Generatore
Vg = 10; %[v]
%Carico
Rc = 1; %[ohm]
Lc =0.01; %[H]
%Duty-Cyle
D = 0.3;
%Periodo 
T = 0.01;
tau_c = (Lc+L)/(Rc);
n = 100;
n_periodi = 15;%numero periodi in esame
t_span_1 = 0:tau_c/n:D*T; 
t_span_2 = 0:tau_c/n:(1-D)*T;
%Equazione di maglia r=1
mr1 = @(t,i) -(Rc/(Lc+L))*i; 
%Equazione di maglia r=0
mr2 = @(t,i) (1/(Lc+L)*(Vg-Rc*i));
I = 0;
I_0 = 0; %corrente iniziale nulla
for i =1:n_periodi
[t_1,i_1] = ode23t(mr1, t_span_1,I_0);
%condizioni iniziali nuovo circuito = condizioni finali
%circuito precedente (I_0)
I_0 = i_1(end);
[t_2,i_2] = ode23t(mr2, t_span_2,I_0);
%condizioni iniziali nuovo circuito = condizioni finali
%circuito precedente (I_0)
I_0 = i_2(end);
I = [I;i_1;i_2];%concatena vettori corrente
end
I(1)=[];
t = 0:n_periodi*T/length(I):n_periodi*T;
t(end) = [];%APPROSSIMAZIONE:
%I e t devono avere lo stesso numero di elementi!
plot(t,I,'linewidth',1.5)
xlabel("Tempo [s]")
ylabel("Corrente [A]")
title("Corrente sul carico")
grid on

La verifica della bontà della simulazione è semplice. Si nota (dal grafico, ma serebbe possibile calcolarla agevolmente dallo script) che la corrente media a regime è pari a 7A per un Duty-Cycle di 0.3 (30%). A regime la tensione media su un induttore è nulla(Altrimenti la corrente salirebbe all’infinito), pertanto la tensione media sul carico è pari alla tensione media sulla resistenza Rc:

V_{ut }= I_{ut}media*Rc = 7v

(Nella simulazione si è impostato Rc = 1 ohm)

D=0.3 => Vut = (1-D)Vg = 0.7*10=7v

Notare che se si rallentasse la dinamica del carico (aumentando Lc o diminuendo lo smorzamento riducendo Rc), il sistema impiegherebbe più tempo ad arrivare a regime.

A parità di altri parametri, in blu la curva con L maggiore. In quel caso il sistema andrà a regime più tardi ma il ripple sarà minore. Si riesce anche ad appezzare come nel caso della curva rossa si intraveda una leggera curvatura del “dente”: ciò è dovuto al fatto che la costante di tempo è troppo piccola rispetto al periodo di commutazione, pertanto incomincia a distinguersi l’andamento esponenziale.

Variando il duty-cycle il valor medio di tensione (calcolato a regime) varia, coerentemente con la formulazione precedentemente illustrata:

NOTA: il carico è un R-L. La compatibilità della commutazione è garantita dall’induttanza. Il generatore infatti ha natura capacitiva. Per garantire la corretta commutazione è necessario che si comutino due circuiti di natura duale.

Lo step-down è un convertitore a diretto: è possibile collegare il carico direttamente alla sorgente (o disalimentarlo totalmente).

Step-up (BOOST)

Ancora una voltai versi scelti sono arbitrari ma i calcoli eseguiti dovranno essere coerenti con essi, in caso contrario si avranno dei risultati errati. In questa configurazione si ha che la tensione media di uscita (a regime) sarà (in modulo):

V_{ut}= \frac{1}{D}V_{g}

NOTA :si ramenta che i modelli presentati funzionano con duty-cycle negato.

Va osservato che lo schema proposto è al primo livello di progettazione, ovvero quello funzionale. Lo schema di un boost converter reale è il seguente:

Quando l’interruttore è chiuso, l’anodo del diodo è a potenziale minore rispetto al catodo, quindi si spegne. Questo fa si che non avvenga il passaggio di corrente dalla sezione del carico al generatore. Non è possibile rigenerare.

Come per il caso dello step-down, si analizzano separatamente i circuiti che si vengono a creare ai diversi stadi dell’interruttore.

circuiti separati

Si risolvono le equazioni differenziali mettendo come condizioni al contorno i valori delle v.d.s. all’istante finale delo stato precedente. Va osservato però che le cose si complicano a causa della presenza del diodo.

NOTA: Volendo costruire un modello che tenga conto anche del diodo bisognerebbe considerare che le correnti su L potrebbero cambiare di segno: ciò non può sucedre per via del diodo. Pertanto anche nel caso di r=0, nonappena IL sta per cambiare di segno, quello che succede è che viene escluso il circuito a sinistra (non vi sarà più il nodo).

Script MatLab

%BOOST
close all
clear 
clc
%Convertitore
L = 0.2;%[H]
C = 0.2; %[f]
%Generatore
Vg = 10; %[v]
%Carico
Rc = 1; %[ohm]
Lc =0.01; %[H]
%Duty-Cyle
D = 0.5;
%Periodo 
T = 0.06;
n = 1000;
n_periodi = 60;%numero periodi in esame
t_span_1 = 0:DT/n:DT;
t_span_2 = 0:(1-D)T/n:(1-D)T;
%Equazione di maglie r=1
f_m1 = @(t,i)  Vg/L; %equazione differenziale
i_0 = 0; %corrente iniziale nulla 
M_1= [ -Lc 0; 0 C];
K_1 = [-Rc 1;1 0];
options_1=odeset('Mass',M_1,'MassSingular','yes');
m1 = @(t,x) -K_1x ;
X_0_1 = [0;0]; 
%Equazione di maglie r=0
 M_2= [L 0 0; 0 Lc 0; 0 0 C]; 
K_2= [0 0 1; 0 Rc -1; -1 1 0]; 
b = [-Vg; 0; 0]; 
options_2=odeset('Mass',M_2,'MassSingular','yes'); 
m2 = @(t,x) -K_2x -b;
X_0_2 = [0;0;0];
I = 0;
for i =1:n_periodi
 [t,i] = ode23(f_m1, t_span_1, i_0);%solver
 I_L = [I_L;i];
 [t,x]= ode23t(m1,t_span_1,X_0_1,options_1);
 X_0_2 = [i(end);x(end,1);x(end,2)];
 I = [I;x(:,1)];
 [t,x]= ode23t(m2,t_span_2,X_0_2,options_2);
 I_L = [I_L;x(:,1)];
 X_0_1 = [x(end,2);x(end,3)];
 i_0 = x(end,1);
 I = [I;x(:,2)];
end
I(1)=[];
figure;
t = 0:n_periodiT/length(I):n_periodiT;
t(end) = [];%APPROSSIMAZIONE:
plot(t,I,'linewidth',1.5)
xlabel("Tempo [s]")
ylabel("Corrente [A]")
title("Corrente sul carico")
grid on
axis([0 t(end) 0 25])

Con un duty-cycle del 50% si ha una corrente media sul carico (a regime) di 20A: che su un carico Rc-Lc (Rc = 1ohm) corrisponde ad una tensione media pari alla caduta su Rc: 20v.

Va tenuto presente che si tratta di un circuito del secondo ordine e che quindi, se non ben progettato, potrebbe creare dei problemi:

Rispetto al caso precedente quì si è ridotta L ed aumentato C.

Matteo Gentileschi

Lascia un commento