如果滑膜控制中涉及位置偏差三阶导,一般在matlab的s函数中是如何处理的呢?
尝试过:1.将运算后的实际位置输出经过微分模块后再输入回去进行计算,但这似乎会出现时间差,导致运算值是一种叠加;2.在s-function中对加速度用diff函数求导得到位置偏差三阶导,但得到的是一个空值。
不知道你这个问题是否已经解决, 如果还没有解决的话:
- 这个问题的回答你可以参考下: https://ask.csdn.net/questions/376952
- 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:matlab function
- 除此之外, 这篇博客: Matlab学习篇之s-function中的 S函数的应用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
采用S函数实现y=kx+b
(1)定义S函数
1. 主函数- function[sys.x0,str,ts]=timekb(t.x.,u,flag,k,b)
switch flag
case 0
[sys.x0,str,ts]=mdlInitializeSizes;%初始化
case 3
sys=mdlOutputs(t.x.u,k,b); %计算输出量
case{1,2,4,9}
sys=[];
otherwise;
error(num2str(flag)) %出错处理
end 2. 初始化子函数- function(sys.xO0,str,ts]=mdlInitializeSizes()
sizes=simsizes;
sizes.NumContStates-0; %无连续状态
sizes.NumDiscStates-0; %无离散状态
sizes.NumOutputs=1: %有一个输出量
sizes.NumInputs=1: %有一个输入信号
sizes.DirFeedthrough=1; %输出量中含有输入量
sizes.NumSampleTimes=1; %单个采样周期
sys=simsizes(sizes); %返回一个结构,包含上面的参数
x0=[]; %设置初始状态为零状态
str=[] ; %将str变量设置为空字符串
ts=[-1,0]; %假定继承输入信号的采样周期 3.输出子函数- function sys=mdlOutputs(t,x,u,k,b) %k,b为自定义参数
sys=k*u+b;
(2)在Simulink模型中使用S函数

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^