




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、pid算法温控c语言 默认分类 2009-12-30 10:17:39 阅读110 评论0 字号:大中小 订阅 pid算法温控c语言1. pid调试步骤 没有一种控制算法比pid调节规律更有效、更方便的了。现在一些时髦点的调节器基本源自pid。甚至可以这样说:pid调节器是其它控制调节算法的妈。 为什么pid应用如此广泛、又长久不衰? 因为pid解决了自动控制理论所要解决的最基本问题,既系统的稳定性、快速性和准确性。调节pid的参数,可实现在系统稳定的前提下,兼顾系统的带载能力和抗扰能力,同时,在pid调节器中引入积分项,系统增加了一个零积点,使之成为一阶或一阶以上的系统,这样系统阶跃响应的稳
2、态误差就为零。 由于自动控制系统被控对象的千差万别,pid的参数也必须随之变化,以满足系统的性能要求。这就给使用者带来相当的麻烦,特别是对初学者。下面简单介绍一下调试pid参数的一般步骤: 1负反馈 自动控制理论也被称为负反馈控制理论。首先检查系统接线,确定系统的反馈为负反馈。例如电机调速系统,输入信号为正,要求电机正转时,反馈信号也为正(pid算法时,误差=输入-反馈),同时电机转速越高,反馈信号越大。其余系统同此方法。 2pid调试一般原则 a.在输出不振荡时,增大比例增益p。 b.在输出不振荡时,减小积分时间常数ti。 c.在输出不振荡时,增大微分时间常数td。 3一般步骤 a.确定比例
3、增益p 确定比例增益p 时,首先去掉pid的积分项和微分项,一般是令ti=0、td=0(具体见pid的参数设定说明),使pid为纯比例调节。输入设定为系统允许的最大值的60%70%,由0逐渐加大比例增益p,直至系统出现振荡;再反过来,从此时的比例增益p逐渐减小,直至系统振荡消失,记录此时的比例增益p,设定pid的比例增益p为当前值的60%70%。比例增益p调试完成。 b.确定积分时间常数ti 比例增益p确定后,设定一个较大的积分时间常数ti的初值,然后逐渐减小ti,直至系统出现振荡,之后在反过来,逐渐加大ti,直至系统振荡消失。记录此时的ti,设定pid的积分时间常数ti为当前值的150%18
4、0%。积分时间常数ti调试完成。 c.确定积分时间常数td 积分时间常数td一般不用设定,为0即可。若要设定,与确定 p和ti的方法相同,取不振荡时的30%。 d.系统空载、带载联调,再对pid参数进行微调,直至满足要求。 2.pid控制简介 目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。同时,控制理论的发展也经历了古典控制理论、现代控制理论和智能控制理论三个阶段。智能控制的典型实例是模糊全自动洗衣机等。自动控制系统可分为开环控制系统和闭环控制系统。一个控制系统包括控制器、传感器、变送器、执行机构、输入输出接口。控制器的输出经过输出接口、执行机构,加到被控系统上;控制系统的被控
5、量,经过传感器,变送器,通过输入接口送到控制器。不同的控制系统,其传感器、变送器、执行机构是不一样的。比如压力控制系统要采用压力传感器。电加热控制系统的传感器是温度传感器。目前,pid控制及其控制器或智能pid控制器(仪表)已经很多,产品已在工程实际中得到了广泛的应用,有各种各样的pid控制器产品,各大公司均开发了具有pid参数自整定功能的智能调节器(intelligent regulator),其中pid控制器参数的自动调整是通过智能化调整或自校正、自适应算法来实现。有利用pid控制实现的压力、温度、流量、液位控制器,能实现pid控制功能的可编程控制器(plc),还有可实现pid控制的pc系
6、统等等。 可编程控制器(plc) 是利用其闭环控制模块来实现pid控制,而可编程控制器(plc)可以直接与controlnet相连,如rockwell的plc-5等。还有可以实现pid控制功能的控制器,如rockwell 的logix产品系列,它可以直接与controlnet相连,利用网络来实现其远程控制功能。 1、开环控制系统 开环控制系统(open-loop control system)是指被控对象的输出(被控制量)对控制器(controller)的输出没有影响。在这种控制系统中,不依赖将被控量反送回来以形成任何闭环回路。 2、闭环控制系统 闭环控制系统(closed-loop cont
7、rol system)的特点是系统被控对象的输出(被控制量)会反送回来影响控制器的输出,形成一个或多个闭环。闭环控制系统有正反馈和负反馈,若反馈信号与系统给定值信号相反,则称为负反馈( negative feedback),若极性相同,则称为正反馈,一般闭环控制系统均采用负反馈,又称负反馈控制系统。闭环控制系统的例子很多。比如人就是一个具有负反馈的闭环控制系统,眼睛便是传感器,充当反馈,人体系统能通过不断的修正最后作出各种正确的动作。如果没有眼睛,就没有了反馈回路,也就成了一个开环控制系统。另例,当一台真正的全自动洗衣机具有能连续检查衣物是否洗净,并在洗净之后能自动切断电源,它就是一个闭环控制
8、系统。 3、阶跃响应 阶跃响应是指将一个阶跃输入(step function)加到系统上时,系统的输出。稳态误差是指系统的响应进入稳态后,系统的期望输出与实际输出之差。控制系统的性能可以用稳、准、快三个字来描述。稳是指系统的稳定性(stability),一个系统要能正常工作,首先必须是稳定的,从阶跃响应上看应该是收敛的;准是指控制系统的准确性、控制精度,通常用稳态误差来(steady-state error)描述,它表示系统输出稳态值与期望值之差;快是指控制系统响应的快速性,通常用上升时间来定量描述。 4、pid控制的原理和特点 在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制
9、,简称pid控制,又称pid调节。pid控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用pid控制技术最为方便。即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用pid控制技术。pid控制,实际中也有pi和pd控制。pid控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。 比例(p)控制 比例控制是一种最简单的控制方式。其控制器的
10、输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(steady-state error)。 积分(i)控制 在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(system with steady-state error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(pi)控制器,可以使系
11、统在进入稳态后无稳态误差。 微分(d)控制 在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。 自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入“比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从
12、而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分(pd)控制器能改善系统在调节过程中的动态特性。 5、pid控制器的参数整定 pid控制器的参数整定是控制系统设计的核心内容。它是根据被控过程的特性确定pid控制器的比例系数、积分时间和微分时间的大小。pid控制器参数整定的方法很多,概括起来有两大类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。pid控制器参数
13、的工程整定方法,主要有临界比例法、反应曲线法和衰减法。三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需要在实际运行中进行最后调整与完善。现在一般采用的是临界比例法。利用该方法进行 pid控制器参数的整定步骤如下:(1)首先预选择一个足够短的采样周期让系统工作;(2)仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡,记下这时的比例放大系数和临界振荡周期;(3)在一定的控制度下通过公式计算得到pid控制器的参数。 3.pid控制器参数的工程整定,各种调节系统中pid参数经验数据以下可参照: 温度t: p=206
14、0%,t=180600s,d=3-180s 压力p: p=3070%,t=24180s, 液位l: p=2080%,t=60300s, 流量l: p=40100%,t=660s。 4. pid常用口诀: 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积分时间往下降 曲线波动周期长,积分时间再加长 曲线振荡频率快,先把微分降下来 动差大来波动慢。微分时间应加长 理想曲线两个波,前高后低4比1 一看二调多分析,调节质量不会低#include#include#include#includestruct
15、pid unsigned int setpoint; / 设定目标 desired valueunsigned int proportion; / 比例常数 proportional constunsigned int integral; / 积分常数 integral constunsigned int derivative; / 微分常数 derivative constunsigned int lasterror; / error-1unsigned int preverror; / error-2unsigned int sumerror; / sums of errors;struc
16、t pid spid; / pid control structureunsigned int rout; / pid response (output)unsigned int rin; / pid feedback (input)sbit data1=p10;sbit clk=p11;sbit plus=p20;sbit subs=p21;sbit stop=p22;sbit output=p34;sbit dq=p33;unsigned char flag,flag_1=0;unsigned char high_time,low_time,count=0;/占空比调节参数unsigned
17、 char set_temper=35; unsigned char temper; unsigned char i;unsigned char j=0;unsigned int s;/*延时子程序,延时时间以12m晶振为准,延时时间为30ustime*/void delay(unsigned char time) unsigned char m,n; for(n=0;ntime;n+) for(m=0;m2;m+) /*写一位数据子程序*/void write_bit(unsigned char bitval) ea=0; dq=0; /*拉低dq以开始一个写时序*/ if(bitval=1
18、) _nop_(); dq=1; /*如要写1,则将总线置高*/ delay(5); /*延时90us供da18b20采样*/ dq=1; /*释放dq总线*/ _nop_(); _nop_(); ea=1; /*写一字节数据子程序*/void write_byte(unsigned char val) unsigned char i; unsigned char temp; ea=0; tr0=0; for(i=0;ii; /*移位操作,将本次要写的位移到最低位*/ temp=temp&1; write_bit(temp); /*向总线写该位*/ delay(7); /*延时120us后*/
19、 tr0=1; ea=1; /*读一位数据子程序*/unsigned char read_bit() unsigned char i,value_bit; ea=0; dq=0; /*拉低dq,开始读时序*/ _nop_(); _nop_(); dq=1; /*释放总线*/ for(i=0;i2;i+) value_bit=dq; ea=1; return(value_bit); /*读一字节数据子程序*/unsigned char read_byte() unsigned char i,value=0; ea=0; for(i=0;i8;i+) if(read_bit() /*读一字节数据,
20、一个时序中读一次,并作移位处理*/ value|=0x01i; delay(4); /*延时80us以完成此次都时序,之后再读下一数据*/ ea=1; return(value); /*复位子程序*/unsigned char reset() unsigned char presence; ea=0; dq=0; /*拉低dq总线开始复位*/ delay(30); /*保持低电平480us*/ dq=1; /*释放总线*/ delay(3); presence=dq; /*获取应答信号*/ delay(28); /*延时以完成整个时序*/ ea=1; return(presence); /*返
21、回应答信号,有芯片应答返回0,无芯片则返回1*/ /*获取温度子程序*/void get_temper() unsigned char i,j; do i=reset(); /*复位*/ while(i!=0); /*1为无反馈信号*/ i=0xcc; /*发送设备定位命令*/ write_byte(i); i=0x44; /*发送开始转换命令*/ write_byte(i); delay(180); /*延时*/ do i=reset(); /*复位*/ while(i!=0); i=0xcc; /*设备定位*/ write_byte(i); i=0xbe; /*读出缓冲区内容*/ writ
22、e_byte(i); j=read_byte(); i=read_byte(); i=(i4; temper=i|j; /*获取的温度放在temper中*/ /*=initialize pid structure=*/void pidinit (struct pid *pp)memset ( pp,0,sizeof(struct pid);/*=pid计算部分=*/unsigned int pidcalc( struct pid *pp, unsigned int nextpoint )unsigned int derror,error;error = pp-setpoint - nextpo
23、int; / 偏差pp-sumerror += error; / 积分derror = pp-lasterror - pp-preverror; / 当前微分pp-preverror = pp-lasterror;pp-lasterror = error;return (pp-proportion * error / 比例项+ pp-integral * pp-sumeror / 积分项+ pp-derivative * derror); / 微分项/*温度比较处理子程序*/compare_temper() unsigned char i; if(set_tempertemper) if(se
24、t_temper-temper1) high_time=100; low_time=0; else for(i=0;i10;i+) get_temper(); rin = s; / read input rout = pidcalc ( &spid,rin ); / perform pid interation if (high_time=100) high_time=(unsigned char)(rout/800); else high_time=100; low_time= (100-high_time); else if(set_temper0) high_time=0; low_ti
25、me=100; else for(i=0;i10;i+) get_temper(); rin = s; / read input rout = pidcalc ( &spid,rin ); / perform pid interation if (high_time100) high_time=(unsigned char)(rout/10000); else high_time=0; low_time= (100-high_time); / else / /*t0中断服务子程序,用于控制电平的翻转 ,40us*100=4ms周期*/void serve_t0() interrupt 1 us
26、ing 1 if(+count=(high_time) output=1; else if(count=100) output=0; else count=0; th0=0x2f; tl0=0xe0; /*串行口中断服务程序,用于上位机通讯*/void serve_sio() interrupt 4 using 2 /* ea=0; ri=0; i=sbuf; if(i=2) while(ri=0) ri=0; set_temper=sbuf; sbuf=0x02; while(ti=0) ti=0; else if(i=3) ti=0; sbuf=temper; while(ti=0) ti
27、=0; ea=1; */ void disp_1(unsigned char disp_num16) unsigned char n,a,m; for(n=0;n6;n+) / k=disp_num1n; for(a=0;a1; if(m=1) data1=1; else data1=0; _nop_(); clk=1; _nop_(); /*显示子程序功能:将占空比温度转化为单个字符,显示占空比和测得到的温度*/void display()unsigned char code number=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6;unsigned char disp_num6;unsigned int k,k1;k=high_time;k=k%1000;k1=k/100;if(k1=0) disp_num0=0;else disp_num0=0x60;k=k%100;disp_num1=numberk/10;disp_num2=numberk%10;k=temper;k=k%100;disp_n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阿巴嘎旗2025年数学四年级第二学期期末学业质量监测试题含解析
- 陇南地区西和县2024-2025学年小升初全真数学模拟预测卷含解析
- 陕西中医药大学《食品分析概论》2023-2024学年第一学期期末试卷
- 陕西国际商贸学院《分析化学I》2023-2024学年第二学期期末试卷
- 陕西电子信息职业技术学院《口译训练》2023-2024学年第二学期期末试卷
- 学校日常管理制度
- 陕西省咸阳市礼泉县2025届高考模拟最后十套:物理试题(十)考前提分仿真卷含解析
- 陕西省四校2024-2025学年高三5月测试(一卷)历史试题试卷含解析
- 企业风险管理制度
- 陕西省榆林市吴堡县子洲县2025届数学四下期末监测模拟试题含解析
- 广西壮族自治区桂林市各县区乡镇行政村村庄村名明细居民村民委员会
- 商事庭审百问
- 城市环境卫生工作定额环境卫生各类作业成本
- 文件、资料和记录调阅申请表
- 开工预付款支付申请表
- 腹部CT检查技术ppt课件(PPT 18页)
- 《医药代表拜访技巧及区域管理》PPT课件
- 事件研究法PPT课件
- 空冷岛施工方案
- 硬笔书法专用纸竖版
- 第二章 三相异步电机控制线路
评论
0/150
提交评论