1.微分先行PID控制算法框图

2.微分先行PID控制算法公式

3.微分先行PID控制公式用C语言实现

微分先行的PID算法实现,包括位置型和增量型两种实现方式。

(1)位置型

void PIDRegulation(PID *vPID, float processValue){float thisError;float c1,c2,c3,temp;thisError=vPID->setpoint-processValue;vPID->integral+=thisError;temp= vPID-> gama * vPID-> derivativegain + vPID-> proportiongain;c3= vPID-> derivativegain/temp;c2=( vPID-> derivativegain+ vPID-> proportiongain)/temp;c1= vPID-> gama*c3;vPID->derivative=c1* vPID-> derivative+c2* processValue+c3* vPID-> lastPv;vPID->result=vPID->proportiongain*thisError+vPID->integralgain*vPID->integral+vPID-> derivative;vPID->lasterror=thisError;vPID-> lastPv= processValue;}/*定义结构体和公用体*/typedef struct{float setpoint;           //设定值float proportiongain;     //比例系数float integralgain;       //积分系数float derivativegain;     //微分系数float lasterror;          //前一拍偏差float result;             //输出值float integral;           //积分值float derivative;         //微分项float lastPv;             //前一拍的测量值float gama;               //微分先行滤波系数}PID;

(2)增量型

void PIDRegulation(PID *vPID, float processValue){float thisError;float increment;float pError,iError;float c1,c2,c3,temp;float deltaPv;temp= vPID-> gama * vPID-> derivativegain + vPID-> proportiongain;c3= vPID-> derivativegain/temp;c2=( vPID-> derivativegain+ vPID-> proportiongain)/temp;c1= vPID-> gama*c3;deltaPv= processValue- vPID-> lastDeltaPvvPID-> deltadiff =c1* vPID-> deltadiff +c2* deltaPv +c3* vPID-> lastDeltaPv;thisError=vPID->setpoint-processValue; //得到偏差值pError=thisError-vPID->lasterror;iError=thisError;increment=vPID->proportiongain*pError+vPID->integralgain*iError+ vPID-> deltadiff;   //增量计算vPID->preerror=vPID->lasterror;  //存放偏差用于下次运算vPID->lastDeltaPv=deltaPv;vPID->lastPv= processValue;vPID->lasterror=thisError;vPID->result+=increment;}/*定义结构体和公用体*/
typedef struct{float setpoint;                //设定值float proportiongain;         //比例系数float integralgain;           //积分系数float derivativegain;         //微分系数float lasterror;              //前一拍偏差float preerror;               //前两拍偏差float deadband;               //死区float result;                 //输出值float deltadiff;              /*微分增量*/float integralValue;          /*积分累计量*/float gama;                   /*微分先行滤波系数*/float lastPv;                 /*上一拍的过程测量值*/float lastDeltaPv;            /*上一拍的过程测量值增量*/}PID;

微分先行PID控制是只对输出量进行微分,而对给定指令不起微分作用,因此它适合于给定指令频繁升降和高频干扰的场合,可以避免指令的改变导致超调过大。

(参考http://www.cnblogs.com/foxclever/p/9159677.html)

微分先行PID控制算法用C语言实现!相关推荐

  1. 微分先行PID控制算法

    微分先行PID控制算法 微分先行PID控制算法: 注:本文内容摘自<先进PID控制MATLAB仿真(第4版)>刘金琨 编著,研读此书受益匪浅,感谢作者! 微分先行PID控制算法: 微分先行 ...

  2. PID控制器开发笔记之七:微分先行PID控制器的实现

    前面已经实现了各种的PID算法,然而在某些给定值频繁且大幅变化的场合,微分项常常会引起系统的振荡.为了适应这种给定值频繁变化的场合,人们设计了微分先行算法. 1.微分先行算法的思想 微分先行PID控制 ...

  3. 用matlab微分先行设计,基于MATLAB的微分先行PID控制的设计与仿真

    第 34卷 第 1期 2014 年 1月 高 师 理 科 学 刊 Journal of Science of Teachers College and University Vo1.34 No.1 J ...

  4. 微分先行PID控制器的实现

    理论部分参考:https://blog.csdn.net/foxclever/article/details/80633275 这里附上写的matlab程序: clear all; close all ...

  5. 经典PID控制算法用C语言实现!

    1.经典PID控制算法框图 2.经典PID控制算法公式 3. 经典PID控制公式用C语言实现 float pidUpdate(PidObject* pid, const float error) {f ...

  6. PID控制算法实践应用(二):位置式PID控制算法的C语言实现

    目录 前言 一.实现步骤 1.定义PID变量结构体 2.初始化变量 3.编写控制算法

  7. PID控制算法的C语言实现六 抗积分饱和的PID控制算法C语言实现

    所谓的积分饱和现象是指如果系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而加大,从而导致执行机构达到极限位置,若控制器输出U(k)继续增大,执行器开度不可能再增大,此时计算机输出控制 ...

  8. 四轴PID控制算法详解(单环PID、串级PID)

    正文开始:这篇文章分为三个部分: PID原理普及 常用四轴的两种PID算法讲解(单环PID.串级PID) 如何做到垂直起飞.四轴飞行时为何会飘.如何做到脱控? PID原理普及 1.  对自动控制系统的 ...

  9. Pid控制算法-专家PID与模糊PID的C++实现

    PID控制算法的C语言实现 八 专家PID与模糊PID的C语言实现    本节是PID控制算法的C++语言实现系列的最后一节,前面7节中,已经分别从PID的实现到深入的过程进行了一个简要的讲解,从前面 ...

最新文章

  1. [译] RabbitMQ tutorials (3) ---- 'Pub/Sub' (Javascript)
  2. qtdesigner怎么实现菜单栏跳转_人人都可写代码-Android零基础编程-app 入口菜单栏实操08...
  3. 数字测图原理与方法的实习日志_【技术】消费级无人机倾斜摄影测量1:500测图方法及精度研究...
  4. 二叉树的几种递归和非递归式遍历:
  5. vb6实现union数据结构_数据结构与算法——并查集(不相交集合)
  6. 如何用视频云技术,搞一个爆红的 “反应视频” 项目?
  7. 使用ST05研究customer product id存储逻辑
  8. burp 代理的时候无法访问https网站
  9. stata基本操作(二)
  10. 电路布线问题的动态规划实现(java)
  11. win10传真服务器位置,win10系统电脑发传真的操作方法
  12. CIE1931标准色度系统
  13. STM32单片机-汇编指令2
  14. 将桌面的计算机图标改为,不小心把电脑桌面的图标都改为了windows meedia center怎么处理...
  15. 四句话改变你的人生:一念之转
  16. 电子元器件的分类有哪些?
  17. 每日java笔试五小题-2020-9-19
  18. Leetcode 500题AC的刷题总结(C与C++)
  19. 从零开始制作基于Unity引擎的宝石消消乐(三)
  20. kindle推送,养成看书的习惯

热门文章

  1. 【Android 应用开发】Android - TabHost 选项卡功能用法详解
  2. Directx教程(27) 简单的光照模型(6)
  3. 利用npm安装/删除/发布/更新/撤销发布包
  4. HEAP: Free Heap block XXXX modified at XXXX after it was freed
  5. CentOS启动不显示图形界面直接进入命令行模式
  6. Hadoop_23_MapReduce倒排索引实现
  7. property classmethod staticmethod的用法
  8. 总结——LR学习总结
  9. Android NDK开发之旅34 NDK 手把手带你入门直播技术
  10. [LeetCode] Permutations II 全排列之二