1.25 ------------------------- s^2 + 52.36s + 1250.00,这是一个双轴步兵车云台的传递函数,你能给我它的模糊PID控制算法matlab代码吗
时间: 2023-09-19 13:04:56 浏览: 135
好的,以下是一个简单的模糊PID控制算法的MATLAB代码:
```matlab
% 输入传递函数
num = [1.25];
den = [1, 52.36, 1250];
sys = tf(num, den);
% 设计控制器
kp = 1;
ki = 0.5;
kd = 0.1;
c = pid(kp, ki, kd);
% 设计模糊控制器
mfkp = [-10, -5, -2, 0, 2, 5, 10];
mfki = [-10, -5, -2, 0, 2, 5, 10];
mfkd = [-10, -5, -2, 0, 2, 5, 10];
ruleList = [
1, 1, 1, 2, 2, 3, 3;
1, 1, 1, 2, 3, 4, 5;
1, 2, 3, 3, 4, 5, 5;
];
fis = newfis('fis', 'mamdani', 'min', 'max', 'min', 'max', 'centroid');
fis = addvar(fis, 'input', 'error', [-100, 100]);
fis = addmf(fis, 'input', 1, 'NB', 'trimf', [-100, -100, -50]);
fis = addmf(fis, 'input', 1, 'NM', 'trimf', [-100, -50, 0]);
fis = addmf(fis, 'input', 1, 'NS', 'trimf', [-50, 0, 50]);
fis = addmf(fis, 'input', 1, 'Z', 'trimf', [-10, 0, 10]);
fis = addmf(fis, 'input', 1, 'PS', 'trimf', [0, 50, 100]);
fis = addmf(fis, 'input', 1, 'PM', 'trimf', [50, 100, 100]);
fis = addmf(fis, 'input', 1, 'PB', 'trimf', [100, 100, 100]);
fis = addvar(fis, 'input', 'error_change', [-100, 100]);
fis = addmf(fis, 'input', 2, 'NB', 'trimf', [-100, -100, -50]);
fis = addmf(fis, 'input', 2, 'NM', 'trimf', [-100, -50, 0]);
fis = addmf(fis, 'input', 2, 'NS', 'trimf', [-50, 0, 50]);
fis = addmf(fis, 'input', 2, 'Z', 'trimf', [-10, 0, 10]);
fis = addmf(fis, 'input', 2, 'PS', 'trimf', [0, 50, 100]);
fis = addmf(fis, 'input', 2, 'PM', 'trimf', [50, 100, 100]);
fis = addmf(fis, 'input', 2, 'PB', 'trimf', [100, 100, 100]);
fis = addvar(fis, 'output', 'output', [-100, 100]);
fis = addmf(fis, 'output', 1, 'NB', 'trimf', [-100, -100, -50]);
fis = addmf(fis, 'output', 1, 'NM', 'trimf', [-100, -50, 0]);
fis = addmf(fis, 'output', 1, 'NS', 'trimf', [-50, 0, 50]);
fis = addmf(fis, 'output', 1, 'Z', 'trimf', [-10, 0, 10]);
fis = addmf(fis, 'output', 1, 'PS', 'trimf', [0, 50, 100]);
fis = addmf(fis, 'output', 1, 'PM', 'trimf', [50, 100, 100]);
fis = addmf(fis, 'output', 1, 'PB', 'trimf', [100, 100, 100]);
fis = addrule(fis, ruleList);
c = addfis(c, fis);
% 闭环控制
sys_cl = feedback(series(c, sys), 1);
t = 0:0.01:10;
r = ones(size(t));
[y,t] = lsim(sys_cl, r, t);
% 画图
plot(t, r, 'b', t, y, 'r');
xlabel('Time (s)');
ylabel('Amplitude');
title('Step Response');
legend('Input', 'Output');
```
请注意,这只是一个简单的模糊PID控制算法,需要根据实际情况进行调整和改进。
阅读全文