[LKS32 软件] c语言实现PID算法

[复制链接]
496|4
 楼主| macpherson 发表于 2024-7-21 22:29 | 显示全部楼层 |阅读模式


  1. #include <stdio.h>
  2. struct _pid
  3. {
  4.        float  error;        //差值
  5.        float error_last;    //上一次差值
  6.        float integral;      //差值的和
  7. }

  8. float Kp =0.01;    //比例系数,  提升速度
  9. float Ki = 1;      //积分系数,稳定输出
  10. float Kd =0.01;    //微分系数,减小振荡

  11. float cur_speed = 0;        //当前的速度
  12. float level = 0;            //用于输出pwm
  13. float set_speed = 50;       //设定的速度

  14. struct _pid pid;
  15. void pid_init()
  16. {
  17.      pid.error = 0;
  18.      pid.error_last = 0;
  19.      pid.integral = 0;
  20. }

  21. void pid_control()
  22. {
  23.      pid.error=set_speed-cur_speed;
  24.      pid.integral +=pid.error;

  25.      level =Kp*pid.error+Ki*pid.integral+Kd*(pid.error-pid.error_last);
  26.      pid.error=pid.error_lasst;

  27. }
  28. int main()
  29. {
  30.      pid_init();
  31.      for(i=0;i<10;i++)
  32.      {
  33.            pid_control();
  34.            printf("当前速度%f  等级 %f\n",cur_speed,level);

  35.      }
  36.      return 0 ;

  37. }


田舍郎 发表于 2024-7-21 23:37 来自手机 | 显示全部楼层
很好,参数要根据不同应用来调参
shenxiaolin 发表于 2024-7-22 14:32 | 显示全部楼层
感谢分享!很实用的资料
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

1975

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部