不用浮点实现pid_PID专题及C语言的实现

本文探讨了位置式PID与增量式PID的区别,并提供了C语言实现这两种PID控制算法的代码示例。位置式PID通过误差累加进行控制,而增量式PID仅与当前和前两期误差相关。文章还给出了确定PID参数的方法,强调在使用增量式PID时需要注意控制信号的正负,以防产生正反馈现象。
摘要由CSDN通过智能技术生成

注意:任何算法使用程序表示,都得将算法离散化,以下的算法公式及代码都是将连续函数离散化后的表示结果。

问题一:位置式pid与增量式pid差别?

位置式PID将误差累加,增量式PID与当前及前两派误差有关。

问题二:位置式PID计算公式是什么?

cb81c7ba16e71624ae2ad4adabcd3571.png

问题三:增量式PID计算公式是什么?

由问题二的位置式的PID计算公式可知,u(k)和u(k-1)的计算公式。将二者做差,即得到增量式PID的计算公式。

317fc83504f464261c3c687ad3903f24.png

问题四:位置式PID实现C语言代码?

typedef struct{

floatkp,ki,kd;

float ek,ek1,ek2;       //ek1 是 ek 的前一次误差

float eSUM;

}PID;

结构体PID的初始化:

PID pid = {10.0,10.0,0.0,0.0,0.0,0.0};

float PID_Loc(float SetValue,    float ActualValue, PID *pid){

float PIDLoc;

pid->ek  =  SetValue  -  ActualValue;

pid->eSum += pid->ek;   //累计误差

PIDLoc  =  (pid->kp*pid-ek)

+  (pid->ki*pid->eSUM)

+  [pid->kd*(pid->ek1   -   pid->ek)]

pid->ek1 = pid->ek;

return PIDLoc;

}

问题五:增量式PID的实现代码?该pid计算结果如何使用?

//PID结构体的定义见问题四,

float PID_Inc(float SetValue,  float ActualValue,  PID *pid){

float PIDInc;

pid->ek  =   SetValue  -  ActualValue;

PIDInc  =  [pid->kp  *  (pid->ek  -  pid->ek1)]

+   (pid->ki  *  pid->ek)

+  [pid->kd  *  (pid->ek  -  2*pid->ek1  +  pid->ek2)];

//注意:可以将公式化简,这是一种思维,不要简单的将下面化简的kp,ki,kd。理解为书上的PID。这里是提了公因式的

PIDInc  =  (pid->kp  *  pid->ek)

-  (pid->ki   *   pid->ek1)

+  (pid->kd  *   pid->ek2)

pid->ek2  =  pid->ek1;

pid->ek1  =  pid->ek;

return PIDInc;

}    //由于计算结果是属于增量,那么计算后,该PIDInc需要叠加到原PWM的占空比上面,具体是加还是减看具体情况。

问题六:为什么在使用增量式PID的时候,反馈的调节现象是正反馈?

增量式的pid,在实际的应用上,需要根据具体的情况判断是加还是减,弄错了就成为了正反馈。

问题七:实际应用中,PID三个参数该如何确定?

先调P值,P从小往大了调,调到临界振荡,取临界振荡的70%

再调I值,I值从大往小了调,调到消除稳定误差。

D值,视情况来调。默认为零。

参考文献:

[1] 何俊龙,杜封.微缩智能车路径跟踪的增量式PID控制[J].天津职业技术师范大学学报.2018,28(2):5-9

81671e886f0e78fb55277fa4709e005a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值