PID恒温控制(位置式+增量式)

目录

一、介绍

二、位置式PID控制

1. 位置型PID特点

2. 比例系数与积分时间的大小对曲线的影响关系

(1) 比例环节

(2) 积分环节

(3) 微分环节

3. 代码示例

4. 调节PID各环节的方式

       (1) 控制 Kp 变量

       (2) 控制 Ki 变量 

       (3) 控制 Kd 变量  

       (4) 实际演示效果

二、增量式PID控制

1. 增量型PID特点

2. 代码示例


一、介绍

        PID控制器是一种广泛应用的调节器控制规律,其核心在于通过比例(P)、积分(I)和微分(D)三个环节对控制目标进行精确调节。这种控制方法主要适用于基本线性和动态特性不随时间变化的系统。

        在PID控制中,比例环节的作用是根据偏差e的大小调整控制器的输出信号u,使系统能够快速响应偏差的变化。然而,过大的比例系数Kp可能导致系统产生激烈的振荡和不稳定,因此在设计时需要合理优化Kp。

        积分环节的作用是对偏差e进行积分,以实现无差调节。当系统平衡后,偏差为0,积分控制器的输出不再发生变化。积分环节有助于消除系统的稳态误差,但积分作用过强可能导致系统响应过慢。

        微分环节则是根据偏差e的变化率调整控制器的输出信号u,有助于改善系统的动态特性,减小超调和振荡。然而,微分环节对噪声干扰信号敏感,需要在实际应用中加以注意。

        位置式PID和增量式PID是PID控制的两种主要形式。

        位置式PID是一种位置闭环控制方法。它根据编码器的脉冲累加测量电机的位置信息,并与目标值进行比较得到控制偏差。然后,通过对偏差进行比例、积分、微分的控制,使偏差趋近于0。这种方法通常应用于需要精确位置控制的场合,如舵机控制等。

        增量式PID则是一种速度闭环控制方法。它根据单位时间获取的脉冲数测量电机的速度信息,并与目标值进行比较得到控制偏差。同样地,通过对偏差进行比例、积分、微分的控制,使偏差趋近于0。增量式PID关注的是控制量的增量,适用于需要快速响应速度变化的场合。

        总的来说,PID控制器通过比例、积分和微分三个环节的组合,实现了对控制目标的精确调节。位置式PID和增量式PID则分别适用于不同的控制需求,为各种工业控制系统提供了有效的解决方案。

PID三个环节各自的主要作用和效应:

  • 比例环节:起主要控制作用,使控制量向目标值靠拢,但可能导致振荡
  • 积分环节:消除稳态误差,但会增加超调量
  • 微分环节:产生阻尼效果,抑制振荡和超调,但会降低响应速度

二、位置式PID控制

1. 位置型PID特点

        1、位置型PID控制的输出与整个过去的状态有关,用到了偏差的累加值,容易产生累积偏差。
   2、位置型PID适用于执行机构不带积分部件的对象。的强弱取决于积分时间常数T,T越大,积分作用越弱,反之则越强。
   3、位置型的输出直接对应对象的输出,对系统的影响比较大。

2. 比例系数与积分时间的大小对曲线的影响关系

在这里插入图片描述

(1) 比例环节

        成比例地反映控制系统的偏差信号e(t),偏差一旦产生,控制器立即产生控制作用,以减小偏差。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。
        P参数越大比例作用越强,动态响应越快,消除误差的能力越强。但实际系统是有惯性的,控制输出变化后,实际y(t)值变化还需等待一段时间才会缓慢变化。由于实际系统是有惯性的,比例作用不宜太强,比例作用太强会引起系统振荡不稳定。P参数的大小应在以上定量计算的基础上根据系统响应情况,现场调试决定,通常将P参数由大向小调,以能达到最快响应又无超调(或无大的超调)为最佳参数。
        优点:调整系统的开环比例系数,提高系统的稳态精度,减低系统的惰性,加快响应速度。
        缺点:仅用P控制器,过大的开环比例系数不仅会使系统的超调量增大,而且会使系统稳定裕度变小,甚至不稳定。

(2) 积分环节

        控制器的输出与输入误差信号的积分成正比关系。主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数T,T越大,积分作用越弱,反之则越强。
  对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。PI控制器不但保持了积分控制器消除稳态误差的“记忆功能”,而且克服了单独使用积分控制消除误差时反应不灵敏的缺点。
  优点:消除稳态误差。
  缺点:积分控制器的加入会影响系统的稳定性,使系统的稳定裕度减小。

(3) 微分环节

        反映偏差信号的变化趋势,并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。
  自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入“比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势。这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在调节过程中的动态特性。PD控制只在动态过程中才起作用,对恒定稳态情况起阻断作用。因此,微分控制在任何情况下都不能单独使用。
  优点:使系统的响应速度变快,超调减小,振荡减轻,对动态过程有“预测”作用。
  在低频段,主要是PI控制规律起作用,提高系统型别,消除或减少稳态误差;在中高频段主要是PD规律起作用,增大截止频率和相角裕度,提高响应速度。因此,控制器可以全面地提高系统的控制性能。
        

3. 代码示例

        完整代码链接:https://download.csdn.net/download/qq_26043945/89145970

//定义PID结构体用于存放一个PID的数据
typedef struct{
   	float kp,ki,kd;//三个系数
    float error,lastError;//误差、上次误差
    float integral,maxIntegral;//积分值、积分限幅值
    float output,maxOutput;//PWM输出值、PWM输出限幅值
}PID;
 
//进行一次pid计算(每次调用间隔一段时间)
//参数为(pid结构体,setpoint目标值,feedback反馈值),计算结果放在pid结构体的output成员中
void PID_Calc(PID *pid,float setpoint,float feedback){
 	
    // 误差
    pid.error = setpoint - feedback; 

    // 累积误差
    pid.integral = pid.integral + pid.error;

    // 累积误差限幅
    if(pid.integral > pid.maxIntegral) pid.integral = pid.maxIntegral;
    else if(pid.integral < -pid.maxIntegral) pid.integral = -pid.maxIntegral;

    // 计算输出值
    pid.output = pid.error * pid.kp + pid.integral * pid.ki + (pid.error - pid.lastError) * pid.kd;

    // 更新上一误差  
    pid.lastError = pid.error; 
}
 

4. 调节PID各环节的方式

       (1) 控制 Kp 变量

       (2) 控制 Ki 变量 

       (3) 控制 Kd 变量  

       (4) 实际演示效果

二、增量式PID控制

1. 增量型PID特点

        1、增量型PID算法不需要做累加,控制量增量的确定仅与最近几次偏差值有关,计算偏差的影响较小。
   2、增量型PID算法得出的是控制量的增量,对系统的影响相对较小。
   3、采用增量型PID算法易于实现手动到自动的无扰动切换。

        从下面可以看出,由于位置式PID里面存在积分信号,容易产生累积偏差,在达到设定值时会存在震荡,这里的小人运动到墙面处就需要停止,就不能有震荡。增量式PID只带入了前两次的误差,所以不容易震荡,所以更适合用在下面的这种情况。

2. 代码示例

// 实际测量值
float feedback = 0; 

// 增量式PID控制器结构体
typedef struct {
    float Kp;     // 比例系数
    float Ki;     // 积分系数
    float Kd;     // 微分系数
    float error;             // 当前误差
    float prev_error;        // 上一次误差
    float prev_prev_error;   // 上上次误差
    float setpoint;          // 设定值
} PID;

// 计算当前误差
error = setpoint- feedback; 

// 计算增量式PID
add = Kp * (error - prev_error) + Ki * error + Kd * (error - 2 * prev_error + prev_prev_error);

// 计算最终的PID输出
output_PWM = output_PWM + add;

//更新上上次误差
prev_prev_error = prev_error;

//更新上次误差
prev_error = error;
  • 27
    点赞
  • 172
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_755682240

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值