【发布时间】:2012-04-26 15:49:32
【问题描述】:
注意:这是我第一次使用 MATLAB S-Function,我只使用过几次 Simulink。
当我尝试在 S-Function 中使用我的输入变量 inp 时,它们在标志 3 上返回 NaN。系统的输入是三个简单的单位阶跃函数,通过总线创建器连接到系统。在尝试模拟系统时,我收到一条错误消息——我通过在inp 上进行测试打印才发现它们是 NaN。有什么想法吗?
详情:
我正在将 Segway 模拟为一个班级项目。我在 Simulink 中将执行器(直流电机)和工厂(Segway 本身)模拟为单独的 S 功能块。电机需要三个输入:电压、Segway 的速度和 Segway 相对于其俯仰轴的角速度(由于反电动势)。输出为电枢电流。
这是一个简单的线性非微分系统。因此,没有状态。唯一完成的计算是从输入到输出的馈通。代码如下:
function [sys,X0]=nl_pend(time,state,inp,FLAG,ICs);
% actuator parameters:
% R_m: motor armature resistance
% K_b: motor back emf constant
% K_t: motor torque constant
% r: radius of the wheel
global R_m K_b K_t r;
if FLAG == 0, % initialize system parameters and states
% Call file that initializes parameters
segway_dcmotor_pars;
% This system has:
% 0 states (theta,thetatheta_dot),
% 3 input (v,x_dot,theta_dot),
% 1 outputs (i)
nx = 0; % # of states
nu = 3; % # of inputs
ny = 1; % # of outputs
sys = [nx; 0; ny; nu; 0; 0];
% Initial Conditions (will be passed as and argument)
X0 = ICs;
elseif FLAG == 1, % states derivatives
%blank
elseif FLAG == 3, % system outputs
%inp(1) = motor voltage
%inp(2) = segway velocity
%inp(3) = segway pitch angular velocity
display( inp );
y(1) = (1/R_m)*inp(1) - (K_b/(r*R_m))*inp(2) + (K_b/R_m)*inp(3);
sys = y;
else,
sys = [];
end
【问题讨论】:
-
好吧,我找到了解决方案。我对其进行了更改,以使系统不再具有任何状态,而是具有单个状态 q,它是电枢中的电荷。由于这是一个解决方案,而不是一个答案,我将把这个问题留给任何关于为什么第一种方法不起作用的想法。
标签: matlab simulation nan simulink