700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C语言实现位置式pid与增量式pid

C语言实现位置式pid与增量式pid

时间:2023-01-03 14:12:09

相关推荐

C语言实现位置式pid与增量式pid

//经典PID控制的c实现

//1、位置式PID实现

//1、位置式PID实现typedef struct {float setValue;//设定值float actValue;//输出值float integral;//积分值float lasterror;//前一拍偏差float preerror;float Kp;//比例系数float Ki;//积分系数float Kd;//微分系数}PID;//实现PID控制器void PIDRegulation(PID* vPID, float processValue) {//输入PID变量地址和当前值vPID->setValue = processValue;vPID->preerror = vPID->setValue - vPID->actValue;//计算当前误差vPID->integral += vPID->preerror;//误差积累vPID->actValue = vPID->Kp * vPID->preerror + vPID->Ki * vPID->integral + vPID->Kd * (vPID->preerror - vPID->lasterror);//计算实际值vPID->lasterror = vPID->preerror;//误差更新cout << vPID->actValue << endl;}

//2、增量型PID;上什么是增量型呢。比如温度控制。现在温度是30度,目标是50度,那么我们

//这一次给它加温10度,让它变化到40度。那么下一次要加多少度呢?(假设为N度),这个N度

//就是我们说地 增量,增量的公式实际是 U(k)-U(k-1),就是位置型结果的两次相减。

typedef struct {float setValue;float actValue;float lasterror;float preerror;float Kp;float Ki;float Kd;}IPID;void IPIDRegulation(IPID* vIPID, float processValue) {//输入PID变量地址和当前值float thiserror;float increment;float perror, ierror, derror;vIPID->setValue = processValue;thiserror = vIPID->setValue - vIPID->actValue;//当前误差等于设定值减去当前值perror = thiserror - vIPID->lasterror; // 两次偏差差值err(k) - err(k - 1)ierror = thiserror;derror = thiserror - 2 * (vIPID->lasterror) + vIPID->preerror;increment = vIPID->Kp * perror + vIPID->Ki * ierror + vIPID->Kd * derror;//增量计算vIPID->preerror = vIPID->lasterror;//存放偏差用于下次运算vIPID->lasterror = thiserror;vIPID->actValue += increment;cout << vIPID->actValue << endl;}int main() {//位置式pidPID pid;pid.setValue = 1.0;pid.actValue = 0.0;pid.integral = 0.0;pid.lasterror = 0.0;pid.preerror = 0.0;pid.Kp = 0.2;pid.Ki = 0.015;pid.Kd = 0.2;int i = 0;//while (i++ < 1000) {//PIDRegulation(&pid, 6000);//}//增量式pidIPID ipid;ipid.setValue = 1.0;ipid.actValue = 0.0;ipid.lasterror = 0.0;ipid.preerror = 0.0;ipid.Kp = 0.2;ipid.Ki = 0.015;ipid.Kd = 0.2;i = 0;while (i++ < 1000) {IPIDRegulation(&ipid, 6000);}return 0;}

位置型PID特点:

位置型PID控制的输出与整个过去的状态有关,用到了偏差的累加值,容易产生累积偏差。

位置型PID适用于执行机构不带积分部件的对象。

位置型的输出直接对应对象的输出,对系统的影响比较大。

增量型PID控制器的基本特点:

增量型PID算法不需要做累加,控制量增量的确定仅与最近几次偏差值有关,计算偏差的影响较小。

增量型PID算法得出的是控制量的增量,对系统的影响相对较小。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。