微分先行PID控制算法用C语言实现!
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语言实现!相关推荐
- 微分先行PID控制算法
微分先行PID控制算法 微分先行PID控制算法: 注:本文内容摘自<先进PID控制MATLAB仿真(第4版)>刘金琨 编著,研读此书受益匪浅,感谢作者! 微分先行PID控制算法: 微分先行 ...
- PID控制器开发笔记之七:微分先行PID控制器的实现
前面已经实现了各种的PID算法,然而在某些给定值频繁且大幅变化的场合,微分项常常会引起系统的振荡.为了适应这种给定值频繁变化的场合,人们设计了微分先行算法. 1.微分先行算法的思想 微分先行PID控制 ...
- 用matlab微分先行设计,基于MATLAB的微分先行PID控制的设计与仿真
第 34卷 第 1期 2014 年 1月 高 师 理 科 学 刊 Journal of Science of Teachers College and University Vo1.34 No.1 J ...
- 微分先行PID控制器的实现
理论部分参考:https://blog.csdn.net/foxclever/article/details/80633275 这里附上写的matlab程序: clear all; close all ...
- 经典PID控制算法用C语言实现!
1.经典PID控制算法框图 2.经典PID控制算法公式 3. 经典PID控制公式用C语言实现 float pidUpdate(PidObject* pid, const float error) {f ...
- PID控制算法实践应用(二):位置式PID控制算法的C语言实现
目录 前言 一.实现步骤 1.定义PID变量结构体 2.初始化变量 3.编写控制算法
- PID控制算法的C语言实现六 抗积分饱和的PID控制算法C语言实现
所谓的积分饱和现象是指如果系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而加大,从而导致执行机构达到极限位置,若控制器输出U(k)继续增大,执行器开度不可能再增大,此时计算机输出控制 ...
- 四轴PID控制算法详解(单环PID、串级PID)
正文开始:这篇文章分为三个部分: PID原理普及 常用四轴的两种PID算法讲解(单环PID.串级PID) 如何做到垂直起飞.四轴飞行时为何会飘.如何做到脱控? PID原理普及 1. 对自动控制系统的 ...
- Pid控制算法-专家PID与模糊PID的C++实现
PID控制算法的C语言实现 八 专家PID与模糊PID的C语言实现 本节是PID控制算法的C++语言实现系列的最后一节,前面7节中,已经分别从PID的实现到深入的过程进行了一个简要的讲解,从前面 ...
最新文章
- [译] RabbitMQ tutorials (3) ---- 'Pub/Sub' (Javascript)
- qtdesigner怎么实现菜单栏跳转_人人都可写代码-Android零基础编程-app 入口菜单栏实操08...
- 数字测图原理与方法的实习日志_【技术】消费级无人机倾斜摄影测量1:500测图方法及精度研究...
- 二叉树的几种递归和非递归式遍历:
- vb6实现union数据结构_数据结构与算法——并查集(不相交集合)
- 如何用视频云技术,搞一个爆红的 “反应视频” 项目?
- 使用ST05研究customer product id存储逻辑
- burp 代理的时候无法访问https网站
- stata基本操作(二)
- 电路布线问题的动态规划实现(java)
- win10传真服务器位置,win10系统电脑发传真的操作方法
- CIE1931标准色度系统
- STM32单片机-汇编指令2
- 将桌面的计算机图标改为,不小心把电脑桌面的图标都改为了windows meedia center怎么处理...
- 四句话改变你的人生:一念之转
- 电子元器件的分类有哪些?
- 每日java笔试五小题-2020-9-19
- Leetcode 500题AC的刷题总结(C与C++)
- 从零开始制作基于Unity引擎的宝石消消乐(三)
- kindle推送,养成看书的习惯
热门文章
- 【Android 应用开发】Android - TabHost 选项卡功能用法详解
- Directx教程(27) 简单的光照模型(6)
- 利用npm安装/删除/发布/更新/撤销发布包
- HEAP: Free Heap block XXXX modified at XXXX after it was freed
- CentOS启动不显示图形界面直接进入命令行模式
- Hadoop_23_MapReduce倒排索引实现
- property classmethod staticmethod的用法
- 总结——LR学习总结
- Android NDK开发之旅34 NDK 手把手带你入门直播技术
- [LeetCode] Permutations II 全排列之二