模糊pid电机调速 matlab程序代码
时间: 2023-09-09 16:03:17 浏览: 92
模糊 PID控制matlab代码.zip
5星 · 资源好评率100%
模糊PID电机调速方法是将模糊控制与PID控制相结合,通过调节模糊规则和PID参数,实现对电机速度的精确控制。以下是一个简单的MATLAB程序代码示例:
```matlab
% 创建模糊控制器
fuzzController = newfis('FuzzyPID_Speed');
% 设定输入和输出变量的范围
fuzzController = addvar(fuzzController, 'input', 'error', [-10 10]);
fuzzController = addvar(fuzzController, 'input', 'error_rate', [-5 5]);
fuzzController = addvar(fuzzController, 'output', 'output', [-100 100]);
% 设定输入和输出变量的模糊集合和隶属函数
fuzzController = addmf(fuzzController, 'input', 1, 'NB', 'trimf', [-10 -10 -5]);
fuzzController = addmf(fuzzController, 'input', 1, 'NM', 'trimf', [-10 -5 0]);
fuzzController = addmf(fuzzController, 'input', 1, 'NS', 'trimf', [-5 0 5]);
fuzzController = addmf(fuzzController, 'input', 1, 'ZE', 'trimf', [-5 0 5]);
fuzzController = addmf(fuzzController, 'input', 1, 'PS', 'trimf', [0 5 10]);
fuzzController = addmf(fuzzController, 'input', 1, 'PM', 'trimf', [0 5 10]);
fuzzController = addmf(fuzzController, 'input', 1, 'PB', 'trimf', [5 10 10]);
fuzzController = addmf(fuzzController, 'input', 2, 'NB', 'trimf', [-5 -5 -2]);
fuzzController = addmf(fuzzController, 'input', 2, 'NM', 'trimf', [-5 -2 0]);
fuzzController = addmf(fuzzController, 'input', 2, 'NS', 'trimf', [-2 0 2]);
fuzzController = addmf(fuzzController, 'input', 2, 'ZE', 'trimf', [-2 0 2]);
fuzzController = addmf(fuzzController, 'input', 2, 'PS', 'trimf', [0 2 5]);
fuzzController = addmf(fuzzController, 'input', 2, 'PM', 'trimf', [0 2 5]);
fuzzController = addmf(fuzzController, 'input', 2, 'PB', 'trimf', [2 5 5]);
fuzzController = addmf(fuzzController, 'output', 1, 'NB', 'trimf', [-100 -100 -50]);
fuzzController = addmf(fuzzController, 'output', 1, 'NM', 'trimf', [-100 -50 0]);
fuzzController = addmf(fuzzController, 'output', 1, 'NS', 'trimf', [-50 0 50]);
fuzzController = addmf(fuzzController, 'output', 1, 'ZE', 'trimf', [-30 0 30]);
fuzzController = addmf(fuzzController, 'output', 1, 'PS', 'trimf', [0 50 100]);
fuzzController = addmf(fuzzController, 'output', 1, 'PM', 'trimf', [0 50 100]);
fuzzController = addmf(fuzzController, 'output', 1, 'PB', 'trimf', [50 100 100]);
% 设定规则
ruleList = [1 1 1 1 1;
1 2 1 1 1;
1 3 1 1 1;
2 1 1 1 1;
2 2 1 1 1;
2 3 1 1 1;
3 1 1 1 1;
3 2 1 1 1;
3 3 1 1 1;];
fuzzController = addrule(fuzzController, ruleList);
% 生成随机的输入值
error = rand() * 10 - 5;
errorRate = rand() * 4 - 2;
% 模糊控制器的输入
input = [error,errorRate];
% 模糊控制器的输出
output = evalfis(input, fuzzController);
disp(['输入误差:', num2str(error)]);
disp(['输入误差变化率:', num2str(errorRate)]);
disp(['输出控制:', num2str(output)]);
```
以上代码演示了如何使用MATLAB的Fuzzy Logic Toolbox来创建模糊PID电机调速控制器,并通过输入误差和误差变化率来计算输出控制量。程序中包含模糊规则的定义以及模糊控制器的输入输出模糊集合和隶属函数的设置。通过调用`evalfis`函数,程序可以根据输入值计算输出值,并将其显示在控制台上。
阅读全文