【电子设计大赛】PID 控制算法整理


全国电赛结束了,最后拿了省一等奖,冲刺全国失败,去杭州梦想破灭。不管怎么说,这成绩也算对得起我们待在实验室一年的努力了吧。我们四天三夜做的风力摆控制系统最后虽然也没用到PID,但是期间看了好多资料,现在电脑还有好多这种资料。废话不说,简单的总结一下PID吧。

一、算法描述

PID 是一个闭环控制算法。因此要实现 PID 算法,必须在硬件上具有闭环控制,就是得有反馈。比如控制一个电机的转速,就得有一个测量转速的传感器,并将结果反馈到控制路线上。以前对于闭环控制的一个最朴素的想法就只有 P 控制,将当前结果反馈回来,再与目标相减,为正的话,就减速,为负的话就加速。现在知道这只是最简单的闭环控制算法。PID 是比例(P)、积分(I)、微分(D)控制算法。但并不是必须同时具备这三种算法,也可以是 PD,PI,甚至只有 P 算法控制。

比例(P)、积分(I)、微分(D)控制算法各有作用:

比例 :反应系统的基本(当前)偏差 e(t),系数大,可以加快调节,减小误差,但过大的比例使系统稳定性下降,甚至造成系统不稳定;
积分 :反应系统的累计偏差,使系统消除稳态误差,提高无差度,因为有误差,积分调节就进行,直至无误差;
微分 :反映系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势,产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除,因此可以改善系统的动态性能。但是微分对噪声干扰有放大作用,加强微分对系统抗干扰不利。
积分和微分都不能单独起作用,必须与比例控制配合。


二、算法源码:

{
	static float e_s=0,sum=0;//e_s 用于保存上一次的误差值,用于计算微分项。Sum 用于计算累加和,计算积分项。
	float r;
	sum+=e;//计算积分累加和
	r=kp*e+ki*sum+kd*(e-e_s);//从左至右分别是比例项、积分项、微分项
	e_s=e;//保存这一次的误差值用于下一次微分计算
	return r;
}

 
  



你可能感兴趣的:(单片机,算法)