【发布时间】:2021-02-02 22:45:27
【问题描述】:
我希望模拟我拥有的某个齿轮系统的输出。齿轮系统的外观对这个问题并不特别重要,我设法从机械系统中得到所需的微分方程。 这是我的代码
% parameters
N2 = 90;
N1 = 36;
Jn1 = 0.5;
Jn2 = 0.8;
J2 = 2;
D = 8;
K = 5;
J = (N2/N1)^2 * Jn1 + Jn2 + J2;
% define the system
sys = ss([0 1; -K/J -D/J], [0; N2/(N1*J)], [1 0], 0);
% initial state: (position, velocity) [rad; rad/s]
x0 = [0; 0];
% define the time span
t = linspace(0, 15, 10000)';
% define the input step
T1 = zeros(length(t), 1);
T1(t>=0) = 1;
% compute the system step response at once
theta1 = lsim(sys, T1, t, x0);
% compute the system response as aggregate of the forced and unforced
% temporal evolutions
theta2 = lsim(sys, T1, t, [0; 0]) + initial(sys, x0, t);
% plot results
figure('color', 'white');
hold on;
yyaxis left;
plot(t, T1, '-.', 'linewidth', 2);
ylabel('[N]');
yyaxis right;
plot(t, theta1, 'linewidth', 3);
plot(t, theta2, 'k--');
xlabel('t [s]');
ylabel('[rad]');
grid minor;
legend({'$T_1$', '$\theta_1$', '$\theta_2$'}, 'Interpreter', 'latex',...
'location', 'southeast');
hold off;
这应该可以生成一个图表,显示位置,我的输出,用于 Heaviside/step 输入。我的问题是,我将如何为正弦波输入执行此操作。我想我应该有sin(w*t) 而不是(t>=0),其中 w 是我的脉冲频率。不过,我似乎无法完成这项工作。任何帮助将非常感激! :)
【问题讨论】:
-
我从未使用过
lsim,但是将T1定义为正弦波而不是阶跃函数就足够了吗?例如,T1 = sin(2*pi*f*t + phi),其中f是所需频率,phi是初始相位 -
lsim实际上是一个易于使用的命令,基本上您可以在 MATLAB 下使用任意数量的输入和时间来模拟系统。这是一个有用的链接mathworks.com/help/control/ref/lti.lsim.html另外,是的;将T1定义为正弦波而不是阶跃函数就足够了,但由于某种原因,它对我不起作用。我建议您使用我的代码并实施您的解决方案,给我一些反馈。我在 R2018b 上运行我的代码 -
“它不适合我”是什么意思?你有错误吗?输出错了吗?
标签: matlab trigonometry simulink control-theory