数字式 PID 控制算法可以分为位置式 PID 和增量式 PID 控制算法。
【PID】控制理论前导说明

1、位置式PID算法

由于计算机控制是一种采样控制, 它只能根据采样时刻的偏差计算控制量,而不能像模拟控制那样连续输出控制量, 进行连续控制,必须进行离散化处理。

离散的 PID 表达式为

2、增量式PID算法

所谓增量式 PID 是指数字控制器的输出只是控制量的增量∆uk 。 当执行机构需要的控制量是增量,而不是位置量的绝对数值时,可以使用增量式 PID 控制算法进行控制。

增量式 PID 控制算法公式为:

如果计算机控制系统采用恒定的采样周期T ,一旦确定 A、 B、 C,只要使用前后三次测量的偏差值,就可以由(式 2-5)求出控制量。增量式 PID 控制算法与位置式 PID 算法(式 2-2)相比,计算量小的多,因此在实际中得到广泛的应用。

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

U(k)=U(k-1)+∆Uk
控制器参数整定: 指决定调节器的比例系数 Kp 、 积分时间Ti 、 微分时间Td 和采样周期Ts
//数据结构
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;
//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 控制设计
unsigned int LocPIDCalc(int NextPoint)
{
register int iError,dError;
iError = sptr->SetPoint - NextPoint; //偏差
sptr->SumError += iError; //积分
dError = iError - sptr->LastError; //微分
sptr->LastError = iError;
return(sptr->Proportion * iError //比例项
+ sptr->Integral * sptr->SumError //积分项
+ sptr->Derivative * dError); //微分项
}

【PID】模拟式PID控制算法,P作用I作用D作用分析

【PID】数字式 PID 控制算法、程序结构相关推荐

  1. 西门子SMART200 PLC, 烘箱流水线4路加热PID控制温度的案例程序

    西门子SMART200 PLC, 烘箱流水线4路加热PID控制温度的案例程序,程序结构清晰明了,USS通讯控制V20变频器,含PLC程序,SMAT700IE触摸屏程序,电气图纸全套,电气BOM. 实际 ...

  2. arduino 版 PID 算法模板(程序可直接套模板实用)

    在介绍程序之前,简单介绍一些PID.所谓PID指比例.积分.微分控制的总成.PID控制是一种闭环控制,又是用得最广的控制.一方面,PID控制是一种模糊控制,不需要知道系统的状态空间表达式,仅仅需要调整 ...

  3. 《MATLAB 神经网络43个案例分析》:第6章 PID神经元网络解耦控制算法——多变量系统控制

    <MATLAB 神经网络43个案例分析>:第6章 PID神经元网络解耦控制算法--多变量系统控制 1. 前言 2. MATLAB 仿真示例一 3. MATLAB 仿真示例二 4. MATL ...

  4. 西门子S1200PID恒温恒压供冷却水程序. 阀PID控制水温,与两台西门子V20变频器PID控制水压.包括程序和Eplan图纸

    西门子S1200PID恒温恒压供冷却水程序. 阀PID控制水温,与两台西门子V20变频器PID控制水压.包括程序和Eplan图纸. 包含 PLC程序,触摸屏程序,图纸 编号:5812666049045 ...

  5. c语言pID程序怎么设计,51单片机PID的算法实现程序C语言

    #include typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long int uint32; ...

  6. pid温度控制c语言程序及仿真,温度控制PID算法的C语言程序实例代码

    //PID算法温控C语言 #include #include #include #include struct PID { unsigned int SetPoint; // 设定目标 Desired ...

  7. 啥是PID?PID可以吃吗?

    关注.星标公众号,直达精彩内容 作者:virtualwiz,来源:DF创客社区 微信公众号:芯片之家(ID:chiphome-dy) 啥是PID? PID,就是"比例(proportiona ...

  8. PID介绍 PID调参 串级PID

    鉴于串级PID在pixhawk系统中的重要性,无论是误差的补偿,如姿态解算:还是控制的实现,如姿态控制,位置控制,靠的都是串级的pid,这里我们先对串级pid做一个介绍,后面会再接着分析,姿态的控制以 ...

  9. 再论PID,PID其实很简单。。。

    0.PID前言 PID已经有105年的历史了. 它并不是什么很神圣的东西,大家一定都见过PID的实际应用 类似于这种:需要将某一个物理量"保持稳定"的场合(比如维持平衡,稳定温度. ...

最新文章

  1. setsockopt()使用方法(參数具体说明)
  2. jenkins更改默认端口
  3. 数据分析系列剧第四集:行业研究报告与生产计划
  4. 第二节:思维导图学习Shell脚本编程之命令之美
  5. 没有值的json字符串_Java中具有原始数据类型值的字符串连接
  6. “70后”清华教授,任大学校长
  7. 【POJ3415】 Common Substrings (SA+单调栈)
  8. Kaggle/Titanic python分析和建模
  9. Linux下七牛云存储qrsync命令行上传同步工具
  10. 运维定位服务故障时,前5分钟都在忙啥?
  11. java后台生成APP和H5所需要支付宝订单
  12. Linux红帽认证最全介绍
  13. vs2005安装使用指南
  14. 仿IBM首页焦点图,缩略图大图,带文字
  15. 【复合五点高斯-勒让德公式】
  16. 千呼万唤始出来-YYC松鼠聚合系统搭建教程,理论上可对接一切API
  17. MapReduce 切片源码中SPLIT_SLOP等于1.1的原因分析(TextInputFormat)
  18. svg 地图_一秒带你制作出全国各省市区县地图
  19. 解决:ClassCastException: org.springframework.util.LinkedCaseInsensi
  20. 多张照片怎么做成动图

热门文章

  1. Python 视频转换为图片 与 图片转换为视频
  2. Web安全之SQL注入漏洞学习(一)
  3. JavaScript有关this指向问题,如何修改this指向
  4. InputStream类详解
  5. IE浏览器下载文本文件(txt,csv等)
  6. 解析HTTPS加密原理
  7. Shrinkage Loss
  8. word插入Java代码
  9. 遭遇Trojan.DL.Win32.Autorun.yuz,Trojan.Win32.Inject.gh,Trojan.Win32.Agent.zsq等
  10. boundschecher