PID算法C语言实现
一个初始化函数 一个是返回增量的函数,写了个例子是设置目标值为45. 调整了PID参数,十次以内就调整到了目标值,很快稳定在45.
//增量式PID
typedef struct{int SetPoint; //目标值long SumError; //误差累计float P; //比例常数float I; //积分常数float D; //微分常数int LastError; //上次偏差值int PrevError; //上上次偏差值
}PID;/**************************************************函数名称:void PID_Arg_Init(PID* sptr) *功 能:参数初始化 *参 数:PID* sptr *返 回 值:void *************************************************/
void PID_Arg_Init(PID* sptr)
{sptr->SumError = 0; //误差累计 sptr->LastError = 0; //上次偏差值sptr->PrevError = 0; //上上次偏差值sptr->P = 0; //比例常数sptr->I = 0; //积分常数sptr->D = 0; //微分常数sptr->SetPoint = 0; //目标值
}
/**************************************************函数名称:int PID_Contrl(PID* sptr,int NextPoint) *功 能:PID控制 *参 数:PID* sptr:上次参数 int NextPoint:当前实际值 *返 回 值:void *************************************************/
int PID_Contrl(PID* sptr,int NextPoint)
{register int iError,iIncPid;iError = sptr->SetPoint - NextPoint; //当前误差 设定的目标值和实际值的偏差iIncPid = sptr->P * iError //增量计算- sptr->I * sptr->LastError+ sptr->D * sptr->PrevError;/*存储误差 用于下次计算*/sptr->PrevError = sptr->LastError;sptr->LastError = iError;return iIncPid; //返回增量值
}int main()
{int temp = 0;int add = 0;PID PID_Temp;PID_Arg_Init(&PID_Temp);for(int i = 0;i < 10;i++){add = PID_Contrl(&PID_Temp,temp);temp += add;printf("add:%d\n",add);printf("temp:%d\n",temp);printf("PID.tmp:%d\n",PID_Temp.SetPoint);printf("PID.error:%d\n\n",PID_Temp.LastError);}return 0;
}
打印结果
add:27 //下次增量
temp:27 //当前值
PID.tmp:45 //目标值
PID.error:45 //上次差值add:4
temp:31
PID.tmp:45
PID.error:18add:10
temp:41
PID.tmp:45
PID.error:14add:2
temp:43
PID.tmp:45
PID.error:4add:2
temp:45
PID.tmp:45
PID.error:2add:0
temp:45
PID.tmp:45
PID.error:0add:0
temp:45
PID.tmp:45
PID.error:0add:0
temp:45
PID.tmp:45
PID.error:0add:0
temp:45
PID.tmp:45
PID.error:0add:0
temp:45
PID.tmp:45
PID.error:0
PID算法C语言实现相关推荐
- 三菱FX3U PLC 位置式PID算法(ST语言)
三菱PLC自带的PID不必多说,大家可以自行查看指令说明.关于FX3U 增量式PID可以参看专栏的另一篇博客 三菱PLC增量式PID算法FB(带死区设置和外部复位控制)_RXXW_Dor的博客-CSD ...
- c语言写pid算法,用c语言实现的pid算法
pid算法应该算是所以算法中最稳定最可靠最简单的算法,在库函数中添加这种算法对实际控制的时延有非常大的帮助. 全部资料51hei下载地址: C语言PID算法.doc PID算法(c语言)(来自老外 ...
- C语言实现PID算法:位置式PID和增量式PID
原创者微信公众号 PID算法可以说是在自动控制原理中比较经典的一套算法,在现实生活中应用的比较广泛. 大学参加过电子竞赛的朋友都应该玩过电机(或者说循迹小车),我们要控制电机按照设定的速度运转,PID ...
- C语言实现pid算法(附完整源码)
实现pid算法 pid结构体定义 C语言实现pid算法完整源码(定义,实现,main函数测试) pid结构体定义 struct pid {// Controller gainsfloat kP;flo ...
- c语言程序位置式pid算法,位置式PID算法的C语言代码
描述 位置式PID的C语言写法详解 PID调节口诀: 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积 ...
- 小型温控系统c语言程序,pid算法温度控制c语言程序 - 全文
温度控制PID自整定原理介绍 整定PID(三模式)控制器 整定温度控制器涉及设置比例.积分和微分值,以得到对特定过 程的可能的最佳控制.如果控制器不包含自动整定算法,或者自 动整定算法未提供适合特定应 ...
- pid温度控制c语言程序及仿真,温度控制PID算法的C语言程序实例代码
//PID算法温控C语言 #include #include #include #include struct PID { unsigned int SetPoint; // 设定目标 Desired ...
- PID算法入门与C语言代码实现
PID算法的入门理解以及C代码实现 在结束了自控原理的学习后,了解到PID算法是一种万能算法,在课设中也是经常使用到的一种算法,所以想具体的来进行以下总结与学习,如果有错漏的地方,欢迎大家共同来探讨与 ...
- matlab控制算法C语言,PID算法Matlab仿真程序和C程序
<PID算法Matlab仿真程序和C程序>由会员分享,可在线阅读,更多相关<PID算法Matlab仿真程序和C程序(6页珍藏版)>请在人人文库网上搜索. 1.增量式PID控制算 ...
- 温度闭环控制C语言,计算机基于PID算法的模拟温度闭环控制系统.docx
PAGE PAGE # 目录 目录 摘耍 温度闭环控制系统仿真 摘要 控制系统主要由控制器和控制对象两部分组成,通过一定的控制方法使系统 达到所要求的控制性能.控制模式有开环控制.闭环控制和复合控制三 ...
最新文章
- 如何不用重启在CentOS 7/ RHEL 7虚拟机中添加一块新硬盘
- nb信号和4g信号_手机信号很强但是4G网络却很卡?学会这三招,立马恢复网速
- 2017年Spring发布了30个新的Android库,值得您关注
- linux 不可中断的进程,不可中断进程和僵尸进程
- pythonwindows程序开发课程_Windows深入编程全集视频课程(七日成蝶)
- Linux RPM、YUM、APT包管理工具
- java中class文件如何加载的_jvm如何加载class文件
- s3c2440定时器简介
- 开发者如何在一周从入门级到专家级别的修炼
- 浪潮服务器自带备份软件,备份软件DPS
- Js分割字符串 - split
- 最全Java后端技术栈
- numpy中相关系数
- SPF算法计算过程--例
- 证书链——区块链电子证书系统
- mysql创建用户临时表_mysql创建与删除临时表实例
- Apple store安装旧版本的软件
- 用 Python 写了一个表白神器,照片隐藏表白话语!
- “在朋友圈晒了五年加班,才知道老板早就把我屏蔽了”
- 深入理解java多态没有烤山药的存在,java就不香了吗?
热门文章
- python爱好者社区 周琦_这么多年来,我算想明白了!
- 机器学习:使用梯度下降实现逻辑回归求解多元分类问题的原理
- echarts--(2)--创建一个饼图
- Express框架学习笔记-模板引擎
- python热力相关系数图_【Python可视化6】Seaborn之heatmap热力图
- 求和函数计算机语言,在 Excel 中,计算求和的函数是 ____。
- Linux与git库建立连接,Linux 下建立 Git 与 GitHub 的连接
- php excel parser pro v4.2,PHP Excel Parser Pro v4.2怎么用
- html调用js文件函数_函数式编程中的战斗机(三)--elm调用javascript的flags方式
- 天涯明月刀开发_天涯明月刀手游公测上线,斗鱼暗地操作,打造第二个PDD