#MATLAB#学习 短学期有一门比较奇怪的课:《电子实习》,内容是根据要求设计几个简单的电路(包括原理图和PCB),然后搭建并验证功能,貌似是所有电类的学生都要上的,讲道理我等电信学子上这门课也就算了,毕竟模电自控什么的都学过,隔壁计算机什么的也要学这门课也是挺怪的。不过本学期课程都转为线上了,就只能改成使用软件仿真了。 本来是在用Altidum Designer自带的仿真功能,但是这东西貌似用的人不多,不太受重视,所以挺难用的,比如说找不到把波形图导出的地方所以只能手动截图、默认的颜色极其辣眼睛以及仿真失败却没有报错等等。所以我主要用的是立创EDA,虽然应该和AD一样是基于 之所以选择使用MATLAB是因为这个学期里的自控实验和信号与系统实验都用到了,也算是挺熟悉的,搜了一下发现可以用 本文将以一个带通滤波器为例,绘制它的伯德图(幅频响应和相频响应),以及在分别输入f=3kHz, 5kHz, 10kHz, 40kHz及200kHz的正弦波时的输出波形。 需要用的的元器件都在 Simscape/Foundation Library/Eletrical 下。简单拖拖拽拽,效果如下: 需要讲解的是Solver Configuration(就是那个f(x)=0),这东西我也不懂是干什么的,也没有用上过,但是必须要有,直接接地就行了。 然后还有左边和右边两个Voltage Sensor,相当于电压表, 另外还有一个和正弦信号Input通过Simulink-PS Converter相连的Controlled Voltage Source,跟上面的Voltage Sensor类似,只不过那个是输出这个是输出。 搭建完毕后就可以直接运行了,但是默认时间好像是10秒,输出波形直接被压缩成一条直线了,一开始还以为是自己哪里搞错了。 参考官方文档,找到顶部的 首先通过SPICE
的所以功能都差不多:暂态分析、交流分析、静态工作点之类的,但是奇奇怪怪的问题确实少很多。不过两者都缺乏自动化能力,比如带通滤波器输入不同频率的信号,然后根据信号周期设置不同的仿真时长和步长,最后自动在输出波形的标题后标注频率。其实手动做这些也行,但是折腾的快乐是无法取代的。Simulink
里面的Simscape
做到,注意是"scape"而非"space",一开始关键词输错了导致出来的结果比较少。搭建电路
+
和-
自然就是输出的正负极,而V
的符号则代表输出的电压信号,它会将测量到的电压值作为物理信号(PS: Psycial Singal)输出,你可能也注意到了图上有黑色和蓝色两种模块,黑色的是普通的Simulink模块,例如Mux, Scope等,而蓝色的则是电子元件,两者是不能直接连接的,需要通过Voltage Sensor这类元件将电信号转化为物理信号,然后再使用PS-Simulink Converter把物理信号转到Simulink。频率响应
LINEARIZATION
栏,选中一条Simulink的线(即黑线),然后添加闭环或开环输出/输出,点击Model Linearizer
即可。程序化操作
find_system
函数列出所有模块,然后再使用get_param
获取参数名称,再直接用set_param
设置参数,最后直接用sim
运行。for f = [3e3 5e3 10e3 40e3 200e3]
w = 2*pi*f;
T = 1/f;
stopTime = 10*T;
stepTime = T/1e3
% 获取参数示例
% find_system("system")
% get_param("fdemo/Input", "DialogParameters")
set_param("fdemo/Input", "Frequency", num2str(w));
set_param("fdemo", "FixedStep", num2str(stepTime));
set_param("fdemo", "StopTime", num2str(stopTime));
figure;
plot(sim("fdemo.slx").yout{1}.Values);
title(["Frequency = " num2str(f) "Hz"]);
end