Post on 19-Jul-2022
Modelado y respuesta libre / forzada (escalón) de un circuito RCcon dos fuentes de tensión© 2020, Antonio Sala Piqueras, Universitat Politècnica de València. Todos los derechos reservados.
Este código funcionó con Matlab R2020b
Objetivo: modelar un circuito de primer orden con dos fuentes de tensión. Obtener matriz de transferencia y
representación interna normalizada. Obtener respuesta escalón unitario, respuesta libre.
Análisis en representación interna (vbles. de estado).
Modelado físicoConsideremos el siguiente circuito:
syms U_1 U_2 %entradassyms i_1 i_2 V_c %salidassyms dVc_dt i_c %derivada de V_c temporal (deriv. estado) e intens. condensador (a eliminar)syms R_1 R_2 C %parámetros constantes
Modelo=[ i_1==(U_1-V_c)/R_1; i_2==(U_2-V_c)/R_2; ... dVc_dt==1/C*i_c; i_c==i_1+i_2 ]
Modelo =
Transformada de Laplace: matriz de transferencia, término cond. iniciales, yrespuesta ante escalón
syms s %vble. de Laplacesyms V_c_inicial %condiciones iniciales (si V_c(0) fuera "no nula")ModeloLaplace=subs(Modelo,dVc_dt,s*V_c-V_c_inicial)
ModeloLaplace =
1
length(symvar(ModeloLaplace))
ans = 11
Suponiendo conocidas entradas , , parámetros constantes , , C, la variable de Laplace s, y las
condiciones iniciales de , podemos despejar 4 cosas:
sol=solve(ModeloLaplace, i_1, i_2, V_c, i_c);salidas=[sol.i_1;sol.i_2;sol.V_c]
salidas =
%sol.i_c %podría ser salida, si yo quisiera pero no me apetece verla.MatrizDeTransFerencia=jacobian(salidas,[U_1;U_2])
MatrizDeTransFerencia =
size(MatrizDeTransFerencia)
ans = 1×2 3 2
TerminoCondIniciales=jacobian(salidas,V_c_inicial)*V_c_inicial
TerminoCondIniciales =
2
%TC2=simplify(salidas-MatrizDeTransFerencia*[U_1;U_2])
R_1=10;R_2=20;C=1e-3; %para obtener valores numéricosmdTNum=eval(MatrizDeTransFerencia)
mdTNum =
Si multiplicamos todo por y hacemos transformada inversa de Laplace, tenemos las seis respuestas
"forzadas" ante escalón (cond. iniciales tensión en condensador = 0 ):
RespEscalon=ilaplace(mdTNum*1/s)
RespEscalon =
Tfinal=0.06;fplot(RespEscalon(1,1),[0 Tfinal]), grid on, title("Resp. Escalón: entrada V_1, salida i_1"), ylabel("i_1"),xlabel("tiempo")
3
fplot(RespEscalon(2,1),[0 Tfinal]), grid on, title("Resp. Escalón: entrada V_1, salida i_2"), ylabel("i_2"),xlabel("tiempo")
4
fplot(RespEscalon(3,1),[0 Tfinal]), grid on, title("Resp. Escalón: entrada V_1, salida V_c"), ylabel("V_c"),xlabel("tiempo")
fplot(RespEscalon(1,2),[0 Tfinal]), grid on, title("Resp. Escalón: entrada V_2, salida i_1"), ylabel("i_1"),xlabel("tiempo")
5
fplot(RespEscalon(2,2),[0 Tfinal]), grid on, title("Resp. Escalón: entrada V_2, salida i_2"), ylabel("i_2"),xlabel("tiempo")
6
fplot(RespEscalon(3,2),[0 Tfinal]), grid on, title("Resp. Escalón: entrada V_2, salida V_c"), ylabel("V_c"),xlabel("tiempo")
Ante condiciones iniciales no nulas habría que sumar a los cálculos de respuesta forzada la respuesta libre
siguiente:
RespLibre=ilaplace(TerminoCondIniciales)
RespLibre =
Representación interna normalizada y respuesta ante escalón (controlsystem Toolbox)
symvar(Modelo)
7
ans =
length(ans)
ans = 10
solNorm=solve(Modelo, i_1, i_2, i_c, dVc_dt);Estados=[V_c];Entradas=[U_1;U_2];Ec_estado=solNorm.dVc_dt
Ec_estado =
Ec_Salida=[solNorm.i_1;solNorm.i_2;V_c]
Ec_Salida =
Asymbolic=jacobian(Ec_estado,Estados) %es de 1er orden, A es 1x1
Asymbolic =
Bsymbolic=jacobian(Ec_estado,Entradas) %1 estado x 2 entradas
Bsymbolic =
Csymbolic=jacobian(Ec_Salida,Estados) %3 salidas x 1 estado
Csymbolic =
Dsymbolic=jacobian(Ec_Salida,Entradas) %3 salidas x 2 entradas
Dsymbolic =
8
Podemos obtener la fórmula de la MdT a partir de la representación interna normalizada, con la fórmula
orden=1;MdTdesdeSS= ... simplify(Csymbolic*inv(s*eye(orden)-Asymbolic)*Bsymbolic+Dsymbolic)
MdTdesdeSS =
R_1=10;R_2=20;C=1e-3; %para obtener valores numéricosA=eval(Asymbolic)
A = -150
B=eval(Bsymbolic)
B = 1×2 100 50
C=eval(Csymbolic)
C = 3×1 -0.1000 -0.0500 1.0000
D=eval(Dsymbolic)
D = 3×2 0.1000 0 0 0.0500 0 0
sys=ss(A,B,C,D);sys.InputName={'U_1','U_2'};sys.OutputName={'i_1','i_2','V_c'};
La respuesta escalón ante condiciones iniciales cero sería:
step(sys), grid on
9
Nota: la respuesta ante condiciones iniciales no nulas se evaluaría con el comando initial y la respuesta
combinada ante entradas y condiciones arbitrarias con el comando lsim, no en los objetivos de este material.
initial(sys,2) %resp. libre empezando el condensador cargado en 2 Vgrid on
10
11