求助,位置式pid与增量式pid算法问题和增量式PID问题

豆丁微信公众号
君,已阅读到文档的结尾了呢~~
实验六 基于simulink的位置式和增量式pid仿真
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
实验六 基于simulink的位置式和增量式pid仿真
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口&>&PID算法实现代码,包括增量式和位置式PID代码
PID算法实现代码,包括增量式和位置式PID代码
上传大小:137KB
PID算法实现代码,包括位置式增量式数字PID实现代码。对大家编写PID程序有帮助哦。
综合评分:4
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有24条
很基础,还是迷糊当中,我再仔细看看。
很不错,代码很好,matlab代码就更好啦
很有用 很全
综合评分:
积分/C币:3
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
PID算法实现代码,包括增量式和位置式PID代码
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*投诉人姓名:
*投诉人联系方式:
*版权证明:
*详细原因:
PID算法实现代码,包括增量式和位置式PID代码位置式和增量式PID控制区别(转)
位置式和增量式PID控制
15:47:44 阅读198
评论1 字号:大中小
PID控制是一个二阶线性控制器
定义:通过调整比例、积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能。
&&&&&&&&&&&
a. 技术成熟
b. 易被人们熟悉和掌握
c. 不需要建立数学模型
d. 控制效果好
通常依据控制器输出与执行机构的对应关系,将基本数字PID算法分为位置式PID和增量式PID两种。
基本PID控制器的理想算式为
&&&&&&&&&&&&&&
u(t)——控制器(也称调节器)的输出;
e(t)——控制器的输入(常常是设定值与被控量之差,即e(t)=r(t)-c(t));
Kp——控制器的比例放大系数;
Ti ——控制器的积分时间;
Td——控制器的微分时间。
设u(k)为第k次采样时刻控制器的输出值,可得离散的PID算式
&&&&&&&&&&&&&&&&&&&&&&&&&
& 由于计算机的输出u(k)直接控制执行机构(如阀门),u(k)的值与执行机构的位置(如阀门开
度)一一对应,所以通常称式(2)为位置式PID控制算法。
位置式PID控制算法的缺点:当前采样时刻的输出与过去的各个状态有关,计算时要对e(k)进
行累加,运算量大;而且控制器的输出u(k)对应的是执行机构的实际位置,如果计算机出现故
障,u(k)的大幅度变化会引起执行机构位置的大幅度变化。
增量式PID是指数字控制器的输出只是控制量的增量Δu(k)。采用增量式算法时,计算机输出的控制量Δu(k)对应的是本次执行机构位置的增量,而不是对应执行机构的实际位置,因此要求执行机构必须具有对控制量增量的累积功能,才能完成对被控对象的控制操作。执行机构的累积功能可以采用硬件的方法实现;也可以采用软件来实现,如利用算式
u(k)=u(k-1)+Δu(k)程序化来完成。
由式(2)可得增量式PID控制算式
式中 Δe(k)=e(k)-e(k-1)
进一步可以改写成
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&
一般计算机控制系统的采样周期T在选定后就不再改变,所以,一旦确定了Kp、Ti、Td,只要使用前后3次测量的偏差值即可由式(3)或式(4)求出控制增量。
增量式算法优点:①算式中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果;②计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小、不会严重影响生产过程;③手动—自动切换时冲击小。当控制从手动向自动切换时,可以作到无扰动切换。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。本文以通俗的理解,以小车纵向控制举例说明PID的一些理解。
(一)首先,为什么要做PID?
由于外界原因,小车的实际速度有时不稳定,这是其一,
要让小车以最快的时间达达到既定的目标速度,这是其二。
速度控制系统是闭环,才能满足整个系统的稳定要求,必竟速度是系统参数之一,这是其三.
&&&&小车调速肯定不是线性的,外界因素那么多,没人能证明是线性的。如果是线性的,直接用P就可以了。
比如在PWM=60%时,速度是2M/S,那么你要它3M/S,就把PWM提高到90%。因为90/60=3/2,这样一来太完美了。
完美是不可能的。
&&&&那么不是线性的,要怎么怎么控制PWM使速度达到即定的速度呢?即要快,又要准,又要狠。(即快准狠
)系统这个速度的调整过程就必须通过某个算法调整,一般PID就是这个所用的算法。
&&&&可能你会想到,如果通过编码器测得现在的速度是2.0m/s,要达到2.3m/s的速度,那么我把pwm增大一点不
就行了吗?是的,增大pwm多少呢?必须要通过算法,因为PWM和速度是个什么关系,对于整个系统来说,谁也
不知道。要一点一点的试,加个1%,不够,再加1%还是不够,那么第三次你还会加1%吗?很有可能就加2%了。
通过PID三个参数得到一个表达式:△PWM=a&*△V1+b&*△V2+c&*△V3,a&b&c是通过PID的那个长长的公式展开
,然后约简后的数字,△V1&,△V2&,△V3&此前第一次调整后的速度差&,第二次调整后的速度差,第三次。。
。。。一句话,PID要使当前速度达到目标速度最快,需要建立如何调整pwm和速度之间的关系。
输入输出是什么:
输入就是前次速度,前前次速度,前前前次速度。
输出就是你的PWM应该增加或减小多少。
(二)为了避免教科书公式化的说明,本文用口语化和通俗的语言描述。虽然不一定恰当,但意思差不多,就是那个事。如果要彻头彻尾地弄PID,建议多调试,写几个仿真程序。
&&&&&PID一般有两种:位置式PID和增量式PID。在小车里一般用增量式,为什么呢?位置式PID的输出与过去的所有状态有关,计算时要对e(每一次的控制误差)进行累加,这个计算量非常大,而明没有必要。而且小车的PID控制器的输出并不是绝对数值,而是一个△,代表增多少,减多少。换句话说,通过增量PID算法,每次输出是PWM要增加多少或者减小多少,而不是PWM的实际值。
下面均以增量式PID说明。
&&这里再说一下P、I、D三个参数的作用。P=Proportion,比例的意思,I是Integral,积分,D是Differential微分。
打个比方,如果现在的输出是1,目标输出是100,那么P的作用是以最快的速度达到100,把P理解为一个系数即可;而I呢?大家学过高数的,0的积分才能是一个常数,I就是使误差为0而起调和作用;D呢?大家都知道微分是求导数,导数代表切线是吧,切线的方向就是最快到至高点的方向。这样理解,最快获得最优解,那么微分就是加快调节过程的作用了。
公式本来需要推导的,我就不来这一套了。直接贴出来:
看看最后的结果:
△Uk=A*e(k)+B*e(k-1)+C*e(k-2)
这里KP是P的值,TD是D的值,1/Ti是I的值,都是常数,哦,还有一个T,T是采样周期,也是已知。而A&B&C是由P&I&D换算来的,按这个公式,就可以简化计算量了,因为P&I&D是常数,那么A&B&C可以用一个宏表示。这样看来,只需要求e(k)&e(k-1)&e(k-2)就可以知道△Uk的值了,按照△Uk来调节PWM的大小就OK了。PID三个参数的确定有很多方法,不在本文讨论范围内。采样周期也是有据可依的,不能太大,也不能太小。
&&&................................................
&&&写着写着成了老太婆的裹脚了,本来说拿个程序来说明一下,看来只能在下一文中了。
一、转自网友的解释,呵呵:
制模型:你控制一个人让他以PID控制的方式走110步后停下。
(1)P比例控制,就是让他走110步,他按照一定的步伐走到一百零几步(如108步)或100多步(如112步)就停了。
P比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state&error)。
(2)PI积分控制,就是他按照一定的步伐走到112步然后回头接着走,走到108步位置时,然后又回头向110步位置走。在110步位置处来回晃几次,最后停在110步的位置。
在积分I控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System&with&Steady-state&Error)。为了消除稳态误差,在控制器中必须引入&积分项&。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。
(3)PD微分控制,就是他按照一定的步伐走到一百零几步后,再慢慢地向110步的位置靠近,如果最后能精确停在110步的位置,就是无静差控制;如果停在110步附近(如109步或111步位置),就是有静差控制。
在微分控制D中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。
自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳,其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差作用的变化&超前&,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入&比例P&项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是&微分项&,它能预测误差变化的趋势。这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例P+微分D(PD)控制器能改善系统在调节过程中的动态特性。
  小明接到这样一个任务:有一个水缸有点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。&小明接到任务后就一直守在水缸旁边,时间长就觉得无聊,就跑到房里看小说了,每30分钟来检查一次水面高度。水漏得太快,每次小明来检查时,水都快漏完了,离要求的高度相差很远,小明改为每3分钟来检查一次,结果每次来水都没怎么漏,不需要加水,来得太频繁做的是无用功。几次试验后,确定每10分钟来检查一次。这个检查时间就称为采样周期。
  开始小明用瓢加水,水龙头离水缸有十几米的距离,经常要跑好几趟才加够水,于是小明又改为用桶加,一加就是一桶,跑的次数少了,加水的速度也快了,但好几次将缸给加溢出了,不小心弄湿了几次鞋,小明又动脑筋,我不用瓢也不用桶,老子用盆,几次下来,发现刚刚好,不用跑太多次,也不会让水溢出。这个加水工具的大小就称为比例系数。
  小明又发现水虽然不会加过量溢出了,有时会高过要求位置比较多,还是有打湿鞋的危险。他又想了个办法,在水缸上装一个漏斗,每次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解决了,但加水的速度又慢了,有时还赶不上漏水的速度。于是他试着变换不同大小口径的漏斗来控制加水的速度,最后终于找到了满意的漏斗。漏斗的时间就称为积分时间。
  小明终于喘了一口,但任务的要求突然严了,水位控制的及时性要求大大提高,一旦水位过低,必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。小明又为难了!于是他又开努脑筋,终于让它想到一个办法,常放一盆备用水在旁边,一发现水位低了,不经过漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高多了。他又在要求水面位置上面一点将水缸要求的水平面处凿一孔,再接一根管子到下面的备用桶里这样多出的水会从上面的孔里漏出来。这个水漏出的快慢就称为微分时间。&看到几个问采样周期的帖子,临时想了这么个故事。微分的比喻一点牵强,不过能帮助理解就行了,呵呵,入门级的,如能帮助新手理解下PID,于愿足矣。故事中小明的试验是一步步独立做,但实际加水工具、漏斗口径、溢水孔的大小同时都会影响加水的速度,水位超调量的大小,做了后面的实验后,往往还要修改改前面
(三)PID实际编程的过程的,要注意的东西还是有几点的。PID这东西可以做得很深。
1&PID的诊定。凑试法,临界比例法,经验法。
2&T的确定,采样周期应远小于过程的扰动信号的周期,在小车程序中一般是ms级别。
3&目标速度何时赋值问题,如何更新新的目标速度?这个问题一般的人都乎略了。目标速度肯定不是个恒定的,那么何时改变目标速度呢?
4&改变了目标速度,那么e(k)&e(k-1)&e(k-2)怎么改变呢?是赋0还是要怎么变?
5&是不是PID要一直开着?
6&error为多少时就可以当速度已达到目标?
7&PID的优先级怎么处理,如果和图像采集有冲突怎么办?
8&PID的输入是速度,输出是PWM,按理说PWM产生速度,但二者不是同一个东西,有没有问题?
9&PID计算如何优化其速度?指针,汇编,移位?都可以试!
//*****************************************************
//定义PID结构体
//*****************************************************
typedef&struct&PID
&&&&int&SetP&//设定目标Desired&Value
&&&&double&P&//比例常数Proportional&Const
&&&&double&I&//积分常数Integral&Const
&&&&double&D&//微分常数Derivative&Const
&&&&int&LastE&//Error[-1]
&&&&int&PrevE&//Error[-2]
//*****************************************************
//定义相关宏
//*****************************************************
#define&P_DATA&100
#define&I_DATA&0.6
#define&D_DATA&1
#define&HAVE_NEW_VELOCITY&0X01
//*****************************************************
//声明PID实体
//*****************************************************
static&PID&sPID;
static&PID&*sptr&=&&sPID;
//*****************************************************
//PID参数初始化
//*****************************************************
void&IncPIDInit(void)
sptr-&LastError&=&0;&//Error[-1]
sptr-&PrevError&=&0;&//Error[-2]
sptr-&Proportion&=P_DATA;&//比例常数Proportional&Const
sptr-&Integral&=I_DATA;&//积分常数Integral&Const
sptr-&Derivative&=D_DATA;&//微分常数Derivative&Const
sptr-&SetPoint&=100;&&目标是100
//*****************************************************
//增量式PID控制设计&
//*****************************************************
int&IncPIDCalc(int&NextPoint)
&&&int&iError,&iI&//当前误差&
&&&iError&=&sptr-&SetPoint&-&NextP&//增量计算&
&&&iIncpid&=&sptr-&Proportion&*&iError&//E[k]项&
&&&&&&&&&&&&&-&sptr-&Integral&*&sptr-&LastError&//E[k-1]项&
&&&&&&&&&&&&&+&sptr-&Derivative&*&sptr-&PrevE&//E[k-2]项&
&&&&sptr-&PrevError&=&sptr-&LastE&&&//存储误差,用于下次计算&
&&&&sptr-&LastError&=&iE
&&&&return(iIncpid);&&&&&&&&&&&&&&&&&&&&&&&&&//返回增量值&
Int&g_CurrentV
void&main(void)
&&&DisableInterrupt
InitMCu();
&&&IncPIDInit();
g_CurrentVelocity=0;&&//全局变量也初始化
g_Flag=0;&&&&&&&&&&&&&&&//全局变量也初始化
&&&&While(1)
&&if&(g_Flag&&HAVE_NEW_VELOCITY)
&&&&&&&&&PWMOUT+=&IncPIDCalc(CurrentVelocity);
&&&&&&&&&&&g_Flag&=~&HAVE_NEW_VELOCITY;
//****************************************
//采样周期T
//****************************************
Interrrupt&TIME&void
&&CurrentVelocity&=GetCurrentV
&&g_Flag|=&HAVE_NEW_VELOCITY;
& 2010 - 2018 苏州灵动帧格网络科技有限公司 版权所有.
ICP经营许可证 苏B2-&lihua198199
文章数:435
年度积分:794
历史总积分:3809
注册时间:
位置式PID调试时(比如气动阀自动调节温度)比例带大小P一般设置多少?积分带大小I一般设置多少?微分带大小D一般设置多少?
增量式PID一般用于哪种反馈?此帖发自手机工控论坛
文章数:29
年度积分:248
历史总积分:248
注册时间:
这哪有定量的,都是靠着经验,依据实际一点点调出来的,或者用PID自整定
文章数:3657
年度积分:1336
历史总积分:15382
注册时间:
2017春节活动(三)
2016论坛贡献奖
2016国庆活动(三)
2015论坛贡献奖
2015春节活动
2014论坛贡献奖
2013辞旧迎新
2013论坛贡献奖
2010年度论坛贡献奖
2010年四月影像
09工控人生征文
08年最佳博客奖
& &在离散PID控制中才有位置算法和增量算法等的提法,其与常规的PID控制相比,就是多了个采样周期及保持环节,现实是大多通过D/A转换,化为模拟量去进行控制。因此,其PID的参数整定方法与常规PID参数整定基本相似,用得多的还是经验法,对温度控制通常是:比例带20--60%,积分3--10分,微分0.5--3分。先用纯比例试调,然后再加积分,最后才加微分。
& &楼主问:“增量式PID一般用于哪种反馈?”。只要是闭环控制,就一定是负反馈。位置式和增量式两者的用途是一样的,但具体应用时略有差别,即:
& &位置式控制算法在实际生产的应用并不多;有时可用于可控硅加热的控制系统。
& &增量式控制算法中执行机构得到的是控制量的增量,且执行机构对应的是位置的增量。它大多用于执行机构为步进电机或电动调节阀的控制系统。
[此贴子已经被作者于 21:37:46编辑过]
工控学堂推荐视频:}

我要回帖

更多关于 增量式pid和位置式pid 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信