【PID】数字式 PID 控制算法、程序结构
数字式 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 控制算法、程序结构相关推荐
- 西门子SMART200 PLC, 烘箱流水线4路加热PID控制温度的案例程序
西门子SMART200 PLC, 烘箱流水线4路加热PID控制温度的案例程序,程序结构清晰明了,USS通讯控制V20变频器,含PLC程序,SMAT700IE触摸屏程序,电气图纸全套,电气BOM. 实际 ...
- arduino 版 PID 算法模板(程序可直接套模板实用)
在介绍程序之前,简单介绍一些PID.所谓PID指比例.积分.微分控制的总成.PID控制是一种闭环控制,又是用得最广的控制.一方面,PID控制是一种模糊控制,不需要知道系统的状态空间表达式,仅仅需要调整 ...
- 《MATLAB 神经网络43个案例分析》:第6章 PID神经元网络解耦控制算法——多变量系统控制
<MATLAB 神经网络43个案例分析>:第6章 PID神经元网络解耦控制算法--多变量系统控制 1. 前言 2. MATLAB 仿真示例一 3. MATLAB 仿真示例二 4. MATL ...
- 西门子S1200PID恒温恒压供冷却水程序. 阀PID控制水温,与两台西门子V20变频器PID控制水压.包括程序和Eplan图纸
西门子S1200PID恒温恒压供冷却水程序. 阀PID控制水温,与两台西门子V20变频器PID控制水压.包括程序和Eplan图纸. 包含 PLC程序,触摸屏程序,图纸 编号:5812666049045 ...
- c语言pID程序怎么设计,51单片机PID的算法实现程序C语言
#include typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long int uint32; ...
- pid温度控制c语言程序及仿真,温度控制PID算法的C语言程序实例代码
//PID算法温控C语言 #include #include #include #include struct PID { unsigned int SetPoint; // 设定目标 Desired ...
- 啥是PID?PID可以吃吗?
关注.星标公众号,直达精彩内容 作者:virtualwiz,来源:DF创客社区 微信公众号:芯片之家(ID:chiphome-dy) 啥是PID? PID,就是"比例(proportiona ...
- PID介绍 PID调参 串级PID
鉴于串级PID在pixhawk系统中的重要性,无论是误差的补偿,如姿态解算:还是控制的实现,如姿态控制,位置控制,靠的都是串级的pid,这里我们先对串级pid做一个介绍,后面会再接着分析,姿态的控制以 ...
- 再论PID,PID其实很简单。。。
0.PID前言 PID已经有105年的历史了. 它并不是什么很神圣的东西,大家一定都见过PID的实际应用 类似于这种:需要将某一个物理量"保持稳定"的场合(比如维持平衡,稳定温度. ...
最新文章
- setsockopt()使用方法(參数具体说明)
- jenkins更改默认端口
- 数据分析系列剧第四集:行业研究报告与生产计划
- 第二节:思维导图学习Shell脚本编程之命令之美
- 没有值的json字符串_Java中具有原始数据类型值的字符串连接
- “70后”清华教授,任大学校长
- 【POJ3415】 Common Substrings (SA+单调栈)
- Kaggle/Titanic python分析和建模
- Linux下七牛云存储qrsync命令行上传同步工具
- 运维定位服务故障时,前5分钟都在忙啥?
- java后台生成APP和H5所需要支付宝订单
- Linux红帽认证最全介绍
- vs2005安装使用指南
- 仿IBM首页焦点图,缩略图大图,带文字
- 【复合五点高斯-勒让德公式】
- 千呼万唤始出来-YYC松鼠聚合系统搭建教程,理论上可对接一切API
- MapReduce 切片源码中SPLIT_SLOP等于1.1的原因分析(TextInputFormat)
- svg 地图_一秒带你制作出全国各省市区县地图
- 解决:ClassCastException: org.springframework.util.LinkedCaseInsensi
- 多张照片怎么做成动图
热门文章
- Python 视频转换为图片 与 图片转换为视频
- Web安全之SQL注入漏洞学习(一)
- JavaScript有关this指向问题,如何修改this指向
- InputStream类详解
- IE浏览器下载文本文件(txt,csv等)
- 解析HTTPS加密原理
- Shrinkage Loss
- word插入Java代码
- 遭遇Trojan.DL.Win32.Autorun.yuz,Trojan.Win32.Inject.gh,Trojan.Win32.Agent.zsq等
- boundschecher