一个初始化函数  一个是返回增量的函数,写了个例子是设置目标值为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语言实现相关推荐

  1. 三菱FX3U PLC 位置式PID算法(ST语言)

    三菱PLC自带的PID不必多说,大家可以自行查看指令说明.关于FX3U 增量式PID可以参看专栏的另一篇博客 三菱PLC增量式PID算法FB(带死区设置和外部复位控制)_RXXW_Dor的博客-CSD ...

  2. c语言写pid算法,用c语言实现的pid算法

    pid算法应该算是所以算法中最稳定最可靠最简单的算法,在库函数中添加这种算法对实际控制的时延有非常大的帮助. 全部资料51hei下载地址:   C语言PID算法.doc PID算法(c语言)(来自老外 ...

  3. C语言实现PID算法:位置式PID和增量式PID

    原创者微信公众号 PID算法可以说是在自动控制原理中比较经典的一套算法,在现实生活中应用的比较广泛. 大学参加过电子竞赛的朋友都应该玩过电机(或者说循迹小车),我们要控制电机按照设定的速度运转,PID ...

  4. C语言实现pid算法(附完整源码)

    实现pid算法 pid结构体定义 C语言实现pid算法完整源码(定义,实现,main函数测试) pid结构体定义 struct pid {// Controller gainsfloat kP;flo ...

  5. c语言程序位置式pid算法,位置式PID算法的C语言代码

    描述 位置式PID的C语言写法详解 PID调节口诀: 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积 ...

  6. 小型温控系统c语言程序,pid算法温度控制c语言程序 - 全文

    温度控制PID自整定原理介绍 整定PID(三模式)控制器 整定温度控制器涉及设置比例.积分和微分值,以得到对特定过 程的可能的最佳控制.如果控制器不包含自动整定算法,或者自 动整定算法未提供适合特定应 ...

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

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

  8. PID算法入门与C语言代码实现

    PID算法的入门理解以及C代码实现 在结束了自控原理的学习后,了解到PID算法是一种万能算法,在课设中也是经常使用到的一种算法,所以想具体的来进行以下总结与学习,如果有错漏的地方,欢迎大家共同来探讨与 ...

  9. matlab控制算法C语言,PID算法Matlab仿真程序和C程序

    <PID算法Matlab仿真程序和C程序>由会员分享,可在线阅读,更多相关<PID算法Matlab仿真程序和C程序(6页珍藏版)>请在人人文库网上搜索. 1.增量式PID控制算 ...

  10. 温度闭环控制C语言,计算机基于PID算法的模拟温度闭环控制系统.docx

    PAGE PAGE # 目录 目录 摘耍 温度闭环控制系统仿真 摘要 控制系统主要由控制器和控制对象两部分组成,通过一定的控制方法使系统 达到所要求的控制性能.控制模式有开环控制.闭环控制和复合控制三 ...

最新文章

  1. 如何不用重启在CentOS 7/ RHEL 7虚拟机中添加一块新硬盘
  2. nb信号和4g信号_手机信号很强但是4G网络却很卡?学会这三招,立马恢复网速
  3. 2017年Spring发布了30个新的Android库,值得您关注
  4. linux 不可中断的进程,不可中断进程和僵尸进程
  5. pythonwindows程序开发课程_Windows深入编程全集视频课程(七日成蝶)
  6. Linux RPM、YUM、APT包管理工具
  7. java中class文件如何加载的_jvm如何加载class文件
  8. s3c2440定时器简介
  9. 开发者如何在一周从入门级到专家级别的修炼
  10. 浪潮服务器自带备份软件,备份软件DPS
  11. Js分割字符串 - split
  12. 最全Java后端技术栈
  13. numpy中相关系数
  14. SPF算法计算过程--例
  15. 证书链——区块链电子证书系统
  16. mysql创建用户临时表_mysql创建与删除临时表实例
  17. Apple store安装旧版本的软件
  18. 用 Python 写了一个表白神器,照片隐藏表白话语!
  19. “在朋友圈晒了五年加班,才知道老板早就把我屏蔽了”
  20. 深入理解java多态没有烤山药的存在,java就不香了吗?

热门文章

  1. python爱好者社区 周琦_这么多年来,我算想明白了!
  2. 机器学习:使用梯度下降实现逻辑回归求解多元分类问题的原理
  3. echarts--(2)--创建一个饼图
  4. Express框架学习笔记-模板引擎
  5. python热力相关系数图_【Python可视化6】Seaborn之heatmap热力图
  6. 求和函数计算机语言,在 Excel 中,计算求和的函数是 ____。
  7. Linux与git库建立连接,Linux 下建立 Git 与 GitHub 的连接
  8. php excel parser pro v4.2,PHP Excel Parser Pro v4.2怎么用
  9. html调用js文件函数_函数式编程中的战斗机(三)--elm调用javascript的flags方式
  10. 天涯明月刀开发_天涯明月刀手游公测上线,斗鱼暗地操作,打造第二个PDD