¿Cómo resolver un circuito de refuerzo (o cualquier circuito RLC conmutado) en el dominio del tiempo?

2

Necesito modelar un circuito de refuerzo con la siguiente topología:

simular este circuito : esquema creado usando CircuitLab

Me interesa la tensión de la resistencia, por lo que encontré la ecuación diferencial de cada estado y la resolví por el método implícito de Euler, alternando la ecuación que se resuelve a medida que se cambia el estado.

Comparé los resultados con un simulador de circuito. Cada ecuación diferencial es correcta solo, pero cuando las puse juntas, una después de la otra, formando la dinámica de cambio activado, el resultado es incorrecto.

Estos son mis pasos:

Ecuación diferencial de 'estado ON' (solo la descarga del condensador)

$$ \ frac {dV_ {out}} {dt} = - \ frac {V_ {out}} {RC} $$

ecuación diferencial 'estado de apagado'

$$ \ frac {d ^ 2V_ {out}} {dt ^ 2} + \ frac {1} {RC} \ frac {dV_ {out}} {dt} + \ frac {1} {LC} V_ {out} = \ frac {V_ {in}} {LC} $$

Este es mi código (MATLAB):

R = 10; 
L = 1e-5; 
C = 1e-4;
Vin = 10; 

h = 1e-6;   % time step
sizeVector = 10000; % number of steps
t = 0:h:sizeVector*h-h;  % time vector

Vout = zeros(1,sizeVector); % output voltage vector
dVout = zeros(1,sizeVector); % first derivative vector

freqSw = 5e3; % switching frequency
D = zeros(1,sizeVector); % State of switch for each simulation step (duty cycle = 0.5)
D = sign(cos(2*pi*freqSw.*t + pi/2 + 0.001));
D(D<0) = 0;

for k=2:sizeVector
    if D(k) == 0
        % Off state
        Vout(k) = (Vout(k-1) + h*((dVout(k-1) + (h/(L*C))*Vin)/(1 + h/(R*C))))/(1 + (h^2/(L*C))/(1 + h/(R*C)));
        dVout(k) = (dVout(k-1) + h*(Vin/(L*C) - Vout(k)/(L*C)))/(1 + h/(R*C));
    end
    if D(k) == 1
        % On state
        Vout(k) = Vout(k-1)/(1+h/(R*C));
        dVout(k) = (Vout(k)-Vout(k-1))/h; % just for convenience
    end

end


figure(1)
plot(t,Vout)
xlabel('Time (s)')
ylabel('Voltage (V)')
hold on

Estas son las comparaciones entre los resultados de PSIM (rojo) y mi código en MATLAB (azul). (Para la descarga del condensador, consideré en ambos casos un voltaje inicial de 10V)

Estado abierto:

Estadocerrado:

Aumenteelconvertidorcomoenelcódigoanterior:

Nuncapuedoobtenerunatensióndeestadoestablesuperioramitensióndeentrada(10V,enestecaso),perolaformadeondapareceserconsistenteconcadaunadelasformasdeondadelosestadosporseparado.

Debehaberunerrorenmicódigoomefaltaalgúnpuntoimportante.¿Esestetipodesoluciónposible?

Editadodespuésdelasrespuestas:

Despuésdelassugerencias,cambiélaecuacióndiferencialdesegundoordenaunsistemadedosecuacionesdeprimerorden,paracalcularlacorrientedelinductor,locualesnecesarioporquecuandocomienzaelestadode"apagado", la corriente de los inductores debe ser una inicial condición. En el modelo anterior, no estaba considerando el cambio actual en 'on state'.

El sistema de "estado apagado":

\ begin {equation} \ begin {bmatrix} \ frac {dV_ {out}} {dt} \\ \ frac {dI_ {ind}} {dt} \ end {bmatrix} = \ begin {bmatrix} - \ frac {1} {RC} & \ frac {1} {C} \\ - \ frac {1} {L} & 0 \ end {bmatrix} \veces \ begin {bmatrix} V_ {out} \\ I_ {ind} \ end {bmatrix} + \ begin {bmatrix} 0 \\ \ frac {Vin} {L} \ end {bmatrix} \ end {ecuación}

El sistema 'on state': (en realidad no es un sistema, pero lo mantengo en orden matricial por simplicidad)

\ begin {equation} \ begin {bmatrix} \ frac {dV_ {out}} {dt} \\ \ frac {dI_ {ind}} {dt} \ end {bmatrix} = \ begin {bmatrix} - \ frac {1} {RC} & 0 \\ 0 & 0 \ end {bmatrix} \veces \ begin {bmatrix} V_ {out} \\ I_ {ind} \ end {bmatrix} + \ begin {bmatrix} 0 \\ \ frac {Vin} {L} \ end {bmatrix} \ end {ecuación}

Todavía hay un problema. De esta manera, no puedo evitar que la corriente del inductor sea negativa en el estado de "apagado", por lo que inserté una instrucción if en cada iteración de "estado de apagado". Si \ $ I_ {ind} < 0 \ $, resuelva el sistema nuevamente imponiendo \ $ I_ {ind} = 0 \ $. Esto se puede hacer simplemente estableciendo en cero los elementos relacionados con \ $ I_ {ind} \ $ en la matriz.

A continuación se muestran la comparación de resultados (PSIM, primero, MATLAB segundo) y el código.

R = 10; 
L = 1e-3; 
C = 1e-4;
Vin = 10; % DC input voltage

h = 1e-7;                % step
sizeVector = 120000;     % number of steps
t = 0:h:sizeVector*h-h;  % time vector

X = zeros(2,sizeVector); % state vector 

A = [-1/(R*C) 1/C ; -1/L 0]; % off state matrix
b = [0; Vin/L];              % off state vector

Aaux = [-1/(R*C) 0 ; 0 0];   % off state auxiliar matrix
baux = [0 ; 0];              % off state auxiliar vector

A2 = [-1/(R*C) 0; 0 0];      % on state matrix
b2 = [0; Vin/L];             % on state vector

freqSw = 5e3;               % switching frequency
D = zeros(1,sizeVector); % State of switch for each simulation step (duty cycle = 0.5)
D = sign(cos(2*pi*freqSw.*t + pi/2 + 0.001));
D(D<0) = 0;

for k=2:sizeVector

    if D(k) == 0 % off state 
        X(:,k) = (inv(eye(length(A)) - h*A))*(X(:,k-1) + h*b);
        if X(2,k) < 0 % avoid Iind < 0
            X(:,k) = (inv(eye(length(Aaux)) - h*Aaux))*(X(:,k-1) + h*baux);
        end

    end
    if D(k) == 1 % on state
        X(:,k) = (inv(eye(length(A2)) - h*A2))*(X(:,k-1) + h*b2);
    end
end


figure(1)
plot(t,X(1,:))
hold on
plot(t,X(2,:))
xlabel('Time (s)')
ylabel('Voltage (V)\Current(A)')
legend('V_{out}','I_{in}')
ylim([-6 36])
grid
hold on
    
pregunta Felipe Dicler

2 respuestas

0

Puedo ver al menos una cosa mal con tus ecuaciones (no he revisado tu código):

  • Debe haber una ecuación que describa la evolución de la corriente del inductor durante el "estado de encendido".

Probablemente solo mantendría un sistema de dos ecuaciones de primer orden en lugar de intentar escribir una ecuación de segundo orden. Matlab no tardará más en resolverlo de esa manera.

    
respondido por el The Photon
0

Una forma de analizar la conversión de refuerzo es calcular la energía almacenada en el inductor en función del Tiempo de conmutación, Tonelada, corriente, inductancia I, L cuando el interruptor está cerrado y luego igualarlo con la energía disipada en la carga en un bucle regulado .

P_in = 0.5 * L I² / T (Energía / tiempo cuando el interruptor está ENCENDIDO)
Pout = 0.5 * I * Vin * Toff / T (Apagado)
Suponiendo una conmutación sin pérdidas
voltaje de salida \ $ Vo = Vin \ sqrt {\ dfrac {kR_LT_ {on}} {2L}} \ $ para 0 < k < 1 con un bucle regulado

    
respondido por el Tony EE rocketscientist

Lea otras preguntas en las etiquetas