国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
增量式PID算法C++源碼
[打印本頁]
作者:
山海致遠
時間:
2020-5-1 23:54
標題:
增量式PID算法C++源碼
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <Windows.h>
//定義PID變量的結構體
struct _pid
{
float SetSpeed;
float ActualSpeed;
float err;
float err_last; //定義上上個偏差
float err_next; //定義上一個偏差值
float Kp,Ki,Kd;
}pid;
//初始化變量
void PID_init(void)
{
printf ("pid_value_init_begin\n");
pid.ActualSpeed = 0.0;
pid.SetSpeed = 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;
printf("pid_init end \n");
}
//增量式算法
float PID_calculate(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;
}
int main(void)
{
int setcount = 0;
printf ("Please begin \n");
PID_init();
while (setcount < 100)
{
float speed = PID_calculate(250.0);
printf ("value is %f\n",speed);
setcount++;
Sleep(300);
}
system("pause");
return 0;
}
復制代碼
歡迎光臨 ELEOK (http://m.afoofa.cn/)
Powered by Discuz! X5.0