## fuzzy-pid
### 介绍
鉴于控制算法常于嵌入式平台使用,所以使用C语言实现模糊PID控制算法。实现的功能包括但不限于:
- 隶属度函数 Membership function
- 高斯隶属度函数 Gaussian membership function
- 广义钟形隶属度函数 Generalized bell-shaped membership function
- S形隶属度函数 Sigmoidal membership function
- 梯形隶属度函数 Trapezoidal membership function
- 三角形隶属度函数 Triangular membership function
- Z形隶属度函数 Z-shaped membership function
- 模糊算子 Fuzzy operator
- 并算子 Union operator
- 交算子 Intersection operator
- 平衡算子 Equilibrium operator
- 中心平均解模糊器 Mean of centers defuzzifier
API使用的示例代码如下:
```c
#include "fuzzyPID.h"
#define DOF 6
int main() {
// Default fuzzy rule base of delta kp/ki/kd
int rule_base[][qf_default] = {
//delta kp rule base
{PB, PB, PM, PM, PS, ZO, ZO},
{PB, PB, PM, PS, PS, ZO, NS},
{PM, PM, PM, PS, ZO, NS, NS},
{PM, PM, PS, ZO, NS, NM, NM},
{PS, PS, ZO, NS, NS, NM, NM},
{PS, ZO, NS, NM, NM, NM, NB},
{ZO, ZO, NM, NM, NM, NB, NB},
//delta ki rule base
{NB, NB, NM, NM, NS, ZO, ZO},
{NB, NB, NM, NS, NS, ZO, ZO},
{NB, NM, NS, NS, ZO, PS, PS},
{NM, NM, NS, ZO, PS, PM, PM},
{NM, NS, ZO, PS, PS, PM, PB},
{ZO, ZO, PS, PS, PM, PB, PB},
{ZO, ZO, PS, PM, PM, PB, PB},
//delta kd rule base
{PS, NS, NB, NB, NB, NM, PS},
{PS, NS, NB, NM, NM, NS, ZO},
{ZO, NS, NM, NM, NS, NS, ZO},
{ZO, NS, NS, NS, NS, NS, ZO},
{ZO, ZO, ZO, ZO, ZO, ZO, ZO},
{PB, PS, PS, PS, PS, PS, PB},
{PB, PM, PM, PM, PS, PS, PB}};
// Default parameters of membership function
int mf_params[4 * qf_default] = {-3, -3, -2, 0,
-3, -2, -1, 0,
-2, -1, 0, 0,
-1, 0, 1, 0,
0, 1, 2, 0,
1, 2, 3, 0,
2, 3, 3, 0};
// Default parameters of pid controller
float fuzzy_pid_params[DOF][pid_params_count] = {{0.65f, 0, 0, 0, 0, 0, 1},
{-0.34f, 0, 0, 0, 0, 0, 1},
{-1.1f, 0, 0, 0, 0, 0, 1},
{-2.4f, 0, 0, 0, 0, 0, 1},
{1.2f, 0, 0, 0, 0, 0, 1},
{1.2f, 0.05f, 0.1f, 0, 0, 0, 1}};
// Obtain the PID controller vector according to the parameters
struct PID **pid_vector = fuzzy_pid_vector_init(fuzzy_pid_params, 2.0f, 4, 1, 0, mf_params, rule_base, DOF);
printf("output:\n");
int control_id = 5;
float real = 0;
float idea = max_error * 0.9f;
printf("idea value: %f\n", idea);
bool direct[DOF] = {true, false, false, false, true, true};
for (int j = 0; j < 1000; ++j) {
int out = fuzzy_pid_motor_pwd_output(real, idea, direct[control_id], pid_vector[control_id]);
real += (float) (out - middle_pwm_output) / (float) middle_pwm_output * (float) max_error * 0.1f;
printf("%d,%f\n", out, real);
}
delete_pid_vector(pid_vector, DOF);
return 0;
}
```
没有合适的资源?快使用搜索试试~ 我知道了~
鉴于控制算法常于嵌入式平台使用,所以使用C语言实现模糊PID控制算法
共6个文件
c:2个
txt:1个
h:1个
需积分: 5 1 下载量 43 浏览量
2024-04-03
08:43:16
上传
评论
收藏 22KB ZIP 举报
温馨提示
pid控制 鉴于控制算法常于嵌入式平台使用,所以使用C语言实现模糊PID控制算法。实现的功能包括但不限于: 隶属度函数 Membership function 高斯隶属度函数 Gaussian membership function 广义钟形隶属度函数 Generalized bell-shaped membership function S形隶属度函数 Sigmoidal membership function 梯形隶属度函数 Trapezoidal membership function 三角形隶属度函数 Triangular membership function Z形隶属度函数 Z-shaped membership function 模糊算子 Fuzzy operator 并算子 Union operator 交算子 Intersection operator 平衡算子 Equilibrium operator 中心平均解模糊器 Mean of centers defuzzifier
资源推荐
资源详情
资源评论
收起资源包目录
fuzzy-pid-code.zip (6个子文件)
fuzzy-pid-code
CMakeLists.txt 142B
example.c 3KB
LICENSE 34KB
fuzzyPID.c 17KB
README.md 4KB
fuzzyPID.h 4KB
共 6 条
- 1
资源评论
MarcoPage
- 粉丝: 2953
- 资源: 2980
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功