什么是pid算法,难学吗,用C语言,plc怎么实现

什么是pid算法,难学吗,用C语言,plc怎么实现,第1张

一、什么是PID:

PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。顾名思义,PID控制算法是结合比例、积分和微分三种环节于一体的控制算法,它是连续系统中技术最为成熟、应用最为广泛的一种控制算法,该控制算法出现于20世纪30至40年代,适用于对被控对象模型了解不清楚的场合。 ---百度百科

二、PID是否难学:

在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握PID算法的设计与实现过程,对于一般的研发人员来讲,应该是足够应对一般研发问题了,而难能可贵的是,在我所接触的控制算法当中,PID控制算法又是最简单,最能体现反馈思想的控制算法,可谓经典中的经典。经典的未必是复杂的,经典的东西常常是简单的,而且是最简单的,想想牛顿的力学三大定律吧,想想爱因斯坦的质能方程吧,何等的简单!简单的不是原始的,简单的也不是落后的,简单到了美的程度。 ---1

三、PID算法的C语言源码:

PID 控制算法可以分为位置式 PID 和增量式 PID 控制算法

详细见参考12

参考:

1PID算法

2简易PID算法的快速扫盲(超详细+过程推导+C语言程序)

#include <stdlibh>

#include "global_varibleh"

/

模块名: PID

描述: PID调节子程序

采用PID-PD算法。在偏差绝对值大于△e时,用PD算法,以改善动态品质。

当偏差绝对值小于△e时,用PID算法,提高稳定精度。

PIDout=kpe(t)+ki[e(t)+e(t-1)++e(1)]+kd[e(t)-e(t-1)]

============================================================================

入口: 无

出口: 无

改变: PID_T_Run=加热时间控制

/

void PID_Math(void)

{

signed long ee1; //偏差一阶

//signed long ee2; //偏差二阶

signed long d_out; //积分输出

if(!Flag_PID_T_OK)

return;

Flag_PID_T_OK=0;

Temp_Set=3700; //温度控制设定值3700度

PID_e0 = Temp_Set-Temp_Now; //本次偏差

ee1 = PID_e0-PID_e1; //计算一阶偏差

//ee2 = PID_e0-2PID_e1+PID_e2; //计算二阶偏差

if(ee1 > 500) //一阶偏差的限制范围

ee1 = 500;

if(ee1 < -500)

ee1 = -500;

PID_e_SUM += PID_e0; //偏差之和

if(PID_e_SUM > 200) //积分最多累计的温差

PID_e_SUM = 200;

if(PID_e_SUM < -200)

PID_e_SUM = -200;

PID_Out = PID_kpPID_e0+PID_kdee1; //计算PID比例和微分输出

if(abs(PID_e0) < 200) //如果温度相差小于15度则计入PID积分输出

{

if(abs(PID_e0) > 100) //如果温度相差大于1度时积分累计限制

{

if(PID_e_SUM > 100)

PID_e_SUM = 100;

if(PID_e_SUM < -100)

PID_e_SUM = -100;

}

d_out = PID_kiPID_e_SUM; //积分输出

if(PID_e0 < -5) //当前温度高于设定温度05度时积分累计限制

{

if(PID_e_SUM > 150)

PID_e_SUM = 150;

if(PID_e_SUM > 0) //当前温度高于设定温度05度时削弱积分正输出

d_out >>= 1;

}

PID_Out += d_out; //PID比例,积分和微分输出

}

else

PID_e_SUM=0;

PID_Out/=100; //恢复被PID_Out系数放大的倍数

if(PID_Out > 200)

PID_Out=200;

if(PID_Out<0)

PID_Out=0;

if(PID_e0 > 300) //当前温度比设定温度低3度则全速加热

PID_Out=200;

if(PID_e0 < -20) //当前温度高于设定温度02度则关闭加热

PID_Out=0;

Hot_T_Run=PID_Out; //加热时间控制输出

PID_e2 = PID_e1; //保存上次偏差

PID_e1 = PID_e0; //保存当前偏差

}

////////////////////////////////////////////////////////////void PID_Math() end

PID是工业控制上的一种控制算法,其中P表示比例,I表示积分,D表示微分。以温度控制的PID程序为例:P(比例)表示在温度设定值上下多少度的范围内做比例动作,当温度越高,功率越小,温度越低,功率就越大,功率到底为多大,就看温度偏差值和比例区间的大小按反比关系计算。I(积分)也是一种比例,是温度偏差值的累积值与设定的一个值之间的反比关系,但要注意何时将温度偏差值的累积值清零。积分就好像当温度比设定值低很多而你有觉得温度升的慢的时候就使劲的加大功率一样。D(微分)是温度变化快慢跟功率的比值,即当你觉得温度上升的太快时,就降低功率,一阻止温度上升过快,反之当温度下降太快时,就加大功率以阻止温度下降太快一样。

仅能给你一段例子程序去修改,对你说的具体东西不是非常清楚,要完全按你的要求写出来,不太可能

// PID算法控制子程序-------------------------------------------------------------------------

void PIDControl(int rk,int yk)

{

ek=rk-yk;

duk=aek+bek1+cek2; // 计算控制输出

ek2=ek1; ek1=ek;

if ( duk>10 ) duk=3; // 幅度限制

tz=(int)duk;

pwm+=tz; // 计算当前占空比

if ( pwm<0 ) pwm=0;

else if ( pwm>99 ) pwm=99;

}

以上就是关于什么是pid算法,难学吗,用C语言,plc怎么实现全部的内容,包括:什么是pid算法,难学吗,用C语言,plc怎么实现、求一个单片机C语言编写的PID控制程序。谢谢!!、什么是PID算法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9356861.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存