模糊PID控制器代码 matlab
时间: 2024-05-22 21:08:34 浏览: 86
模糊PID控制器是一种能够应对非线性、时变、强耦合等复杂控制系统的控制器。相比于传统PID控制器,模糊PID控制器采用模糊控制理论,在模糊化、规则库、推理机和解模糊等方面都有所创新。
在Matlab中实现模糊PID控制器可以采用Fuzzy Logic Toolbox工具箱,具体步骤如下:
1. 定义输入变量和输出变量的隶属度函数
2. 构建模糊规则库
3. 设计模糊推理机
4. 设计解模糊方法
5. 实现模糊PID控制器
下面是一个简单的模糊PID控制器示例代码:
```
% 输入变量的隶属度函数定义
error = fuzzymf(u, [-10 -5 0]);
derror = fuzzymf(du, [-10 -5 0]);
% 输出变量的隶属度函数定义
kp = fuzzymf(kp, [0 1 2]);
ki = fuzzymf(ki, [0 1 2]);
kd = fuzzymf(kd, [0 1 2]);
% 建立模糊规则库
ruleList = [1 1 1 1 1;
1 2 2 1 1;
1 3 3 1 1;
2 1 2 1 1;
2 2 3 1 1;
2 3 3 1 1;
3 1 3 1 1;
3 2 3 1 1;
3 3 3 1 1];
% 设计模糊推理机
fis = newfis('fis', 'mamdani', 'min', 'max', 'min', 'max', 'centroid');
fis = addvar(fis, 'input', 'error', [-10,10]);
fis = addmf(fis, 'input', 1, 'NB', 'trapmf', [-10,-10,-5,-2]);
fis = addmf(fis, 'input', 1, 'NM', 'trimf', [-5,-2,0]);
fis = addmf(fis, 'input', 1, 'NS', 'trimf', [-5,0,5]);
fis = addmf(fis, 'input', 1, 'ZO', 'trimf', [0,5,10]);
fis = addmf(fis, 'input', 1, 'PS', 'trimf', [-5,0,5]);
fis = addmf(fis, 'input', 1, 'PM', 'trimf', [2,5,10]);
fis = addmf(fis, 'input', 1, 'PB', 'trapmf', [5,8,10,10]);
fis = addvar(fis, 'input', 'derror', [-10,10]);
fis = addmf(fis, 'input', 2, 'NB', 'trapmf', [-10,-10,-5,-2]);
fis = addmf(fis, 'input', 2, 'NM', 'trimf', [-5,-2,0]);
fis = addmf(fis, 'input', 2, 'NS', 'trimf', [-5,0,5]);
fis = addmf(fis, 'input', 2, 'ZO', 'trimf', [0,5,10]);
fis = addmf(fis, 'input', 2, 'PS', 'trimf', [-5,0,5]);
fis = addmf(fis, 'input', 2, 'PM', 'trimf', [2,5,10]);
fis = addmf(fis, 'input', 2, 'PB', 'trapmf', [5,8,10,10]);
fis = addvar(fis, 'output', 'output', [-10,10]);
fis = addmf(fis, 'output', 1, 'NB', 'trapmf', [-10,-10,-5,-2]);
fis = addmf(fis, 'output', 1, 'NM', 'trimf', [-5,-2,0]);
fis = addmf(fis, 'output', 1, 'NS', 'trimf', [-5,0,5]);
fis = addmf(fis, 'output', 1, 'ZO', 'trimf', [0,5,10]);
fis = addmf(fis, 'output', 1, 'PS', 'trimf', [-5,0,5]);
fis = addmf(fis, 'output', 1, 'PM', 'trimf', [2,5,10]);
fis = addmf(fis, 'output', 1, 'PB', 'trapmf', [5,8,10,10]);
% 设计解模糊方法
outputRange = [-10 10];
defuzzMethod = "centroid";
% 实现模糊PID控制器
kp_fuzzified = evalmf(kp_mamdani_output,'trapmf',[0.75e-4e-6e4e-3e-4]);
ki_fuzzified = evalmf(ki_mamdani_output,'trapmf',[0.75e-4e-6e4e-3e-4]);
kd_fuzzified = evalmf(kd_mamdani_output,'trapmf',[0.75e-4e-6e4e-3e-4]);
output_fuzzy_pid=kp_fuzzified*error+ki_fuzzified*error_integral+kd_fuzzified*derror;
```
阅读全文