增量式PID控制算法
来源:互联网 发布:java swing的gui 编辑:程序博客网 时间:2024/05/22 03:18
当执行机构需要的不是控制量的绝对值,而是控制量的增量(例如去驱动步进电动机)时,需要用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控制算法
- 增量式PID控制算法
- PID算法之增量式控制温度
- 增量式PID算法
- 增量式PID控制算法的MATLAB仿真及思考
- Pid控制算法-增量型pid算法的C++实现
- 位置式和增量式PID控制
- 位置式和增量式PID控制
- 位置式和增量式PID控制
- 位置式和增量式PID控制 .
- 位置式和增量式PID控制
- 位置式和增量式PID控制
- 增量式PID控制C语言代码
- 增量式PID的整型算法
- 增量型PID算法
- PID控制及位置式与增量式区别
- PID控制及位置式与增量式区别
- 增量式PID控制函数源代码(C语言)
- 斐波那契数列求解python3
- python学习
- 这是用来保存模版的
- Halcon实战记录之一《划分图像区域为中心,四边,四角》
- jpeg2000调研
- 增量式PID控制算法
- 整数划分
- JZOJ__Day 9:【普及模拟】算法学习(sfxx)
- 嵌入式每日学习心得2017.07.14
- React-Native 命令备忘
- JZOJ 100047. 【NOIP2017提高A组模拟7.14】基因变异
- Java多线程____Executors线程池的使用和架构原理
- Pinhole camera model相机模型
- 【GDOI2018模拟7.14】小奇的糖果 树状数组+扫描线