增量式PID控制算法

量式PID控制算法

2009-07-18 10:33

(转载 出处blog.ednchina.com/tengjingshu )blog.ednchina.com/tengjingshu/211739/message.aspx#

当执行机构需要的不是控制量的绝对值,而是控制量的增量(例如去驱动步进电动机)时,需要用PID的“增量算法”。

增量式PID控制算法可以通过(2-4)式推导出。由(2-4)可以得到控制器的第k-1个采样时刻的输出值为:

(2-5)

将(2-4)与(2-5)相减并整理,就可以得到增量式PID控制算法公式为:

(2-6)

其中

由(2-6)可以看出,如果计算机控制系统采用恒定的采样周期T,一旦确定A、B、C,只要使用前后三次测量的偏差值,就可以由(2-6)求出控制量。

增量式PID控制算法与位置式PID算法(2-4)相比,计算量小得多,因此在实际中得到广泛的应用。

位置式PID控制算法也可以通过增量式控制算法推出递推计算公式:

(2-7)

(2-7)就是目前在计算机控制中广泛应用的数字递推PID控制算法。

增量式PID控制算法C51程序

/*==================================================================================================== 
PID Function 
The PID (比例、积分、微分) function is used in mainly 
control applications. PIDCalc performs one iteration of the PID 
algorithm. 
While the PID function works, main is just a dummy program showing 
a typical usage. 
=====================================================================================================*/

typedef struct PID

{

int SetPoint; //设定目标 Desired Value

long SumError; //误差累计

double Proportion; //比例常数 Proportional Const

double Integral; //积分常数 Integral Const

double Derivative; //微分常数 Derivative Const

int LastError; //Error[-1]

int PrevError; //Error[-2]

} PID;

static PID sPID;

static PID *sptr = &sPID;

/*==================================================================================================== 
Initialize PID Structure PID参数初始化
=====================================================================================================*/

void IncPIDInit(void)

{

sptr->SumError = 0;

sptr->LastError = 0; //Error[-1]

sptr->PrevError = 0; //Error[-2]

sptr->Proportion = 0; //比例常数 Proportional Const

sptr->Integral = 0; //积分常数Integral Const

sptr->Derivative = 0; //微分常数 Derivative Const

sptr->SetPoint = 0;

}

/*==================================================================================================== 
增量式PID计算部分 
=====================================================================================================*/

int IncPIDCalc(int NextPoint)

{

register int iError, iIncpid; //当前误差

iError = sptr->SetPoint - NextPoint; //增量计算

iIncpid = sptr->Proportion * iError //E[k]项

- sptr->Integral * sptr->LastError //E[k-1]项

+ sptr->Derivative * sptr->PrevError; //E[k-2]项

//存储误差,用于下次计算

sptr->PrevError = sptr->LastError;

sptr->LastError = iError;

//返回增量值

return(iIncpid);

}

数字PID控制算法的更多相关文章

  1. PID控制算法的C语言实现十一  模糊算法简介

    在PID控制算法的C语言实现九中,文章已经对模糊PID的实质做了一个简要说明.本来打算等到完成毕业设计,工作稳定了再着力完成剩下的部分.鉴于网友的要求和信任,抽出时间来,对模糊PID做一个较为详细的论 ...

  2. PID控制算法的C语言实现

    参考: PID控制器开发笔 浅谈位置式PID 专家PID控制在快速系统中的仿真及应用(这篇了论文介绍的积分分离PID.专家PID(脚本实现和simulink实现)很详细) PID控制算法的C语言实现一 ...

  3. PID控制算法的简单分析和仿真!

    PID算法简单剖析如下: 1.首先我们来看一下PID系统的基本组成模块: 如图所示,图中相关参数的表示如下: r(t):系统实际上需要的输出值,这是一个标准值,在我们设定了之后让这个系统去逼近的一个值 ...

  4. [转]PID控制算法原理

    PID控制算法是工业界使用极其广泛的一个负反馈算法,相信这个算法在做系统软件时也有用武之处,这里摘录了知乎上的一篇文章,后面学习更多后自己总结一篇 以下为原文: PID控制应该算是应用非常广泛的控制算 ...

  5. PID控制算法

    PID控制算法 四轴如何起飞的原理 四轴飞行器的螺旋桨与空气发生相对运动,产生了向上的升力,当升力大于四轴的重力时四轴就可以起飞了. 四轴飞行器飞行过程中如何保持水平: 我们先假设一种理想状况:四个电 ...

  6. PID控制算法的C语言实现十 专家PID与模糊PID的C语言实现

    本节是PID控制算法的C语言实现系列的最后一节,前面8节中,已经分别从PID的实现到深入的过程进行了一个简要的讲解,从前面的讲解中不难看出,PID的控制思想非常简单,其主要问题点和难点在于比例.积分. ...

  7. PID控制算法的C语言实现九

    (1)微分先行PID控制算法 微分先行PID控制的特点是只对输出量yout(k)进行微分,而对给定值rin(k)不进行微分.这样,在改变给定值时,输出不会改变,而被控量的变化通常是比较缓和的.这种输出 ...

  8. PID控制算法的C语言实现八 变积分的PID控制算法C语言实现

    变积分PID可以看成是积分分离的PID算法的更一般的形式.在普通的PID控制算法中,由于积分系数ki是常数,所以在整个控制过程中,积分增量是不变的.但是,系统对于积分项的要求是,系统偏差大时,积分作用 ...

  9. PID控制算法的C语言实现一 PID算法原理

    本系列是转载............. 全部的程序有一个共同点:就是我没认真去调pid的参数 在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握PID算法的设 ...

随机推荐

  1. asp.net ajax 调用错误解决

    ajax调用aspx页面出现如下错误 前台源代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  2. 【学习笔记】【C语言】自增自减

    1. 简单使用 ++  自增运算符.如a++,++a,都等价于a = a+1 --自减运算符.如a--,--a,都等价于a = a-1 5++是错误的,因为5是常量 2. ++a和a++的区别 int ...

  3. linux中的文件属性

    l 是链接d 是目录c 是字符设备文件b 是块设备- 是文件

  4. OpenSUSE 安装并启动Tomcat

    安装.用YsST2搜索tomcat安装就好了.不过版本肯定不如官网的新,笔者用的是7.0.42,最新的已经到8.X了. 启动.在服务管理器中找到tomcat,启动.

  5. 简单的jQuery获取URL的?后带的参数

    var con_name = getQueryString("con_name"); //接收con_name        function getQueryString(val ...

  6. iTerm2 颜色配置

    1. 首先找到配色文件: iterm2官网配色方案iTerm2-Color-Schemes altercation的  solarized配色方案solarized 2. 配置步骤: clone上面的 ...

  7. AngularJS(14)-动画

    AngularJS 提供了动画效果,可以配合 CSS 使用. AngularJS 使用动画需要引入 angular-animate.min.js 库. <!DOCTYPE html> &l ...

  8. 安装node和grunt

    由于我用的恶事win8的系统,所以在安装nodeJS的时候出现了2503和2502的错误.解决方案: 进入cmd,然后输入msiexec /package [路径:为你将要安装的node所在的位置] ...

  9. (三)开始在OJ上添加签到功能

    在了解完OJ文件下的各个文件夹的主要作用后,我们开始往里面添加东西(其实只要知道各文件夹是干什么的后,添加东西也变得非常简单了) 一 在数据库中添加对应功能的字段. 我们这个学期才刚开数据库这门课,所 ...

  10. centos安装mysql(rpm)

    今天安装mysql时候出现错误MySQL conflicts with mysql-4.1.20-2 查看是否安装过mysql rpm -qa mysql 发现安装了老版本的mysql 使用rpm - ...