本文对最近使用simulink做的一些东西做一下总结, 虽然simulink的书看的还是比较多的, 但是由于本身没有做这方面的项目, 所以也没太实战, 最近用到有两个地方, 这里就总结一下.

电力电子课设

这个是最近刚做完的, 用simulink做的带续流二极管的单相桥式全控整流电路的仿真.

主要原件就是impulse脉冲, 电压源, 电压表, 电流表, 示波器, 求平均值模块, display模块, diode续流二极管模块, SerialRL阻感负载元件, powergui(可以设置开关的理想性, 用到电力电力器件需要加这个gui), 通用桥(universal bridge), 按照单相全控桥连接如下

随意设置了$\alpha$为60度, 可以看到波形和Ud与Id平均值如下, 在均值模块的display上可以看到数值

各个期间波形如下, 其中Ud, Id如下

U2,I2如下

Ivt如下

还有Uvt和Ivd的波形这里就不放了

挑战杯

主要的知识点是matlab function, S function与微分方程的解法(还是传递函数好用, 不过解析式子难写)

之前挑战杯帮忙做的微分方程simulink, 他们是需要算一个运动的浮标进行摇动发电的装置, 需要仿真解一个微分方程, 利用S函数接口和AMesim进行联合计算(貌似Amesim有专门算那个的, 虽然matlab也有发电机模块)

最基本的结构如下

核心是matlab函数, (发现在simulink里直接运算简直神烦…一个加号都要弄个+模块, 加减乘除几下就可以弄一堆东西了, 还是一起放在matlab function里面比较好)

这里需要注意的是因为在matlab function里面是不能直接定义匿名函数的, 所以在运用fzero来求解时候需要用
coder.extrinsic('myFunc')这样的命令来链接外部函数, 之后可以直接当做函数来使用了

主matlab function为

function y = fcn(u,x)
%#codegen
%参数计算
h = 2; %水深
T = 1.5; % 周期
H = 0.15; % 波高
Cv = 1.08; % 绕射系数
R = 0.18; %浮子半径
rho = 1000; %水密度
g = 9.8; %重力加速度
coder.extrinsic('myFunc')
coder.extrinsic('myFunc1')
L = 0;
L = myFunc(h,T) % 波长
k_ = 2*pi/L; % 波数
w = 2*pi/T; % 波浪频率
temp = 0;
temp = myFunc1(k_,R);
d=0.25-x+H/2*cos(k_*x-2*pi*u/T);%浮子吃水 
%结果
y = 1; %定义y类型
y = Cv*rho*g*pi*H*R*cosh(k_*(h-d))*temp*cos(w*u)/(k_*cosh(k_*h));

两个辅助函数为

function y = myFunc(h,T)
f = @(x) 9.8*T^2/(2*pi)*tanh(2*pi*h/x)-x;
y = fzero(f,20);
end
function y = myFunc1(k_,R)
y = besselj(1,k_*R);
end

最后貌似有四个装置, 加入S函数和amesim链接在一起一起就成这样了, (这是用window连的, mac上没有amesim)