控制器开发-积分的使用方法

连续域的积分传递函数是1/s,而控制器是一个离散的系统,所以须将连续的传递函数离散化,当然有公式推算,对于我这种基础不大好的人理解起来费劲,所以使用matlab来解决这一问题。
Lcfun=tf([0,1],[1,0]); %连续函数1/s的分子是[0,1],分母是[1,0];
Ldfun=c2d(Lcfun,1e-3,‘tustin’);%c2d是将连续函数离散化,1e-3信号采样周期为10ms;
在matlab就可以查看离散函数Ldfun =(0.0005 z + 0.0005)/(z-1);再将离散函数转换成C语言的编写习惯:
Y(n)/X(n)= (0.0005 z + 0.0005)/(z-1);
分解一下即成:
zY(z)=0.0005zX(z)+0.0005X(z)+Y(z);
该等式等效成:
Y(n)=0.0005x(n)+0.0005x(n-1)+y(n-1);
备注:Y(n)是当前需要计算的结果值,x(n)是当前的输入值,x(n-1)上一时刻的输入值,y(n-1)是上一时刻的结果值。

如果是使用matlab模型生成C代码,则不需要这个过程,直接使用simulink中的离散积分模块:
在这里插入图片描述
模块的设置增益是0.0005,同时按照实际数值的情况设置最大值最小值。
在这里插入图片描述
最后和整个工程一起编译成C代码。

发布了6 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/luoguo99942/article/details/104649236