Matlab实现 线性动态电路可视化分析
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
编程思路
这个编程总体采用面向过程的编程思想,将人在处理线性动态电路问题时的一般思路用计算机仿真。本人采用matlab软件实现这一过程,具体思路如下:
- 利用合理的gui界面帮助用户选择适合的电路类型,之后将电路各元器件信息逐一输入计算机;
- 对于一阶动态电路,响应电压或电流的表达式基本是固定的,运用matlab软件以及输入的参数建立响应电压或电流的函数,并在gui
界面输出图像,自变量取值范围为0-8T(T为时间常数); - 对于二阶动态电路的全响应(电路结构固定的情况),根据KCL或KVL
列出的二阶微分方程的形式是一样的,可以利用matlab中的相应函
数求解方程,并在相应的范围内输出函数图像。
实例演示
有如下电路:
打开程序后界面如下图所示:
之后根据电路选择“二阶动态电路全响应”,并依次输入每个元器件的信息,绘制图像:
在时间一栏输入时间值,即可计算相应的电流。
注意:本程序只能解决固定电路结构的动态电路分析,一阶电路为RC串联电路与RL并联电路,二阶电路为LC并联后与电阻串联的电路,对于别的电路大家可以自己尝试,这里不再赘余。
Matlab源代码
这里只摘出“显示图像”按钮的Callback函数,其他控件函数不显示
一阶RC电路零输入响应:
function pushbutton2_Callback(hObject, eventdata, handles)
str1=get(handles.edit1,'string');
U=str2double(str1);
str2=get(handles.edit3,'string');
R=str2double(str2);
str3=get(handles.edit7,'string');
C=str2double(str3);
axes(handles.axes1);
t=R*C; %t为时间常数
x=0:0.1:8*t; %时间取值范围为0到8t
y=U*exp(-x/(R*C)); % 电容电压表达式
plot(x,y); %画出图像
xlabel('t/s');
ylabel('Uc/V'); %设置坐标
str4=num2str(t);
set(handles.edit9,'string',str4); %输出时间常数
其他一阶电路与之类似,不再具体列出。
二阶动态电路全响应(电路结构与实例类似):
function pushbutton2_Callback(hObject, eventdata, handles)
str1=get(handles.edit1,'string');
Is=str2double(str1);
str2=get(handles.edit3,'string');
R=str2double(str2);
str3=get(handles.edit7,'string');
C=str2double(str3);
str4=get(handles.edit12,'string');
L=str2double(str4);
str5=get(handles.edit10,'string');
Uc=str2double(str5);
str6=get(handles.edit11,'string');
Il=str2double(str6);
axes(handles.axes1);
f=dsolve('R*L*C*D2y+L*(Dy)+y*R=Is','y(0)=Il','(Dy)(0)*L=Uc','x'); %用matlab自带的函数求解微分方程
g = subs(f); %将变量具体值带入
fplot(g,[0,0.0900]); %做出图像,时间取值为0到0.09
xlabel('t/s');
ylabel('Il/A'); %设置坐标轴
参考文献
- 电路(第五版)—邱关源,罗先觉 著 -ISBN 978-7-04-19671-9 高等教育出版社.
(第一次写博客,希望能帮到大家!)