最近遇到了一些我自己无法解决的简单问题。我有一个Simulink模型,它使用matlab函数进行模型内部的一些计算。我的想法是,在某个特定的时刻,我需要改变电驱动器的电压。我需要改变它,直到转子的位置达到另一个指定值。例如:
If control_signal == 1; (command to start the execution);
While Angle ~= 180 \\ desired angle is 180;
Control voltage = 5 - 0.1 (5V is the initial value, while the increment of
the voltage change is 0.1)
End
end
从技术上讲,我所想到的是,循环将被执行,直到达到180°的角度,控制电压的某个值(例如4.6)。但是当我运行此代码时,Simulink无法执行该模型。因此,在没有任何警告或错误的情况下,模拟会在某个阶段冻结(当主要条件开始时)。所以看起来它在循环执行开始时无法进一步处理。有人可以帮我代码吗?因为在模拟期间所描述的模型行为肯定是由上述代码引起的。
提前谢谢。
答案 0 :(得分:0)
我的猜测是你将以弧度表示的角度值转换为度数,然后使用三角函数预先计算角度 - 它将永远不会精确到达180度。您应该为您的应用选择一些epsilon,使180 - epsilon
足够接近为180,并将该值用作循环条件。
此外,根据您尝试解决的问题的描述,听起来您实际上想要检查角度是否不大于180,而不是等于180.
此外,您正在错误地增加电压。每次进入循环时,control_voltage变量等于5 - 0.1,这意味着它不变,无论运行多少次循环,它都等于4.9。这是正确的方法:
control_voltage = 5; % initial value
if control_signal == 1; (command to start the execution);
while Angle ~= (180 - epsilon) % some epsilon of your choice
control_voltage = control_voltage - 0.1; % now it's smaller by 0.1 every time the loop is run
end
end