本帖最后由 MDebug 于 2015-8-21 10:04 编辑
Debug连载帖第七帖——PID算法(1)
这一篇帖子我将用C语言和Matlab同步实现PID算法。
一:PID算法原理
Pid在工业领域是什么地位呢?是当之无愧的老大。就是在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,PID控制算法比较简单,能体现反馈思想的控制算法。
先看看PID算法的一般形式:
PID的流程的中心思想就是:通过误差信号控制被控量,而控制器本身就是比例、积分、微分三个环节的加和。这里我们规定(在t时刻): 1.输入量为rin(t); 2.输出量为rout(t); 3.偏差量为err(t)=rin(t)-rout(t);
所以我们得到pid的控制规律为
我们以直流电动机作为我们的控制模型,说明以下几个问题: 1.输入量rin(t)为电机转速预定值; 2.输出量rout(t)为电机转速实际值; 3.传感器为光电码盘,假设码盘为10线; 4.采用PWM调速 转速用单位 r/min 表示;
二:关键问题的论述: 我们知道,我们驱动电机的时候是靠电压驱动的,那么,u(t)和PWM之间到底是一种什么样的关系?
为此,我们有这样一个解决方案,每个电压对应一个转速,电压和转速之间呈现线性关系。在正式进行调速设计之前,需要现有开环系统,测试电机和转速之间的特性曲线(或者查阅电机的资料说明),然后再进行闭环参数整定。
论述本质: PID控制其实是对偏差的控制过程;如果偏差为0,则比例环节不起作用,只有存在偏差时,比例环节才起作用。积分环节主要是用来消除静差,所谓静差,就是系统稳定后输出值和设定值之间的差值,积分环节实际上就是偏差累计的过程,把累计的误差加到原有系统上以抵消系统造成的静差。而微分信号则反应了偏差信号的变化规律,或者说是变化趋势,根据偏差信号的变化趋势来进行超前调节,从而增加了系统的快速性。
好了,关于PID的基本说明就补充到这里,下面将对PID连续系统离散化,从而方便在处理器上实现。 我们废话少说,直接给出公式:
这就是离散化PID的增量式表示方式,由公式可以看出,增量式的表达结果和最近三次的偏差有关,这样就大大提高了系统的稳定性。需要注意的是最终的输出结果应该为
u(K)+增量调节值;
PID的离散化过程基本思路就是这样,下面是将离散化的公式转换成为C语言,从而实现微控制器的控制作用。 |