×

PID算法详解及实例分析

消耗积分:0 | 格式:pdf | 大小:未知 | 2023-11-09

ben111

分享资料个

PID算法详解及实例分析

#include

using namespace std;

struct _pid{
   float SetSpeed; //定义设定值
   float ActualSpeed; //定义实际值
   float err; //定义偏差值
   float err_last; //定义上一个偏差值
   float Kp,Ki,Kd; //定义比例、积分、微分系数
   float voltage; //定义电压值(控制执行器的变量)
   float integral; //定义积分值
}pid;

void PID_init(){
   printf("PID_init begin \n");
   pid.SetSpeed=0.0;
   pid.ActualSpeed=0.0;
   pid.err=0.0;
   pid.err_last=0.0;
   pid.voltage=0.0;
   pid.integral=0.0;
   pid.Kp=0.2;
   pid.Ki=0.015;
   pid.Kd=0.2;
   printf("PID_init end \n");
}

float PID_realize(float speed){
   pid.SetSpeed=speed;
   pid.err=pid.SetSpeed-pid.ActualSpeed;
   pid.integral+=pid.err;
   pid.voltage=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);
   pid.err_last=pid.err;
   pid.ActualSpeed=pid.voltage*1.0;
   return pid.ActualSpeed;
}

int run_pid(){
   printf("System begin \n");
   PID_init();
   int count=0;
   while(count<1000) {
       float actual_speed=PID_realize(200.0);
       printf("count is: %d, actual_speed is: %f\n", count, actual_speed);
       count++;
   }
   return 0;
}

int main(int argc, char const *argv[])
{
   run_pid();
   return 0;
}
 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !