PID算法基本思想

一、PID算法基本原理

PID算法是控制行业最经典、最简单、而又最能体现反馈控制思想的算法。对于一般的研发人员来说,设计和实现PID算法是完成自动控制系统的基本要求。 

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

PID 算法的一般形式如下图所示:

在这里插入图片描述

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

 

二、PID分类

2.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 控制器的控制规律为

在这里插入图片描述

 

 

2.2、数字PID控制

2.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;
}

2.2.2 增量式 PID

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

在这里插入图片描述

增量式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;
}

 

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

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

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

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

在这里插入图片描述

 

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

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

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

在这里插入图片描述

 

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

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

在这里插入图片描述

根据微分作用的特点,咱们可以得出如下曲线的推论:

 

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

总结:

  1. 比例作用:输出与输入曲线相似。
  2. 积分作用:只要输入有偏差输出就变化
  3. 微分作用:输入有抖动输出才变化,且会猛变化。

 

6、PID参数整定

6.1、参数整定的分类

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

6.2、PID整定口诀

在这里插入图片描述

 

6.3、参数整定的方法

关于 P、I、D 三个参数的主要作 用,可以大致又不完全地概况为:P 用于提高响应速度、I 用于减小静差、D用于抑制震荡。
首先我们需要明确我们的控制目标,也就是满足控制系统的 3 个要求:
①稳定性
②快速性
③准确性
具体的评估指标有最大超调量、上升时间、静差等。
最大超调量是响应曲线的最大峰值与稳态值的差,是评估系统稳定性的一个重要指标;
上升时间是指响应曲线从原始工作状态出发,第一次到达输出稳态值所需的时间,是评估系统快速性的一个重要指标;
静差是被控量的稳定值与给定值之差,一般用于衡量系统的准确性,如下图所示:

在这里插入图片描述

首先设I和D值为零,然后把P值从0逐渐增大,直到系统震荡。

在这里插入图片描述

这个时候因为P值比较大,出现了震荡。可能大家会疑惑,为什么I值为零, 但是没有静差呢?因为这个时候的 P 值已经很大了,静差一般是在P值较小而 I值为零的时候出现的。为了验证我们的想法,我们对PID参数进行调整。

在这里插入图片描述

如我们所设想的,在P值较小的时候出现了静差,响应速度也明显降低。所以增大P值可以一定程度上消除静差,提高响应速度,但是会导致系统震荡,而加入微分控制可以有效抑制震荡。下面我们尝试一组新的 PID 参数:

在这里插入图片描述

加入微分控制之后,很明显系统的震荡得到了抑制,震荡次数减少。事物都有两面性,微分控制也是弊端的。可以看到,系统的响应明显变慢了,因为引入微分控制相当于增大了系统的阻尼。这个时候我们需要结合P值和I值进行进一步的优化。

在这里插入图片描述

 

 

  • 9
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值