[电机相关] pid算法c程序

[复制链接]
898|3
 楼主| primojones 发表于 2023-11-18 20:45 | 显示全部楼层 |阅读模式


  1. C语言理解代码:
  2. //创建变量结构体
  3. struct pid_type {
  4.     float Kp; //PI调节的比例常数
  5.     float Ti; //PI调节的积分常数
  6.     float T; //采样周期
  7.     float Ki;
  8.     float ek; //偏差e[k]
  9.     float ek1; //偏差e[k-1]
  10.     float ek2; //偏差e[k-2]
  11.     float uk; //u[k]
  12.     signed int uk1; //对u[k]四舍五入取整
  13.     signed int adjust; //调节器输出调整量
  14. } pid;
  15. //变量初始
  16. void Pid_Init(void)
  17. {
  18.     pid.Kp=4;
  19.     pid.Ti=0.005;
  20.     pid.T=0.001;
  21.     pid.Ki=0.6; //微分系数Kd=KpTd/T。根据实际调节
  22.     pid.ek=0;
  23.     pid.ek1=0;
  24.     pid.ek2=0;
  25.     pid.uk=0;
  26.     pid.uk1=0;
  27.     pid.adjust=0;
  28. }
  29. int PIDadjust(float ek) //PI调节算法
  30. {
  31.     if( gabs(ek)<0.1 )
  32.     {
  33.         pid.adjust=0;
  34.     }
  35.     else
  36.     {
  37.         pid.uk=pid.Kp*(pid.ek-pid.ek1)+pid.Ki*pid.ek; //计算控制增量
  38.         pid.ek1=pid.ek;
  39.         pid.uk1=(signed int)pid.uk;
  40.         if(http://pid.uk>0)
  41.                 {
  42.                     if(piduk-piduk1>=0.5)
  43.         {
  44.             pi.uk1=pid.uk1+1;
  45.         }
  46.             }
  47.     if(piduk<0)
  48.     {
  49.         if(http://pid.uk1-pid.uk>=0.5)
  50.                     {
  51.                         pid.uk1=pid.uk1-1;
  52.                     }
  53.         }
  54.     adjust=pid.uk1;
  55. }
  56. return adjust;
  57. }


chenqianqian 发表于 2023-11-21 23:07 来自手机 | 显示全部楼层
一个PID算法,看起来简单,实则要把它调稳定还是不容易。
uboot 发表于 2023-11-26 09:51 来自手机 | 显示全部楼层
记号,只用过比例的路过。积分微分没有使用
Henryko 发表于 2023-11-27 10:18 来自手机 | 显示全部楼层
调这个真的需要经验啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

1581

帖子

0

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