标题: 电机PID调节程序 [打印本页]

作者: chengp    时间: 2023-5-16 19:18
标题: 电机PID调节程序
分别有增量式PID调节程序、积分限幅调节程序、位置式PID调节程序
  1. #include<stdio.h>
  2. struct _pid
  3. {
  4.         float Setspeed;//定义设定值
  5.         float ActualSpeed;//定义实际值
  6.         float err;//定义偏差值
  7.         float err_last;//定义上上个偏差值
  8.         float Kp,Ki,Kd;//定义比例、积分、微分系数
  9.         float err_next;//定义上一个偏差值
  10. }pid;
  11. void PID_init()
  12. {
  13.          printf("PID_init begin \n");
  14.          pid.Setspeed=0.0;
  15.          pid.ActualSpeed=0.0;
  16.          pid.err=0.0;
  17.          pid.err_last=0.0;
  18.          pid.err_next=0.0;
  19.          pid.Kp=0.2;
  20.          pid.Ki=0.015;
  21.          pid.Kd=0.2;
  22.          printf("PID_init end\n");
  23. }
  24. float PID_realize(float speed)
  25. {
  26.         float incrementSpeed;
  27.         pid.Setspeed =speed;
  28.         pid.err=pid.Setspeed-pid.ActualSpeed;
  29.         incrementSpeed=pid.Kp*(pid.err-pid.err_next)+pid.Ki*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last);
  30.         pid.ActualSpeed+=incrementSpeed;
  31.         pid.err_last=pid.err_next;
  32.         pid.err_next=pid.err;
  33.         return pid.ActualSpeed;
  34. }
  35. int main()
  36. {
  37.         int count;
  38.         printf("System begin\n");
  39.         PID_init();
  40.         count=0;
  41.         while(count<1000)
  42.         {
  43.                 float speed=PID_realize(50);
  44.                 printf("%f\t",speed);
  45.                 count++;
  46.         }
  47.         getchar();
  48.         return 0;
  49. }
复制代码


积分限幅PID.rar

677.47 KB, 下载次数: 60, 下载积分: 黑币 -5

增量式PID.rar

543.92 KB, 下载次数: 68, 下载积分: 黑币 -5

位置式PID.rar

5.52 MB, 下载次数: 65, 下载积分: 黑币 -5


作者: long7777777    时间: 2023-5-20 17:30
点赞点赞点赞点赞点赞点赞点赞点赞
作者: 王秋冬    时间: 2023-7-20 07:40
全面介绍PID的多种程序范例,谢谢分享。
作者: wanghuailin    时间: 2023-7-25 19:32
还好可以借鉴
作者: tsb0574    时间: 2024-10-15 17:16
没有曲线图像输出?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1