MATLAB 和力学(主要是物理学)[第二部分]

MATLAB and mechanics (physics mostly) [part II]

简历表格

代表系统的基本方案:

我们假设两个轴的耦合是通过离合器完成的

方程式:

• J1*dw1/dt + Td(w12)+Ts(phi12) = T1;
• J2*dw2/dt - Td(w12) -Ts(phi12) = T2;
where w1 = dphi1/dt, 
    w2 = dphi2/dt, 
    phi12 = phi1 - phi2
    w12 = w1 - w2
    Td(w12) = c12 * w12
    Ts(phi12) = ks * phi12
c12 and ks are some coefficients
• dphi12/dt = w12
• dw12/dt = T1/J1 - T2/J2 - Td(w12)/Jeq - Ts(phi12)/Jeq

ccr = 2*Jeq*wn
wn = sqrt(ks/Jeq)
Jeq = (J1*J2)/(J1+J2)
T1(t) = T0*1(t), T0 = 1 T2(t) = 0
J1+J2 = 10 wn = 100 rad/s c12 = 0 Ts(phi12) = ks*phi12

我的第二个任务是绘制非线性离合器如何影响转动惯量。

给定:

T1(t) = T0*1(t), T0 = 1, T2(t) = 0,
J1 = J2 = 5, c12 = 0, wn = 100,
Ts(phi12) = k1*phi12 + k2*(phi12)^3
k20 = 10e14, k2 = [10e-6 10e-5 10e-4 10e-3 10e-2 10e-1 10e0 10e1 10e2 10e3 10e4]

我需要绘制 Tsmax/T0 = f(log(k2/k20));

目前我的进度是:

MATLAB 代码

T2 = 0;
J1 = 5;
J2 = J1;
wn = 100;
Jz = J1.*J2/(J1+J2);
ckr = 2.*Jz*wn;
ks = (wn^2)*Jz;
c12 = 0;
k20 = 10e14;
k2 = [10e-6 10e-5 10e-4 10e-3 10e-2 10e-1 10e0 10e1 10e2 10e3 10e4];
Tsmax = zeros(size(k2));
k2a = 0;
plpl = zeros(size(k2));
k1 = 1;
sim ('model_2');

for ii=1:length(k2)
    k2a = k2(ii);
    sim ('model_2');
    Tsmax(ii) = max(Ts);
    plpl(ii) = log(k2a/k20);
end
figure()
    plot(plpl,Tsmax)  
   grid on

产生

和 Simulink 模型:

好吧,我有点确定我的情节不是它应该的样子。

一些points/suggestions:

  • 你似乎用 K2a 参数化了你的 Simulink 模型(除非我从屏幕截图中看不太清楚),但它没有在任何地方定义。您在代码中定义 k2a,但 MATLAB 区分大小写,因此它与 K2a.
  • 不同
  • 你的Fcn1块没有做任何事情,你可以去掉它。

除此之外,我真的看不出你所做的有什么不妥,我们也不知道你的情节应该是什么样子,所以我们真的帮不了你了,我害怕。

编辑:

我认为你的情节应该是这样的。我在 Octave 中尝试了它,只是使用 MATLAB 代码和带有 logspace 的 ode 求解器(没有 Simulink),这样我在 10^(-6)10^4 之间有 50 个对数数据点 space,得到了非常相似的东西。

我认为您遇到了 k2 较大值的数值刚度问题,因此我建议使用 ode15s1e-4 的最大步长。这可能需要更长的时间才能 运行,但当系统在数值上僵硬时,您可能会避免数值问题。