PID算法基本原理及整定实现方法

1、关于自动调节系统几个关键名词

1.1、自动调节系统

比方说桌子上放个物体,样子像块金属,巴掌大小。你心里会觉得这个物体比较重,就用较大力量去拿,可是这个东西其实是海绵做的,外观被加工成了金属的样子。手一下子“拿空了”,打住了鼻子。这是怎么回事?比例作用太强了。导致你的大脑发出指令,让你的手输出较大的力矩,导致“过调”
还是那个桌子,还放着一块相同样子的东西,这一次你会用较小的力量去拿。可是东西纹丝不动。怎么回事?原来这个东西确确实实是钢铁做的。刚才你调整小了比例作用,导致比例作用过弱。导致你的大脑发出指令,命令你的手输出较小的力矩,导致“欠调”
还是那个桌子,第三块东西样子跟前两块相同,这一次你一定会小心点了,开始力量比较小,感觉物体比较沉重了,再逐渐增加力量,最终顺利拿起这个东西。为什么顺利了呢?因为这时候你不仅使用了比例作用,还使用了积分作用,根据你使用的力量和物体重量之间的偏差,逐渐增加手的输出力量,直到拿起物品以后,你增加力量的趋势才得以停止。
这三个物品被拿起来的过程,就是一个很好的整定自动调节系统参数的过程。凡是具备控制思想和调节方法的系统都叫自动调节系统。

1.2、负反馈

负反馈是个对收集到的信号进行相反处理的办法叫做负反馈,要想让一个放大器稳定,需要用到负反馈。
走路的时候,眼睛看路,他会告诉你个信号:偏左了,偏右了,然后让你脑子进行修正。信号发到你脑子里面后,你脑子里要对反馈信号与目标信号相减,然后进行修正。偏左了就向右点,偏右了就向左点。对这个相减的信号就是负反馈。如果相加就是正反馈了,那样走着走着你就掉进坑里去了。

2、什么是PID

PID,就是对输入偏差进行比例积分微分运算,运算的叠加结果去控制执行机构。其中调节器就是人的大脑,就是一个调节系统的核心。任何一个控制系统,只要具备了带有 PID的大脑或者说是控制方法,那它就是自动调节系统
基本的调节器具有两个输入量:被调量和设定值:被调量就是反映被调节对象的实际波动的量值(变化),设定值就是人们设定的值,也就是人们期望被调量需要达到的值(固定)
只要记住这三个量:设定值、被调量、输出指令。事实上,为了描述方便,习惯上更精简为两个量:输入偏差和输出指令。输入偏差是被调量和设定值之间的差值
P就是比例,就是输入偏差乘以一个系数(提高响应速度);
I就是积分,就是对输入偏差进行积分运算(减少误差);
D就是微分,对输入偏差进行微分运算(抑制震荡)。
PID 算法的一般形式如下图所示:


在这里插入图片描述
控制器本身就是比例、积分、微分三个环节的加和。这里我们规定(在t时刻):
①输入量为 r(t); ②输出量为 c(t); ③偏差量为 e(t)=rin(t)-rout(t);

3、PID分类

3.1、模拟PID 控制

在我们的微处理器里面,因为控制器是通过软件实现其控制算法的,所以必 须对模拟调节器进行离散化处理,这样它只需根据采样时刻的偏差值计算控制 量。因此,我们需要使用离散的差分方程代替连续的微分方程。
模拟PID控制原理:如图所示是一个小功率直流电机的调速原理图。给定速度n0(t)与实际转n(t)速进行比较 ,其差值e(t) ,经过 PID 控制器调整后输出电压控制信号 , 经过功率放大后,驱动直流电动机改变其转速。


速度PID
常规的模拟 PID 控制系统原理框图如下图所示:

在这里插入图片描述
该系统由模拟 PID 控制器和被控对象组成。图中,r(t) 是给定值,y(t) 是系统的实际输出值,给定值与实际输出值构成控制偏差 e(t):
e(t) = r(t) - y(t)

e(t) 作为 PID 控制的输入, 作为 PID 控制器的输出和被控对象的输入。 所以模拟 PID 控制器的控制规律为:

在这里插入图片描述
其中: Kp ―― 控制器的比例系数
Ti -- 控制器的积分时间,也称积分系数
Td ―― 控制器的微分时间,也称微分系数

3.2、数字PID控制

3.2.1 位置式 PID

由于计算机控制是一种采样控制, 它只能根据采样时刻的偏差计算控制量,而不能像模拟控制那样连续输出控制量量, 进行连续控制。 由于这一特点式中的积分项和微分项不能直接使用,必须进行离散化处理。
离散化处理的方法为:以T作为采样周期,作为采样序号,则离散采样时间对应着连续时间 ,用矩形法数值积分近似代替积分,用一阶后向差分近似代替微分,最后可以得到离散的 PID 表达式为:


在这里插入图片描述
在这里插入图片描述

全量式或位置式 PID 控制算法
  • 其中:k ―― 采样序号,k =0,1,2,……;
  • uk ―― 第 k 次采样时刻的计算机输出值;
  • ek ―― 第k次采样时刻输入的偏差值;
  • ek-1 ―― 第k-1次采样时刻输入的偏差值;
  • Ki ――积分系数,Ki=Kp *T Ti ;
  • Kd ――微分系数, Kd=Kp *Td T ;

算法的缺点是: 由于全量输出, 所以每次输出均与过去状态有关, 计算时要对 ek 进行累加,工作量大; 并且,因为计算机输出的 对应的是执行机构的实际位置, 如果计算机出现故障,输出的 将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故在实生产际中是不允许的。增量式 PID 控制算法可以避免着重现象发生。

位置式 PID 的 C 语言实现:
//①定义PID变量结构体
struct _pid{
				float SetSpeed; //定义设定值
				float ActualSpeed; //定义实际值
				float err; //定义偏差值
				float err_last; //定义上一个偏差值
				float Kp,Ki,Kd; //定义比例、积分、微分系数
				float voltage; //定义电压值(控制执行器的变量)
				float integral; //定义积分值
}pid; 
//②初始化变量 
//统一初始化变量,尤其是 Kp,Ki,Kd 三个参数,调试过程当中,对于要求的控制效果,可以通过调节这三个量直接进行调节。  
void PID_init(){
				printf("PID_init begin \n");
				pid.SetSpeed=0.0;
				pid.ActualSpeed=0.0;
				pid.err=0.0;
				pid.err_last=0.0;
				pid.voltage=0.0;
				pid.integral=0.0;
				pid.Kp=0.2;
				pid.Ki=0.015;
				pid.Kd=0.2;
				printf("PID_init end \n");
}
//③编写控制算法 
//注意:这里用了最基本的算法实现形式,没有考虑死区问题,没有设定上下限,只是对公式的一种直接的实现
float PID_realize(float speed)
{
	pid.SetSpeed=speed;
	pid.err=pid.SetSpeed-pid.ActualSpeed;

	pid.integral+=pid.err;
	pid.voltage=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);
	pid.err_last=pid.err;
	pid.ActualSpeed=pid.voltage*1.0;

	return pid.ActualSpeed;
}

3.2.2 增量式 PID

增量式PID是指数字控制器的输出只是控制量的增量∆uk。当执行机构需要的控制量是增量,而不是位置量的绝对数值时,可以使用增量式PID控制算法进行控制。 增量式PID控制算法可以通过位置式离散PID 表达式推导出,可以得到控制器的第 k-1个采样时刻的输出值为:


在这里插入图片描述
增量式PID控制算法与位置式PID算法相比,计算量小的多,因此在实际中得到广泛的应用

增量式 PID代码实现
struct _pid
{
	float SetSpeed; //定义设定值
	float ActualSpeed; //定义实际值
	float err; //定义偏差值
	float err_next; //定义上一个偏差值
	float err_last; //定义最上前的偏差值
	float Kp,Ki,Kd; //定义比例、积分、微分系数
}pid;

void PID_init()
{
	pid.SetSpeed=0.0;
	pid.ActualSpeed=0.0;
	pid.err=0.0;
	pid.err_last=0.0;
	pid.err_next=0.0;
	pid.Kp=0.2;//比例常数
	pid.Ki=0.015;//积分时间常数
	pid.Kd=0.2;//微分时间常数
}

float PID_realize(float speed)
{
	pid.SetSpeed=speed;
	pid.err=pid.SetSpeed-pid.ActualSpeed;
	float incrementSpeed=pid.Kp*(pid.err-pid.err_next)+pid.Ki*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last);
	pid.ActualSpeed+=incrementSpeed;
	pid.err_last=pid.err_next;
	pid.err_next=pid.err;

return pid.ActualSpeed;
}

4、P纯比例作用趋势图的特征分析

所谓P,就是比例作用,是把调节器的输入偏差乘以一个系数,作为调节器的输出。而调节器的输入偏差就是被调量减去设定值的差值。当设定值不变的时候,调节器的输出只与被调量的波动有关。概念性公式如下:
输出波动=被调量波动*比例增益 (注:当设定值不变)
通过概念性公式,我们可以得到如下结论,对于一个单回路调节系统,单纯的比例作用 下:输出的波形与被调量的波形完全相似。
一句话简述:被调量变化多少,输出乘以比例系数的积就变化多少。或者说:被调量与输出的波形完全相似
几个输出曲线和被调量曲线的推论:

  1. 对于正作用的调节系统,顶点、谷底均发生在同一时刻。
  2. 对于负作用的调节系统,被调量的顶点就是输出的谷底,谷底就是输出的顶点。
  3. 对于正作用的调节系统,被调量的曲线上升,输出曲线就上升;被调量曲线下降, 输出曲线就下降。两者趋势完全一样。
  4. 对于负作用的调节系统,被调量曲线和输出曲线相对。 波动周期完全一致。

只要被调量变化,输出就变化;被调量不变化,不管静态偏差有多大,输出也不 会变化。


在这里插入图片描述

5、I 纯积分作用趋势图的特征分析

I 就是积分作用就是如果调节器的输如偏差不等于零,就让调节器的输出按照一定的速度一直朝一个方向累加下去。 积分相当于一个斜率发生器。启动这个发生器的前提是调节器的输如偏差不等于零,斜 率的大小与两个参数有关:输入偏差的大小、积分时间。
纯积分作用可以存在,但是很可能没有实用意义,那么单纯积分作用的特性总结如下:

  1. 输出的升降与被调量的升降无关,与输入偏差的正负有关。
  2. 输出的升降与被调量的大小无关。
  3. 输出的斜率与被调量的大小有关。
  4. 被调量不管怎么变化,输出始终不会出现节跃扰动。
  5. 被调量达到顶点的时候,输出的变化趋势不变,速率开始减缓。
  6. 输出曲线达到顶点的时候,必然是输入偏差等于零的时候。

    在这里插入图片描述

6、D 纯微分作用趋势图的特征分析

D 就是微分作用。单纯的微分作用是不存在的,一句话就就是被调量不动,输出不动;被调量一动,输出马上跳


在这里插入图片描述
根据微分作用的特点,咱们可以得出如下曲线的推论:

  1. 微分作用与被调量的大小无关,与被调量的变化速率有关;
  2. 与被调量的正负无关,与被调量的变化趋势有关;
  3. 如果被调量有一个阶跃,就相当于输入变化的速度无穷大,那么输出会直接到最小或者最大;
  4. 微分参数有的是一个,用微分时间表示。有的分为两个:微分增益和微分时间(KD是微分增益,TD是微分时间)微分增益表示输出波动的幅度,波动后还要输出回归,微分时间表示回归的快慢。
  5. 由第 4条得出推论:波动调节之后,输出还会自动拐回头。
    总结:
  6. 比例作用:输出与输入曲线相似。
  7. 积分作用:只要输入有偏差输出就变化
  8. 微分作用:输入有抖动输出才变化,且会猛变化。

7、PID参数整定

7.1、参数整定的分类

整定参数的方法有理论计算法和经验试凑法两种
理论计算法需要大 量的计算,对于初学者和数学底子薄弱的人会望而却步,并且计算效果还需要进一步的修改 整定,所以,在实际应用过程中,理论计算法比较少。经验试凑法最广为人知的就是第一章提到的整定口诀了,该方法提供了一个大致整 定的方向形性思路
我们可以依靠分析比例、积分、微分的基本性质,判读趋势图中,比例、积分、微分的 基本曲线特征,从而对 PID 参数进行整定。这个方法虽然基本等同于经验试凑法,但是它又 比传统的经验试凑法更快速更直观的,更容易整定。因而,我把这种依靠对趋势图的判读, 整定参数的办法,称之为:趋势读定法。
趋势读定法三要素:设定值、被调量、输出。三个曲线缺一不可。

7.2、PID整定口诀

在这里插入图片描述

7.3、参数整定的方法

关于 P、I、D 三个参数的主要作 用,可以大致又不完全地概况为:P 用于提高响应速度、I 用于减小静差、D用于抑制震荡。
首先我们需要明确我们的控制目标,也就是满足控制系统的 3 个要求:
①稳定性
②快速性
③准确性
具体的评估指标有最大超调量、上升时间、静差等。
最大超调量是响应曲线的最大峰值与稳态值的差,是评估系统稳定性的一个重要指标;
上升时间是指响应曲线从原始工作状态出发,第一次到达输出稳态值所需的时间,是评估系统快速性的一个重要指标;
静差是被控量的稳定值与给定值之差,一般用于衡量系统的准确性,如下图所示:
在这里插入图片描述
首先设I和D值为零,然后把P值从0逐渐增大,直到系统震荡。
在这里插入图片描述
这个时候因为P值比较大,出现了震荡。可能大家会疑惑,为什么I值为零, 但是没有静差呢?因为这个时候的 P 值已经很大了,静差一般是在P值较小而 I值为零的时候出现的。为了验证我们的想法,我们对PID参数进行调整。
在这里插入图片描述
如我们所设想的,在P值较小的时候出现了静差,响应速度也明显降低。所以增大P值可以一定程度上消除静差,提高响应速度,但是会导致系统震荡,而加入微分控制可以有效抑制震荡。下面我们尝试一组新的 PID 参数:
在这里插入图片描述
加入微分控制之后,很明显系统的震荡得到了抑制,震荡次数减少。事物都有两面性,微分控制也是弊端的。可以看到,系统的响应明显变慢了,因为引入微分控制相当于增大了系统的阻尼。这个时候我们需要结合P值和I值进行进一步的优化。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值