不用浮点实现pid_漫谈PID——实现与调参

闲话:

作为一个控制专业的学生,说起PID,真是让我又爱又恨。甚至有时候会觉得我可能这辈子都学不会pid了,但是经过一段时间的反复琢磨,pid也不是很复杂。所以在看懂pid的基础上,写下这篇文章,方便学习和交流。

==================================================================

PID控制器是工业过程控制中广泛采用的一种控制器,其中,P、I、D分别为比例(Proportion)、积分(Integral)、微分(Differential)的简写;将偏差的比例、积分和微分通过线性组合构成控制量,用该控制量对受控对象进行控制,称为PID算法 。

其中KP、KI、KD分别为比例系数、积分系数、微分系数。

比例系数KP :反应系统当前最基本的误差,系数大,可以加快调节,减小误差,但是过大的比例使系统稳定性下降,甚至造成系统的不稳定。

积分系数KI  :反应系统的累计误差,使系统消除稳态误差,提高无差度,只要有误差,积分调节就会起作用。

微分系数KD :反应系统误差的变化率,具有预见性,们可以预见偏差的变化趋势,产生超前的控制效果。因此可以改善系统的动态性能。但是微分对噪声有放大作用,会减弱系统的抗干扰性。

转化为数学语言就是:

由上面的方框图,可以知道其传递函数(拉式域表达式)为:

控制理论和数学分析中,我们一般借助拉普拉斯变化和傅里叶变换来帮助我们分析系统的某些特性,比如暂态响应、稳态响应等。但是在程序中,我们只能根据时域中的离散化的表达式来编写算法。

所以将上式转化为时域表达式为:

我们需要在计算机中通过编程实现这个式子,而上式又是连续时间的表达式,所以只能先将其离散化,推导出他的差分方程如下:

.....................................(1)

这就是增量式pid算法的差分方程。

其中 T 为PID的计算周期,就是 dt  。其值由微控制器的定时器决定,自己设置pid的运算周期。

e(k) 为本次计算时,传感器反馈的值和设定值之间的差。

e(k-1) 为上次计算时,传感器反馈的值和设定值之间的差。

e(k-2) 为上上次计算时,传感器反馈的值和设定值之间的差。

有了pid算法的差分方程,就可以通过编程来实现这个算法。之所以得通过差分方程来实现,是因为差分方程的一般解法是迭代法,而迭代法只需要知道初值和通项公式就能计算出所有时刻的的值。这是计算机最擅长的事情了。

这个式子就是最本质的离散化PID表达式。后面我将基于他推导出其他几个常见的表达式,但是实质都是这个式子。

在推导其他的表达式之前,请注意这几个变量的 关系:

比例系数&#x

你可能感兴趣的:(不用浮点实现pid)