永发信息网

MATLAB 分数阶 PID 控制

答案:1  悬赏:80  手机版
解决时间 2021-07-31 11:44
  • 提问者网友:孤山下
  • 2021-07-31 02:11

PID控制的函数为:
u(k)=Kp*e(k)+Ki*[求和e(j)(j=0,1,...k)]*T+Kd*[e(k)-e(k-1)]/T

其控制器的初始化程序和代码部分程序如下:

初始化:
% Controller parameters
h = 0.010;
N = 100000;
Td = 0.02;
Ti= 20;
K = 1.5;
% Create task data (local memory)
data.u = 0.0;
data.K = K;
data.ai=K*h/Ti;
data.ad = Td/(N*h+Td);
data.bd = N*K*Td/(N*h+Td);
data.Dold = 0.0;
data.yold = 0.0;
data.Iold=0.0;

代码:
function [exectime, data] = ctrlcode(seg, data)
switch seg,
case 1,
y = ttGetMsg; % Obtain sensor value
r = ttAnalogIn(1); % Read reference value
P = data.K*(r-y);
I= data.Iold;
D = data.ad*data.Dold + data.bd*(data.yold-y);
data.u = P + I + D;
data.Dold = D;
data.yold = y;
data.Iold = data.Iold + data.ai*(r-y);
exectime = 0.0005;

现要将PID控制扩展为分数阶PID控制,分数阶控制的函数为:
u(k)=Kp*e(k)+Ki*T^gama*(求和q(j)*e(k-j),(j=0,1,...,k))+Kd*T^lambda*(求和d(j)*e(k-j),j=0,1,...,k)
其中gama和lambda为可调参数,q(0)=1,d(0)=1,q(j)=(1-(1+gama)/j)*q(j-1),
d(j)=(1-(1-lambda)/j)*d(j-1)

初始化和代码部分都要相应的怎么修改啊,已经改了大半个月了,出来的结果总是不对呢,求求大家帮帮忙吧……

最佳答案
  • 五星知识达人网友:酒醒三更
  • 2021-07-31 02:19
你这个是用matlab工具箱求解吗,请问问题现在已经解决了吗,我现在也在研究分数阶PID,能把分数阶PID程序发我一份,1273769884@qq.com
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯