PID控制温度-待完善

PID控制算法分类

  增量式PID
  位置式PID

两者的区别

  位置式PID控制算法是一种非递推算法,其输出为u(k)直接控制执行机构(如阀门开度)一一对应。
  增量式PID控制算法是一种递推算法,其输出只是控制量的增量△u(k)。采用增量式算法时,计算输出的控制量△u(k)对应的是本次执行机构位置的增量,而不是对应执行机构的实际位置。
优缺点:
  位置式算法缺点:当前采样时刻的输出u(k)与过去各个状态有关,计算机要对e(k)进行累加,运算量大,且控制器对应执行机构的实际位置,若计算机出现故障,u(k)的大幅度变化会引起执行机构位置的大幅度变化。
  增量式算法的优点
  ①算式中不需要累加。控制增量△u(k)的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果;
  ②计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小,不会严重影响生产过程;
  ③手动-自动切换时冲击小。当控制从手动向自动切换时,可以作到无扰动切换。
  增量式PID并无积分作用,该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。

/---------------------------------------------------------------/

预备知识:

采样周期:
  首先第一步先确定被控对象的采样周期,
采样周期快的可设定在ms级别左右,采样周期慢的可设定在S级别左右。
比例:

积分:
  在调节时可以先设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,直至系统出现振荡之后在反过来,逐渐加大Ti,直至系统振荡消失。
记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。积分时间可以简单的理解成调整的频率(只是为了方便理解)。
微分:
  微分的作用是依据偏差变化速度来动作的,在系统中起着超前调节的作用。很多情况下微分是不需要调节的。若要设定,与确定P和Ti的方法相同,取不振荡时的30%。微分可以简单理解为超前控制。

PID常用口诀:
参数整定找最佳,从小到大顺序查
先是比例后积分,最后再把微分加
曲线振荡很频繁,比例度盘要放大
曲线漂浮绕大湾,比例度盘往小扳
曲线偏离回复慢,积分时间往下降
曲线波动周期长,积分时间再加长
曲线振荡频率快,先把微分降下来
动差大来波动慢。微分时间应加长
理想曲线两个波,前高后低4比1
一看二调多分析,调节质量不会低

C语言代码

参考链接:https://blog.csdn.net/kilotwo/article/details/79952530

/**************************************************************************
函数功能:增量PI控制器
入口参数:编码器测量值,目标速度
返回  值:电机PWM
根据增量式离散PID公式 
pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]
e(k)代表本次偏差 
e(k-1)代表上一次的偏差  以此类推 
pwm代表增量输出
在我们的速度控制闭环系统里面,只使用PI控制
pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)
**************************************************************************/
int Incremental_PI (int Encoder,int Target)
{   
   float Kp=20,Ki=30;   
     static int Bias,Pwm,Last_bias;         //相关内部变量的定义。
     Bias=Encoder-Target;                //求出速度偏差,由测量值减去目标值。
     Pwm+=Kp*(Bias-Last_bias)+Ki*Bias;   //使用增量 PI 控制器求出电机 PWM。
     Last_bias=Bias;                       //保存上一次偏差 
     return Pwm;                         //增量输出
} 
/**************************************************************************
函数功能:位置式PID控制器
入口参数:编码器测量位置信息,目标位置
返回  值:电机PWM
根据位置式离散PID公式 
pwm=Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)]
e(k)代表本次偏差 
e(k-1)代表上一次的偏差  
∑e(k)代表e(k)以及之前的偏差的累积和;其中k为1,2,,k;
pwm代表输出
**************************************************************************/
int Position_PID (int Encoder,int Target)
{   
     float Position_KP=80,Position_KI=0.1,Position_KD=500;
     static float Bias,Pwm,Integral_bias,Last_Bias;
     Bias=Encoder-Target;                                  //求出速度偏差,由测量值减去目标值。
     Integral_bias+=Bias;                                    //求出偏差的积分
     Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias);       //位置式PID控制器
     Last_Bias=Bias;                                       //保存上一次偏差 
     return Pwm;                                           //增量输出
}

参考链接:
https://zhuanlan.zhihu.com/p/129254220
位置式PID与增量式PID区别:
https://blog.csdn.net/qq1205512384/article/details/72614871
PID公式转换为代码:
http://www.51hei.com/mcu/2868.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值