一、PID框图:


n0(t)是要稳定的值
n(t)是当前输出值
e(t) = n0(t) - n(t)

一、模拟PID控制原理

这个公式网络上很好找:

 

二、数字PID控制
由于模拟的微积分运算对应计算机来说是不太好写代码的,所以要利用采样将数据离散化

于是公式就可以转换为:


 

其中T为采样时间,由于T之类的参数是常量,所以将Kp乘入公式中可以转换成另一种写法
这个公式叫位置式算法

由于要不断的累加ej,增加了计算量,所以这个公式又可以转换为增量式算法:

然后u(k) = u(k-1) + u

三、参数的整定
先将Ti设置为无穷大,Td设置为0,调节Kp
然后再调节Ti,最后是Td

四、实现代码

typedef struct PID
{
    int  SetPoint;     //设定目标 Desired Value
    long SumError;                //误差累计

double  Proportion;         //比例常数 Proportional Cons
    double  Integral;           //积分常数 Integral Const
    double  Derivative;         //微分常数 Derivative Const
int LastError;               //Error[-1]
    int PrevError;               //Error[-2]
} PID;

/*******************************************************************************
* 函数名称 : IncPIDCalc
* 函数描述 : 增量式 PID 控制计算
* 函数输入 : int 当前位置
* 函数输出 : 无
* 函数返回 : 增量式PID结果
*******************************************************************************/
int IncPIDCalc(int NextPoint)
{
    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);
}

/*******************************************************************************
* 函数名称 : LocPIDCalc
* 函数描述 : 位置式 PID 控制计算
* 函数输入 : int 当前位置
* 函数输出 : 无
* 函数返回 : 位置式PID结果
*******************************************************************************/
int LocPIDCalc(int NextPoint)
{
    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公式的推导过程及实现代码相关推荐

  1. matlab三角函数降次,三角函数降次公式及推导过程

    三角函数中的降次幂公式可降低三角函数指数幂.多项式各项的先后按照某一个字母的指数逐渐减少的顺序排列,叫做这一字母的降次.接下来分享三角函数降次公式及推导过程. 三角函数降次公式 sin²α=(1-co ...

  2. 圆锥曲线万能弦长公式_圆锥曲线的弦长公式及其推导过程

    <圆锥曲线的弦长公式及其推导过程>由会员分享,可在线阅读,更多相关<圆锥曲线的弦长公式及其推导过程(5页珍藏版)>请在人人文库网上搜索. 1.圆锥曲线的弦长公式及其推导过程关于 ...

  3. H264编码- 码率控制 RQ 模型参数推导过程以及JM代码分析

    摘要:本文主要介绍H264码率控制过程中,RQ模型参数更新推导过程,并结合JM19.0代码分析其功能实现. H264码率控制中比较重要的一个模型是RQ模型,不管是图像级码率控制还是基本单元码率控制都会 ...

  4. 三个数差的平方公式推导过程_平方差公式证明推导过程及运用详解(数学简便计算方法之一)...

    ​平方差公式是小学奥数计算中的常用公式. 通常写为:a²-b²=(a+b)x(a-b) 它的几何方法推导过程是这样的: 如下图所示,四边形ABCD和四边形DEFG为正方形,边长分别为a和b,求阴影部分 ...

  5. 几何分布的期望和方差公式推导_平方差公式证明推导过程及运用详解(数学简便计算方法之一)...

    ​平方差公式是小学奥数计算中的常用公式. 通常写为:a²-b²=(a+b)x(a-b) 它的几何方法推导过程是这样的: 如下图所示,四边形ABCD和四边形DEFG为正方形,边长分别为a和b,求阴影部分 ...

  6. 卡尔曼滤波原理公式详细推导过程[包括引出]

    卡尔曼滤波在很多项目中都有用到,但是对于原理却很少有详细分析,而只是直接应用,在看完b站up主DR_CAN视频推导后自行推导一遍和查看其他资料后进行总结,将从最初的递归算法,利用数据融合,协方差矩阵, ...

  7. 逻辑回归的梯度下降公式详细推导过程

    逻辑回归的梯度下降公式 逻辑回归的代价函数公式如下: J(θ)=−1m[∑i=1my(i)log⁡hθ(x(i))+(1−y(i))log⁡(1−hθ(x(i)))]J(\theta)=-\frac{ ...

  8. 空间任一点到超平面的距离公式的推导过程

    在感知机模型中,输入空间中任意一点 到超平面S的距离: 其推导过程如下:

  9. GAN损失函数公式详细推导(含完整代码)

    来源:投稿 作者:孙裕道 编辑:学姐 GAN原理介绍 GAN是由生成器G和判别器D组成,通过大量样本数据训练使得生成器的生成能力和判别器的判别能力在对抗中逐步提高,最终目的是让生成器G输入到生成器中生 ...

  10. 椭圆切线方程公式的推导过程

最新文章

  1. 当前标识(NT AUTHORITY\NETWORK SERVICE)没有对“的写访问权限。
  2. 【转】gdb调试多进程程序
  3. 从websphere6.1迁移到weblogic10.3的问题总结--转
  4. 开源监控解决方案OpenFalcon系列(一)
  5. 解决: Windows下启动Redis失败
  6. CSDN 联合 18 家大厂招聘直播,10 小时突破百万热度!
  7. seo该如何防止网站被挂***?!
  8. JVM常用新生代垃圾收集器
  9. 【路径规划】基于matlab模拟退火优化遗传算法求解避障路径规划问题【含Matlab源码 889期】
  10. 利用Web of Science创建引文跟踪、检索词跟踪
  11. 《穿越计算机的迷雾》读书笔记
  12. 详细解读TPH-YOLOv5 | 让目标检测任务中的小目标无处遁形
  13. ARM和MIPS架构
  14. 《众妙之门——网页排版设计制胜秘诀》——导读
  15. android 打包报错 Execution failed for task ‘:app:lintVitalRelease‘.
  16. php加速模块cpan模块,查看perl模块和cpan模块介绍
  17. vue上传大文件/视频前后端(java)代码
  18. 20220729 证券、金融
  19. 而洗洁精膜会有效地保持玻璃2小时内不结霜
  20. 华硕主板+ubuntu18.04+3090驱动安装踩坑记录

热门文章

  1. 虚拟服务器软件,VMware ESXi(服务器虚拟化软件) V7.0 官方版
  2. L1-015 跟奥巴马一起画方块 (15分) 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,
  3. 模块化编程(C语言)
  4. MATLAB绘制折线图和散点图
  5. 如何用谷歌地图下载器下载大字体谷歌地图打印喷绘
  6. PJzhang:左耳朵耗子-陈皓
  7. 红外接收电路自己制作,我用过的
  8. linux(ubuntu)下安装postgresql+pgAdmin4
  9. 2022新版千月影视双端APP带H5功能开源程序支持当面付和易支付
  10. 使用hightopo完成基本图元旋转和闪烁