#include <iostream>
#include <cmath>
using namespace std;
typedef double real;
class PID_Controller
{
public:
void Initialize(real kp, real ki, real kd, real error_thresh, real step_time);
real Update(real error);
private:
bool m_started;
real m_kp, m_ki, m_kd, m_h, m_inv_h, m_prev_error, m_error_thresh, m_integral;
};
void PID_Controller::Initialize(real kp, real ki, real kd, real error_thresh, real step_time)
{
m_kp=kp;
m_ki=ki;
m_kd=kd;
m_prev_error = 0;
m_error_thresh=error_thresh;
m_h=step_time;
m_inv_h=1/step_time;
m_integral=0;
m_started=false;
}
real PID_Controller::Update(real error)
{
real q;
if(fabs(error)<m_error_thresh) //integrator windup
q=1;
else
q=0;
m_integral+=m_h*q*error;
real deriv;
if(!m_started)
{
m_started=true;
deriv=0;
}
else deriv=(error-m_prev_error)*m_inv_h;
m_prev_error=error;
return m_kp*(error+m_ki*m_integral+m_kd*deriv);
}
int main()
{
//int prev_value, next_value;
int repeat=1;
double feedback_value;
double output_value=0;
real parameter[6];
char* variable[6] = {"kp","ki","kd","error thresh","step time","Reference"};
PID_Controller My_PID;
while(1)
{
for(int i=0;i<6;i++)
{
cout << "Insert value of \"" << variable[i] << "\"" <<endl;
cin >> parameter[i];
cout << i+1 << "th parameter = " << parameter[i] <<endl <<endl;
}
My_PID.Initialize(parameter[0],parameter[1],parameter[2],parameter[3],parameter[4]);
feedback_value = parameter[5];
cout << endl << "reference = "<< parameter[5] <<endl<<endl<<endl;
for (int j=0;j<20;j++)
{
cout << "e(t) = " << parameter[5] <<" - "
<< output_value << " = " << feedback_value <<" ";
output_value = My_PID.Update(feedback_value);
cout << j+1 <<"th Output = " << output_value << endl;
feedback_value = parameter[5] - output_value;
}
}
return 0;
}
PID.zip_PID c code_control_pid
版权申诉
47 浏览量
2022-09-24
00:37:02
上传
评论
收藏 1.57MB ZIP 举报
刘良运
- 粉丝: 68
- 资源: 1万+
最新资源
- Python 手写实现 iD3 决策树算法-根据信息增益公式.zip
- 411675952289057车联助手-小窗版(三星)3.5.1.apk
- 三种快速排序方法合并在一个文件中以便直接运行的Python代码示例
- 937712277954201实习5.word
- 2程序语言基础知识pdf1_1716337722703.jpeg
- 简单的Python示例,演示了如何使用TCP/IP协议进行基本的客户端和服务器通信
- 考试.sql
- keil2 + proteus + 8051.exe
- 1961ee27df03bd4595d28e24b00dde4e_744c805f7e4fb4d40fa3f695bfbab035_8(1).c
- mediapipe-0.9.0.1-cp37-cp37m-win-amd64.whl.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈