**
**
人机界面的设计思路
本文选用matlab进行源码的编写,并运用appdesigner来进行可视化。人机界面的设计思路以及框架如下:
1.首先由于需要实现RC零输入状态,RC零响应状态等许多情况,所以选用了appdesigner中的切换按钮组,来实现一开始进入界面对于相应功能的选择。
2.选择完相应功能后,需要输入节点信息。选用一系列的标签和编辑框来输入信息,最后添加一个输入完成后点击的确定按钮。
3.再建立一个表和一个确定按钮。来显示已经输入的数据,并且也可以根据表中的数据来进行回调函数中对于数据的处理。核对完表中的数据无误后,点击确定按钮。
4.由于可能需要输入电容初始电压值,以及电感初始电流值,如RC零输入,RL零输入等情况,在这些情况下需要显示电容初始电压值以及电感初始电流值,因此在这些情况下还要显示相关的标签和编辑框,以及相应的确定按钮。
5.建立一个坐标区,把输出的图形显示在坐标区内。
6.建立时间标签以及电容电压标签(或电感电压标签),以及一个确定旋钮。在输入一个时间后,点击确定旋钮,确保输出相应的电压值。
7.为了界面的美观,一开始设定元件的可视情况,并且在相关按钮的回调函数中调整相关元件的可视情况。
一阶RC全响应时各个元件的显示情况如下:
理论准备部分:
1:首先编写一个子程序,使之能够实现对电路的戴维宁等效或诺顿等效
2:对于一阶RL、RC电路
RC零输入响应
1:先用戴维宁等效化简为基本电路:即一个电容和一个等效电阻的串联
2:代入等效电阻和电容值及其电压初始值到微分方程:RC (du_c)/dt+u_c=0(u_0=u_c (0_+))
3:解微分方程:u_c=u_0 e^- t/RC τ=RC
4:根据微分方程的解画出图像
RL零输入响应
1:先用戴维宁等效化简为基本电路:即一个电感和一个等效电阻的串联
2:代入等效电阻和电感值到微分方程:L/R (di(t))/dt+i(t)=0 i_0=i_L (0_+)
3:解微分方程:i=i_0 e^- Rt/L τ=L/R
4:根据微分方程的解画出图像
RC零状态响应
1:先用戴维宁等效化简为基本电路:即一个电感和一个等效电阻及等效电压源的串联
2:代入等效电阻、等效电压源和电容值到微分方程:RC (du_c)/dt+u_c=U_s
3: 解微分方程:u_c=U_S (1-e^- t/RC) τ=RC
4:根据微分方程的解画出图像
RL零状态响应
1:先用诺顿等效化简为基本电路:即一个电感和一个等效电阻及等效电流源的并联
2:代入等效电阻、等效电流源和电感值及其电流初始值到微分方程:L/R (di(t))/dt+i(t)=I_S
3:解微分方程:i=I_s (1-e^- Rt/L) τ=L/R
4:根据微分方程的解画出图像
RC全响应
1:先用戴维宁等效化简为基本电路:即一个电感和一个等效电阻及等效电压源的串联
2:代入等效电阻、等效电压源和电容值及其电压初始值到微分方程:RC (du_c)/dt+u_c=U_s(u_0=u_c (0_+))
3: 解微分方程:u_c=u_0 e^- t/RC +U_S (1-e^- t/RC) τ=RC
4:根据微分方程的解画出图像
RL全响应
1:先用诺顿等效化简为基本电路:即一个电感和一个等效电阻及等效电流源的并联
2:代入等效电阻、等效电流源和电感值及其电流初始值到微分方程:L/R (di(t))/dt+i(t)=I_S i_0=i_L (0_+)
3:解微分方程:i=i_0 e^- Rt/L+I_s (1-e^- Rt/L) τ=L/R
4:根据微分方程的解画出图像
对RLC二阶电路
RLC电路
1:先用戴维宁等效化简为基本电路:即一个电感、一个电容和一个等效电阻及一个等效电压源的串联(若为零输入响应,则等效后的电压源值为0)
2:代入等效电阻、等效电压源(若为零输入响应,则等效后的电压源值为0)和电容及其电压初始值、以及电感及其电流初始值到微分方程:LC (d^2 u_c)/(dt^2 )+RC (du_c)/dt+u_c=U_s 其中(u_0=u_c (0_+))(i_0=i_L (0_+)),若为零状态响应(u_0=u_c (0_+ )=0)(i_0=i_L (0_+ )=0)
3:解微分方程:
若R>2√(L/C) ,则有两个不相等的实数根
1:解出实数根p_1和p_2
2:解微分方程得:u_c=u_0/(p_1-p_2 )(p_2 e^(p_1 t)-p_1 e^(p_2 t))
3:i=C (du_c)/dt 、u_L=L (di(t))/dt
4:根据微分方程的解画图
若R<2√(L/C) ,则解为一对共轭复根
1:δ=R/2L 、ω2=1/LC-(R/2L)2、β=arctan(ω/δ)、ω_0=√(δ2+ω2 )
2:u_c=(U_0 ω_0)/ω e^(-δt)sin(ωt+β)
3:i=C (du_c)/dt 、u_L=L (di(t))/dt
4:根据微分方程的解画图
若R=2√(L/C) ,则解为一对相等的实数根
1:p_1=p_2=-R/2L;
2:u_c=(A_1+A_2 t) e^(-δt);
3:i=C (du_c)/dt 、u_L=L (di(t))/dt
4:根据微分方程的解画图
对于二阶GLC电路
先用诺顿等效化简为基本电路:即一个电感、一个电容和一个等效电阻及等效电流源的并联(若为零输入响应,则等效电流源则为0)、(若为零状态响应,则u_0=u_c (0_+ )=0)(i_0=i_L (0_+ )=0)
其他的分析方法与RLC类似,同样根据G与2√(C/L)的大小关系来分三种情况讨论
MATLAB的编程思路以及代码展示:
对于电路的理论分析以及等效过程和Python的编程思路相似,重点介绍如何处理输入的数据。总体的思路为:若为RC零输入,RL零输入,以及二阶的零输入情况,此时直接根据输入的数据解方程即可。否则就需要求出等效电源和等效电阻。
根据本app使用的求节点电压的算法,求出的解向量最后几个元素为流入电压源的电流,就想到用电压极小的电压源来替代要求等效电流源的节点,此时就需要用到替换函数。例如RC零状态的替换并进行求解的函数如下:
%此时运用将输入的电容元件替换成电压极小的电压源,以此来求得短路电流
for i=1:number_of_components
if(data1{i}(1)=='C')
data1{i}(1)='V';
dianrong=data4{i};
data1{i}(2)=num2str(number_of_voltages);
temp_number=i;%用于记录此刻电容元件在列表中的位置
end
end
%若电容元件在列表中的位置就是在最后一位,那么只需进行相应的赋值运算
if(temp_number==number_of_components)
w=data1{temp_number};
e=data2{temp_number};
r=data3{temp_number};
t=0.000000000001;
data1{number_of_components}=w;
data4{number_of_components}=t;
data2{number_of_components}=e;
data3{number_of_components}=r;
end
%若电容元件在列表中的位置不是最后一个,那么将后面的元件统统向前,最后把电容元件的信息放在最后一个
if(temp_number
同理,要求等效电压的话,就用电阻值极大的电阻(程序中可用数值很大的值如999999来代替)接于要求的节点之间,求解方程,根据求出相应的节点电压值,做差并取绝对值得到等效电压源的电压,等效电压源的电压除以等效电流源的电流即可求得等效电阻。例如RC零状态的替换函数如下:
%将电容元件替换为无限大的电阻
R_num=0;
for i=1:number_of_components
if(data1{i}(1)=='R')
R_num=R_num+1;
end
end%得到电阻的个数
R_num=R_num+1;
for i=1:number_of_components
if(data1{i}(1)=='C')
data1{i}(1)='R';
data1{i}(2)=num2str(R_num);
temp_number=i;%用于记录此刻电容元件在列表中的位置
end
end
%若电容元件在列表中的位置就是在最后一位,那么只需进行相应的赋值运算
if(temp_number==number_of_components)
w=data1{temp_number};
e=data2{temp_number};
r=data3{temp_number};
t=999999999999999;
data1{number_of_components}=w;
data4{number_of_components}=t;
data2{number_of_components}=e;
data3{number_of_components}=r;
end
%若电容元件在列表中的位置不是最后一个,那么将后面的元件统统向前,最后把电容元件的信息放在最后一个
if(temp_number0)
qian_jiedian=data2{number_of_components};
hou_jiedian=data3{number_of_components};
duanlu_voltage=jie(hou_jiedian,1)-jie(qian_jiedian,1);
end
duanlu_voltage=abs( duanlu_voltage);
v=duanlu_voltage;
%求出等效电阻
dengxiao_dianzu=duanlu_voltage/duanlu_current;
上述处理完之后需要进行的是解方程并且画图处理,运用MATLAB中的dsolve函数求解微分方程,并且根据得出的解根据plot函数求解出相应的图形。例如RC零状态的求解微分方程过程如下:
%解微分方程
q=dianrong*dengxiao_dianzu;%时间常数
app.EditField_6.Visible=true;
app.EditField_6.Value=q;
app.UIAxes.XLabel.String='时间t/s'
app.UIAxes.YLabel.String='电容电压U(C)/v'
app.UIAxes.Title.String='电容电压与时间的关系'
app.UIAxes.Visible=true
syms u(t)
u=dsolve('q*Du+u=v','u(0)=0','t');
q=10*q;
t=0:0.5:q;
u=eval(u);
plot(app.UIAxes,t,u);
app.tsEditField.Visible=true;
app.UcvEditField.Visible=true;
app.Button_5.Visible=true;
app.tsLabel.Visible=true;
app.UcvLabel.Text="U(C)/v";
app.UcvLabel.Visible=true;
app.Label_3.Visible=true;
最后根据输入的时间值,求解出相对应的电容或者电感电压值,运用dsolve来求解微分方程,运用subs将具体的值替代相应的除自变量,因变量以外的字符,运用matlabFunction求出具体的某一个时间点时相关的电压值。二阶并联零状态的求解过程如下:
%解微分方程
syms t b c z h
i=dsolve('b*D2i+c*Di+z*i=h','i(0)=0,Di(0)=0','t');
b=dianrong*diangan*R;
c=diangan;
z=R;
h=duanlu_voltage;
i=subs(i);
syms f(t)
f=diangan*diff(i);
f=matlabFunction(f);
app.UcvEditField.Value=f(app.tsEditField.Value);
app.EditField_8.Value=f(app.tsEditField.Value);
end