对于一般的PID控制系统来说,当设定值发生较大的突变时,很容易产生超调而使系统不稳定。为了解决这种阶跃变化造成的不利影响,人们发明了步进式PID控制算法。

1、步进式PID的基本思想

  所谓步进式PID算法,实际就是在设定值发生阶跃变化时,不直接对阶跃信号进行响应,而是在一定的时间内逐步改变设定值,直至使设定值达到目标值。这种逐步改变设定值的办法使得对象运行平稳。适用于高精度伺服系统的位置跟踪。

  佷显然,这一方法并未改变PID控制器本身,而是对设定值做了前期处理。所以其结构框图与控制方程与其他的PID控制算法是一致的。

  为了对设定值做必要处理,以使其不知快速变化,有多种方法。比较常用的是建立线性变化函数的办法。我们可以规定设定值从0-100%的变化时间为T,则可以确定设定值变化的斜率绝对值,或者说是步长。知道补偿后,我们就可以根据不常来不断修改设定值,直到目标值。可用公式描述为:

  其中SPt为设定值目标值,SPs为设定值的起始值,sl为步长,k为步长的变化系数:

  而控制器本身的位置型和增量型表达式都保持不变。

2、算法实现

  步进式PID的实质是将设定值的突变修改为平缓的变化,这一处理方式在控制中有大量应用。处理设定值变化过程的流程如下所示:

  根据这一流程我们可变写处理函数如下:

 /*步进式PID控制设定值步进处理函数*/
float StepInProcessing(CLASSICPID vPID,float sp)
{
float stepIn=(vPID->maximum-vPID->minimum))*0.1;
float kFactor=0.0; if(fabs(vPID->setpoint-sp)<=stepIn)
{
vPID->setpoint=sp;
}
else
{
if(vPID->setpoint-sp>)
{
kFactor=-1.0;
}
else if(vPID->setpoint-sp<)
{
kFactor=1.0;
}
else
{
kFactor=0.0;
}
vPID->setpoint=vPID->setpoint+k*stepIn;
} return vPID->setpoint; }

  有了这一处理函数后,在调用PID控制器前,先对设定值进行判断,然后将该函数的结果作为设定值给PID控制器。至于PID控制器才用前面讲述的哪种形式,根据具体应用需求和使用方便去年而定。

3、总结

  所谓步进式实质是对设定值进行平缓变化处理,防止因为设定值的跳变而引起系统的波动。这一办法虽然能够减少阶跃跳变的干扰,但也会让系统的响应速度变慢,当然这要根据需要来处理,因为步长的选择决定了作用大小,补偿越小约平缓,相应的响应速度也越慢。

欢迎关注:

PID控制器开发笔记之十:步进式PID控制器的实现的更多相关文章

  1. PID控制器开发笔记之十一:专家PID控制器的实现

    前面我们讨论了经典的数字PID控制算法及其常见的改进与补偿算法,基本已经覆盖了无模型和简单模型PID控制经典算法的大部.再接下来的我们将讨论智能PID控制,智能PID控制不同于常规意义下的智能控制,是 ...

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

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

  3. PID控制器开发笔记之十二:模糊PID控制器的实现

    在现实控制中,被控系统并非是线性时不变的,往往需要动态调整PID的参数,而模糊控制正好能够满足这一需求,所以在接下来的这一节我们将讨论模糊PID控制器的相关问题.模糊PID控制器是将模糊算法与PID控 ...

  4. PID控制器开发笔记之五:变积分PID控制器的实现

    在普通的PID控制算法中,由于积分系数Ki是常数,所以在整个控制过程中,积分增量是不变的.然而,系统对于积分项的要求是,系统偏差大时,积分作用应该减弱甚至是全无,而在偏差小时,则应该加强.积分系数取大 ...

  5. PID控制器开发笔记之四:梯形积分PID控制器的实现

    从微积分的基本原理看,积分的实现是在无限细分的情况下进行的矩形加和计算.但是在离散状态下,时间间隔已经足够大,矩形积分在某些时候显得精度要低了一些,于是梯形积分被提出来以提升积分精度. 1.梯形积分基 ...

  6. PID控制器开发笔记(转)

    源: PID控制器开发笔记

  7. Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件

    前言   上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤.   受限制   因为直接配置sample的vi比较麻烦 ...

  8. PID控制器开发笔记之十三:单神经元PID控制器的实现

    神经网络是模拟人脑思维方式的数学模型.神经网络是智能控制的一个重要分支,人们针对控制过程提供了各种实现方式,在本节我们主要讨论一下采用单神经元实现PID控制器的方式. 1.单神经元的基本原理 单神经元 ...

  9. PID控制器开发笔记之二:积分分离PID控制器的实现

    前面的文章中,我们已经讲述了PID控制器的实现,包括位置型PID控制器和增量型PID控制器.但这个实现只是最基本的实现,并没有考虑任何的干扰情况.在本节及后续的一些章节,我们就来讨论一下经典PID控制 ...

随机推荐

  1. luogu 4377 Talent show 01分数规划+背包dp

    01分数规划+背包dp 将分式下面的部分向右边挪过去,通过二分答案验证, 注意二分答案中如果验证的mid是int那么l=mid+1,r=mid-1,double类型中r=mid,l=mid; 背包dp ...

  2. asp.net写入读取xml的方法

    添加命名空间 using System.Xml; 我自己的代码(添加其中的节点) XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(Server.M ...

  3. sql库连sql中间库连orcle库增删改查方案

    ---中间库建立存储过程create procedure Proc_exec@SQL nvarchar(MAX)ASexec(@SQL) GO---web服务器执行语句 --查 select * fr ...

  4. UE4源码笔记

    找编辑器LOG,找相应代码.(改相应LOG 重编译后有反应)GenerateProjectFiles  寻找配置,生成VS文件.  有一些小工具项目默认是没打开的.API宏是较旧的代码,新的代码会设计 ...

  5. 【mmall】IDEA中Service层无法识别Mapper,但是代码通过问题

    解决方案

  6. shell编程 之 传递参数到脚本里

    1 传递参数的基本格式 在脚本的需要参数的地方写$1,$2,$3...$n,运行的时候带参数运行就相当于是专递参数进shell脚本里了,比如: ./t1.sh 1 2 #!/bin/bash echo ...

  7. pythonのgevent同步异步区别

    #!/usr/bin/env python from urllib import request import gevent from gevent import monkey import time ...

  8. python正则下载图片

    import urllib.request import re # 打开图片路径 def open_url(url): #设置请求路径 req = urllib.request.Request(url ...

  9. MySQL触发器trigger的使用

    https://www.cnblogs.com/geaozhang/p/6819648.html 触发器的触发 语句的错误 和 触发器里面 错误 都不会运行 NEW与OLD详解 MySQL 中定义了 ...

  10. ASP.NET MVC 4 从示例代码展开,连接默认SQL Server数据库

    VS2013里面,点击菜单[视图]-[SQL server对象资源管理器],右键点击[SQL Server]节点,选择[添加SQL Server]自动生成. 这只是开始,可以让网上下载下来的例子运行出 ...