PID控制器开发笔记之九:基于前馈补偿的PID控制器的实现
对于一般的时滞系统来说,设定值的变动会产生较大的滞后才能反映在被控变量上,从而产生合理的调节。而前馈控制系统是根据扰动或给定值的变化按补偿原理来工作的控制系统,其特点是当扰动产生后,被控变量还未变化以前,根据扰动作用的大小进行控制,以补偿扰动作用对被控变量的影响。前馈控制系统运用得当,可以使被控变量的扰动消灭在萌芽之中,使被控变量不会因扰动作用或给定值变化而产生偏差,它较之反馈控制能更加及时地进行控制,并且不受系统滞后的影响。
1、前馈控制基本思想
在高精度伺服控制中,前馈控制可用来提高系统的跟踪性能。经典控制理论中的前馈控制设计是基于复合控制思想的,当闭环系统为连续系统时,使前馈环节与闭环系统的传递函数之积为1,从而实现输出完全复现输入。其系统结构图如下:

从上图中,我们可以发现前馈环节的传递函数是被控对象的倒数。那么就是在使用前馈控制前我们需要对被控对象的模型有了解,才能有针对性的设计出合适的前馈控制器。也就说,每个系统的前馈控制器都是不一样的,每个前馈控制器都是专用的。
要实施前馈控制,首先我们必须得到被控系统的近似模型,这个模型越接近真实的系统,控制的效果就越明显。在这里我们假定一个被控对向的模型为:

那么前馈控制器是被控对象的倒数,于是我们可以推导出前馈控制器的输入输出表达式为:

我们将其离散化,就可以得到我们想要实现的前馈控制器的输出公式。前馈控制器的输入是设定值,所以表示如下:

2、算法实现
经过上面的分析我们可以实现一个前馈控制器,前馈控制器的输出与设定值当前值、前一拍的值以及前两拍的只有关。也就是说如果设定值长时间不变化,该前馈控制器是不起作用的。当然每一个前馈控制器都是不一样的。
由于A、B、T均为常数于是我们为了书写方便,令α=A/(B*T),β=1/(B*T*T)于是我们可以先实现前馈控制器。定义一个前馈控制器的结构体:
/*定义前馈控制器的结构体*/
typedef struct{
float rin;
float lastRin;
float perrRin;
}FFC
/*实现前馈控制器*/
float FeedforwardController(FFC vFFC)
{
float result;
result=α*(vFFC->rin-vFFC->lastRin)+β*(vFFC->rin-*vFFC->lastRin+vFFC->perrRin);
vFFC->perrRin= vFFC->lastRin;
vFFC->lastRin= vFFC->rin;
return result;
}
有了这个前馈控制器,只需要与PID控制器的输出合并在一起就好了U(k)=Up(k)+Uf(k),而PID控制器采用位置型还是增量型都没有关系。不过在调用这两个控制器时需:
vFFC->rin=vPID-> setpoint
3、总结
前馈控制器是一种补偿控制,或者说模型控制,其特点就是必须能得到被控对象的精确模型或者近似模型才能起到较好的控制效果。对于时滞系统的模型控制有很多方法,前馈控制是其中比较简单和应用较广的算法。
系统中存在频率高、幅度大、可测量而不可控的扰动时,可选用前馈控制。当控制系统控制通道滞后时间长、反馈控制又不能获得良好效果时,可选用前馈控制。
欢迎关注:

PID控制器开发笔记之九:基于前馈补偿的PID控制器的实现的更多相关文章
- PID控制器开发笔记(转)
源: PID控制器开发笔记
- PID控制器开发笔记之十三:单神经元PID控制器的实现
神经网络是模拟人脑思维方式的数学模型.神经网络是智能控制的一个重要分支,人们针对控制过程提供了各种实现方式,在本节我们主要讨论一下采用单神经元实现PID控制器的方式. 1.单神经元的基本原理 单神经元 ...
- PID控制器开发笔记之十一:专家PID控制器的实现
前面我们讨论了经典的数字PID控制算法及其常见的改进与补偿算法,基本已经覆盖了无模型和简单模型PID控制经典算法的大部.再接下来的我们将讨论智能PID控制,智能PID控制不同于常规意义下的智能控制,是 ...
- PID控制器开发笔记之七:微分先行PID控制器的实现
前面已经实现了各种的PID算法,然而在某些给定值频繁且大幅变化的场合,微分项常常会引起系统的振荡.为了适应这种给定值频繁变化的场合,人们设计了微分先行算法. 1.微分先行算法的思想 微分先行PID控制 ...
- PID控制器开发笔记之五:变积分PID控制器的实现
在普通的PID控制算法中,由于积分系数Ki是常数,所以在整个控制过程中,积分增量是不变的.然而,系统对于积分项的要求是,系统偏差大时,积分作用应该减弱甚至是全无,而在偏差小时,则应该加强.积分系数取大 ...
- PID控制器开发笔记之二:积分分离PID控制器的实现
前面的文章中,我们已经讲述了PID控制器的实现,包括位置型PID控制器和增量型PID控制器.但这个实现只是最基本的实现,并没有考虑任何的干扰情况.在本节及后续的一些章节,我们就来讨论一下经典PID控制 ...
- PID控制器开发笔记之六:不完全微分PID控制器的实现
从PID控制的基本原理我们知道,微分信号的引入可改善系统的动态特性,但也存在一个问题,那就是容易引进高频干扰,在偏差扰动突变时尤其显出微分项的不足.为了解决这个问题人们引入低通滤波方式来解决这一问题. ...
- PID控制器开发笔记之一:PID算法原理及基本实现
在自动控制中,PID及其衍生出来的算法是应用最广的算法之一.各个做自动控制的厂家基本都有会实现这一经典算法.我们在做项目的过程中,也时常会遇到类似的需求,所以就想实现这一算法以适用于更多的应用场景. ...
- FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放
前言 ffmpeg播放rtsp网络流和摄像头流. Demo 使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克 使用ffmpeg播放网络rtsp文件流 ...
随机推荐
- animate动画效果
$(selector).animate({params},speed,callback); 转载:https://www.runoob.com/jquery/jquery-animate.html j ...
- luogu P2520 [HAOI2011]向量
传送门 一堆人说数论只会gcd,我连gcd都不会,菜死算了qwq Orzyyb 这题欺负我数学不好qwq 首先可以发现实际上有如下操作:x或y±2a,x或y±2b,x+a y+b,x+b y+a(后面 ...
- 灾难性遗忘(catastrophic forgetting)
Overcoming catastrophic forgetting in neural networks(克服神经网络中的灾难性遗忘) 原文: https://www.pnas.org/conten ...
- python前后端加密方式
后端加密方法: python后端加密方式: # 双重工加密 #bytes((7788).encode('utf-8')):为后端加密二把手,多加的锁,该参数可为空,必须加bytes才能实现 md5pa ...
- Python文件读写之r+/w+/a+
读模式 r 打开不存在的文件会报错.不能写:如不指定模式则默认是r 写模式 w 打开不存在的文件会,会新建一个文件:打开存在的文件会先清空后覆盖原有文件:不能读 追加模式 a 打开不存在的文件会,会新 ...
- python学习-Day1-接口测试
学习内容:接口测试 学习方式: 通过工具测试http接口 工具:postman + jmeter 基础知识 一. 接口调用测试:接口请求报文拼接 1. 问号前是url,后面是参数名和参数值,多个参数用 ...
- js常见的几种继承方式
1.原型链继承 “父类”的实例作为子类的prototype SubType.prototype = new SuperType() 2.组合继承(原型链+构造函数) function SubType( ...
- 添加 node mocha 测试模块
1.mocha 支持TDD 和 BDD两种测试风格 2.引用assert模块 此模块是node的原生模块,实现断言的功能,作用是声明预期的结果必须满足 3.mocha测试用例中可以使用第三方测试库 ...
- 【Git】Git中的冲突(图形界面,待更新...)
1234567890 <<<<<<< HEAD abcdefghijk ======= b45678910 >>>>>>& ...
- #6284. 数列分块入门 8(区间询问等于一个数 cc 的元素,并将这个区间的所有元素改为 c)
题目链接:https://loj.ac/problem/6284 题目大意:中文题目 具体思路:还是和sqrt那个题的思路相同的,标记每一块的值是不是相同的,注意lazy下标的下放. AC代码: #i ...