Pid控制算法-增量型pid算法的C++实现
2017-04-10 11:47
302 查看
PID控制算法的C++语言实现
四 增量型PID的C++语言实现
上一节中介绍了最简单的位置型PID的实现手段,这一节主要讲解增量式PID的实现方法.实现过程仍然是分为定义变量、初始化变量、实现控制算法函数、算法测试四个部分,这里直接给出代码了。pid.h:
#ifndef _PID_H_
#define _PID_H_
typedef struct _pid{
float SetSpeed;
float ActualSpeed;
float err;
float err_next;
float err_last;
float Kp, Ki, Kd;
}Pid;
class Pid_control
{
public:
void PID_init();
float PID_realize(float speed);
private:
int index;
Pid pid;
};
#endif
pid.cpp:
#include <iostream>
#include "pid.h"
using namespace std;
void Pid_control::PID_init()
{
pid.SetSpeed = 0.0;
pid.ActualSpeed = 0.0;
pid.err = 0.0;
pid.err_last = 0.0;
pid.err_next = 0.0;
pid.Kp = 0.2;
pid.Ki = 0.015;
pid.Kd = 0.2;
}
float Pid_control::PID_realize(float speed){
pid.SetSpeed = speed;
pid.err = pid.SetSpeed - pid.ActualSpeed;
float incrementSpeed = pid.Kp*(pid.err - pid.err_next) + pid.Ki*pid.err + pid.Kd*(pid.err - 2 * pid.err_next + pid.err_last);
pid.ActualSpeed += incrementSpeed;
pid.err_last = pid.err_next;
pid.err_next = pid.err;
return pid.ActualSpeed;
}
main.cpp:
#include "pid.h"
#include <iostream>
using namespace std;
int main()
{
Pid_control Pid;
Pid.PID_init();
int count = 0;
while (count<1000)
{
float speed = Pid.PID_realize(200.0);
cout << speed << ";" << " ";
count++;
}
cout << endl;
system("pause");
return 0;
}
运行后的1000个数据为:
相关文章推荐
- Pid控制算法-位置型pid算法的C++实现
- Pid控制算法-抗积分饱和pid算法C++实现
- Pid控制算法-积分分离pid算法C++实现
- Pid控制算法-变积分的pid算法的C++实现
- 杂谈PID控制算法——最终篇:C语言实现51单片机中的PID算法
- Pid控制算法-专家PID与模糊PID的C++实现
- 二分查找算法的C/C++实现
- 快速傅里叶变换(FFT)算法C++实现代码
- 内存管理:算法及其c/c++实现 翻译五
- 内存管理:算法及其c/c++实现 翻译六
- C++实现的农历算法
- 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码
- 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码
- 内存管理:算法及其c/c++实现 翻译一
- 算法(c++)实现
- 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码
- C/C++面试之算法系列--如何实现用更少的空间表示英文字母(a ~ z)构成char A[n]字符串
- 关于电梯算法的C++实现(zt)
- LCS 算法之C++实现
- C++递归实现欧几里德(Euclid)算法