PID算法的C程序实现方式
PID算法的C程序实现方式
一、PID算法简介
在水温控制模型、智能车比赛、四轴飞行器稳定,平衡车速度等控制实现时,因为预设值与实际控制效果之间存在一定的偏差、实际输出与数据反馈之间存在一定的延时,往往不能得到理想的控制效果。PID作为应用为广泛的一种自动控制器,在实际控制中加入PID算法将能达到系统不断灵活变化的效果。
上面的提到的几种实例都可以称为惰性系统(过程控制对象具有“一介滞后+纯滞后”与“二介滞后+纯滞后 ”特点,说白了就是响应延迟+反馈延时),PID控制器是一种最优控制器。
顾名思义,P指是比例(Proportion),I指是积分(Integral),D指微分(Differential)。在电机调速系统中,输入信号为正,要求电机正转时,反馈信号也为正(PID算法时,误差=输入-反馈),同时电机转速越高,反馈信号越大。要想搞懂PID算法的原理,首先必须先明白P,I,D各自的含义及控制规律:
1.1比例P
Proportion(比例),就是输入偏差乘以一个常数。
比例调节器方程为:
y=Kp*e(t)
调节器的输出与输入偏差成正比。比例项部分其实就是对预设值和反馈值差值的放大倍数。
控制对象为电机时,比例Kp越大时,电机转速回归到输入值的速度将更快,及调节灵敏度就越高。从而,加Kp值,可以减少从非稳态到稳态的时间。但是同时也可能造成电机转速在预设值附近振荡的情形,即用力过猛,调整跨度太大,如果是舵机转向系统,会出现智能车摇摆S型前进,这就是Kp过大造成的,所以又引入积分I解决此问题。
1.2 积分I
Integral(积分),积分作用是指调节器的输出与输入偏差的积分成比例的作用。
积分方程为:
Ti是积分时间常数,它表示积分速度的大小,Ti越大,积分速度越慢,积分作用越弱。
积分环节的调节作用虽然会消除静态误差,但也会降低系统的响应速度,也就是积分项的调节存在明显的滞后,因为Ti代表的是时间常数,Ti值越大,时间越长,滞后效果越明显,增加系统的超调量。积分常数T I 越大,积分的积累作用越弱。增大积分常数T I 会减慢静态误差的消除过程,但可以减少超调量,提高系统的稳定性。所以,必须根据实际控制的具体要求来确定TI 。比如:当差值不是很大时,可以减小控制效果,维持原系统的输出值。但是还是要将偏差进行加法积累。当这个和累加超过预定值时,再一次性进行处理。从而避免了频繁控制而出现振荡现象。
1.3 微分D
Derivative(微分),微分项部分其实就是求电机转速的变化率。也就是前后两次差值的差。
微分反应了偏差信号的变化规律,或者说是变化趋势,偏差的微分实际偏差的变化速率,变化越快,其微分绝对值越大。偏差增大时,其微分为正;偏差减小时,其微分为负。控制器输出量的微分部分与误差的微分成正比,反映了被控量变化的趋势。根据偏差信号的变化趋势来进行超前调节,从而增加了系统的快速性。Td值越大,超前控制作用就会越明显,可以在做到提前控制。比例仅仅是偏差的放大增幅,表示当前调节参数,微分是预测偏差的变化,相当于提前加入了控制数据。在比例微分调节器中,能够提前控制偏差,也有可能出现负值,避免了惰性系统的超调现象。
一、PID算法内容
2.1 PID算法选择
PID算法中有比例积分调节(PI),比例微分调节器(PD),可根据系统要求进行选择,通常为了改善调节品质,往往把比例、积分、微分三种作用组合起来,形成PID调节器。理想的PID微分方程为:
其中u(t) 调节器的输出信号;
e(t) 调节器的偏差信号,它等于给定值与测量值之差
Kp 为比例增益;
T i 积分时间
T d 微分时间
KP /T I 积分系数
KP / T D 微分系数
2.2 PID算法要求
PID需要在一个闭环系统里面(桥黑板)。闭环系统即在控制系统中,有执行处理单元,同时必须有输入反馈单元,电机系统中,必须有编码器、测速电机等测速设备。控制系统原理图如下:
2.3 PID参数常用小口诀:
整定参数寻最佳,从小到大逐步查;
先调比例后积分,微分作用最后加;
曲线震荡很频繁,比例刻度要放大;
曲线漂浮波动大,比例刻度要拉小;
曲线偏离回复慢,积分时间往小降;
曲线波动周期长,积分时间要加长;
曲线震荡动作繁,微分时间要加长。
一、C代码实现
由于计算机控制是一种采样控制,它只能根据采样许可的偏差计算控制量,而不能象模拟控制那样连续输出控制量,进行连续控制。那么上面的PID公式不能直接使用,必须进行离散化处理
假设采样时间间隔为T,则在k时刻:
偏差为e(k);
积分为e(k)+e(k-1)+e(k-2)+...+e(0);
微分为(e(k)-e(k-1))/T;
k 采样信号,k=0,1,2,…
u k 第k 次采样时刻的计算机输出值
e k 第k 次采样时刻输入的偏差值
e k −1 第k-1 次采样时刻输入的偏差值。
实际上面的公式为位置式PID,运算较多,占用单片机资源,还可以推出增量式PID:
U(k) = P *e(k) + I *[e(k)+e(k-1)+...+e(0)]+ D *[e(k)-e(k-1)]。
简化后可以在C语言中写成:
u(k) = u(k)-u(k-1) = Kp(e(k) - e(k-1)) + Ki *e(k) + Kd(e(k)) - 2e(k-1) + e(k-2))
更多培训课程,学习资讯,课程优惠等学校信息,请进入 广州海珠区嵌入式培训广州白云区单片机培训 网站详细了解,免费咨询电话:400-998-6158