PID自动温度控制器.docx

上传人:牧羊曲112 文档编号:4887671 上传时间:2023-05-21 格式:DOCX 页数:30 大小:417.96KB
返回 下载 相关 举报
PID自动温度控制器.docx_第1页
第1页 / 共30页
PID自动温度控制器.docx_第2页
第2页 / 共30页
PID自动温度控制器.docx_第3页
第3页 / 共30页
PID自动温度控制器.docx_第4页
第4页 / 共30页
PID自动温度控制器.docx_第5页
第5页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《PID自动温度控制器.docx》由会员分享,可在线阅读,更多相关《PID自动温度控制器.docx(30页珍藏版)》请在三一办公上搜索。

1、目录一、设计内容21.1温度控制21.2设计方案2二、软件设计02.1主程序流程图02.2 DS18B20实现温度转换和温度数值读取流程图02.3显示流程图1三、PID控制23.1PID 简介23.2PID控制算法4四、电路设计64.1功能模块设计64.2电路连接设计74.2.1温度检测电路74.2.2继电器控温电路74.2.3夕卜部电路8参考文献9附录PID温度控制器程序10一、设计内容1.1温度控制本设计以水为测量对象,温度测量电路接收传感器的信号,并将模拟信号通 过模/数转换器转换为数字信号,送入单片机系统,与预设的温度对比,通过一定 的控制算法,控制继电器的通断,从而控制加热器的工作,

2、使得水温维持在设定 的温度。温度控制算法精确控制温度加热,以温度最小为优化目标。温度是工业控制对象的主要的被控参数之一,如冶金,机械,食品,化工各 类工业中广泛使用的各种加热炉,热处理炉,反应炉等。在过去多是采用常规的 模拟调节器对温度进行控制,本设计采用了单片微型机对温度实现自动控制。1.2设计方案温度控制系统是一种比较常见和典型的过程控制系统。温度是工业生产过程 中重要的被控参数之一,当今计算机控制技术在这方面的应用,已使温度控制系 统达到自动化、智能化,比过去单纯采用电子线路进行PID调节的控制效果要好 得多,可控性方面也有了很大的提高。温度是一个非线性的对象,具有大惯性的特点,在低温段

3、惯性较大,在高温 段惯性较小。对于这种温控对象,一般认为它具有以下的传递函数形式:这是传统的二位式模拟控制方案,其基本思想与方案一相同,但由于采用上 下限比较电路,所以控制精度有所提高。这种方法还是模拟控制方式,因此也不 能实现复杂的控制算法使控制精度做得较高,而且不能用数码管显示,对键盘进 行设定。采用89C51单片机系统来实现。单片机软件编程灵活、自由度大,可用软件 编程来实现各种控制算法和逻辑控制。单片机系统可以使用数码管来显示水温的 实际值,能用键盘输入设定值。选用了 AT89C51芯片,不需要外扩展存储器,可 使系统整体结构更为简单。采用以单片机为控制核心的控制系统,尤其对温度控制,

4、可达到模拟控制所 达不到的效果,并且实现显示和键盘设定功能,大大提高了系统的智能化。这也 使得系统所测得结果的精度大大提高。AT89C51是一种带4k字节闪烁可编程可擦除只读存储器的低电压,高性能 CMOS8位微处理器,俗称单片机。而在众多的51系列单片机中,要算ATMEL公 司的AT89C51更实用,也是一种高效微控制器,因为它不但和8051指令、管脚 完全兼容,而且其片内的4K程序存储器是FLASH工艺的,这种工艺的存储器, 用户可以用电的方式达到瞬间擦除、改写。而这种单片机对开发设备的要求非常 低,开发时间也能大大缩短。DS18B20是一线式数字温度传感器,它具有微型化、低功耗、高性能抗

5、干扰 能力、强易配处理器等优点,特别适合用于构成多点温度测控系统,可直接将温 度转化成串行数字信号(按9位二进制数字)给单片机处理,且在同一总线上可 以挂接多个传感器芯片。它具有独特的单总线接口方式,仅需使用1个端口就能 实现与单片机的双向通讯。采用数字信号输出提高了信号抗干扰能力和温度测量 精度。它的工作电压使用范围宽3.05.5 V,可以采用外部供电方式,也可以采用 寄生电源方式,即当总线DQ为高电平时,窃取信号能量给DS18B20供电。它还 有负压特性,电源极性接反时,DS18B20不会因接错线而烧毁,但不能正常工作。 可以通过编程而实现912位的温度转换精度设置。设定的分辨率越高,所需

6、要 的温度数据转换时间就越长,在实际应用中要将分辨率和转换时间权衡考虑。RS-232接口是个人计算机上的通讯接口之一,是1970年由美国电子工业协 会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用 于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE) 之间串行二进制数据交换接口技术标准”。该标准规定采用一个25个脚的DB25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规 定。随着设备的不断改进,出现了代替DB25的DB9接口。二、软件设计2.1主程序流程图系统的主程序流程图如图2-1所示,当有信号输入时,主程序启动,根据

7、内 部设定的条件逐步运行,达到设计目的。图2-1主程序流程图2.2 DS18B20实现温度转换和温度数值读取流程图图2-2为DS18B20实现温度转换和温度数值读取流程图,用于系统的温度转 换和温度数值的读取。图2-2 DS18B20实现温度转换和温度数值读取流程图2.3显示流程图给操作者图2-3为系统的显示流程图。主要是通过对传输信号进行显示后, 提供提示。以到达为本系统提供对温度的显示和监控的目的。y 开始 J串行口初始化向缓冲区送数据查段码送显示(结束 )图2-3显示流程图三、PID控制3.1PID简介PID控制器是一种线性控制器,它根据给定值厂r(t)与实际输出值y(t)构成控 制偏差

8、e(t):e(t) = r (t) 一 y (t)(3.1)将偏差e(t)的比例(Proportional)、积分(Integral)和微分(Derivative)通过线性组合构成控制量,对被控对象进行控制,因此称为PID控制。PID控制系统原 理如图3-1所示。图3-1 PID控制系统原理图其控制规律为:u(t) = K e(t) + j fe(t)dt + T 空也(3.2)(3.3)p T 0 d dt1-1或者写成传递函数的形式为:G(s) = K (1+ + T s) P Ts D1式中 Kp :比例系数T :积分时间常数1T:微分时间常数PID控制器各校正环节的作用如下:比例环节即

9、时成比例地反映控制系统的偏差信号e(t),偏差一旦产生,控制器立即产生控制作用,以减少偏差;(2) 积分环节主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数,T越大,积分作用越弱,反之则越强;1(3) 微分环节能够反映偏差信号的变化趋势(变化速率),并且能在偏差信号值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速 度,减少调节时间。3.2PID控制算法由于计算机控制是一种采样控制系统,它只能根据采样时刻的偏差值计算控 制量。因此,(3.2)式中的积分和微分项不能直接使用,需要进行离散化处理。 现令T为采样周期,以一系列的采样时刻点kT代表连续时间,以

10、累加求和近似 代替积分,以一阶后向差分近似代替微分,做如下的近似变换:t = kT(3.4)j=0(3.5)(3.6)e(t)总 Te(jT) = Te(j)j=0de(t)e(kT) - e (k - 1)Te(k) - e(k -1)总=dtTT其中,T为采样周期,e(k)为系统第k次采样时刻的偏差值,e(k-1)为系统第(k-1) 次采样时刻的偏差值,k为采样序号,k =0,1,2,。将上面的(3.5)式和(3.6)式代入(3.2)式,则可以得到离散的PID表达式:u(k) = K e(k) + 1-寸 e(j) + Te(k)-e(k-1)(3.7)T1 j=0TJ如果采样周期T足够小

11、,该算式可以很好的逼近模拟PID算式,因而使被控过程 与连续控制过程十分接近。通常把(3.7)式称为PID的位置式控制算法。若在(3.7)式中,令:K1 = (称为积分系数)1Kd= Kt (称为微分系数)则 u(k) = K e(k) + K lLe( j) + K e(k) -e(k -1)(3.8)j=0(3.8)式即为离散化的位置式PID控制算法的编程表达式。可以看出,每次输出与过去的所有状态都有关,要想计算u(k),不仅涉及e(k)和e(k -1),且须将历次e( j)相加,计算复杂,浪费内存。下面,推导计算较为简单的递推算式。为此,对(3.8)式作如下的变动:考虑到第(k -1)次

12、采样时有u(k-1) = K e(k-1) + Ti-1 e(j) + Te(k-1)-e(k-2)(3.9)T1 j=J使(3.8)式两边对应减去(3.9)式,得u(k) u(k -1) = K e(k) e(k -1)+Te(k) + T e(k) 2e(k -1) + e(k 2)T1TJ整理后得U (k)= U Z + 二 I k 人 S)+T 职 + T (k) 一1)+e(心iT T2TT=u(k -1) + Kp(1+ + f)e(k) - Kp(1+d)e(k -1) + Kpfe(k -2)(3. 10)1=u(k 一 1) + a e(k) 一 a e(k 一 1) + a

13、 e(k 一 2)012T T2TT其中,a = K (1+ + d),a = K (1+),a = K d,(3. 10)式就是 PID o p t t 1 p t 2 p t1位置式得递推形式。如果令 Au(k) = u(k) 一 u(k -1)贝V Au(k) = a e(k) 一 a e(k -1) + a e(k 一 2) 012式中的a、a、a同(3. 10)式中的一样。012因为在计算机控制中,a、a、a都可以事先求出,所以,实际控制时只须 012获得e(k)、e(k -1)、e(k - 2)三个有限的偏差值就可以求出控制增量。由于其控制输出对应执行机构的位置的增量,故(3.11

14、)式通常被称为PID控制的增量式 算式。增量式PID控制算法与位置式控制算法比较,有如下的一些优点:(1) 位置式算法每次输出与整个过去状态有关,算式中要用到过去偏差的累加值i e(j),容易产生较大的累计误差。而增量式中只须计算增量,算式中不需要累加,控制增量的确定仅与最近几次偏差采样值有关,当存在计算误差或者精 度不足时,对控制量的影响较小,且较容易通过加权处理获得比较好的控制效 果;(2) 由于计算机只输出控制增量,所以误动作影响小,而且必要时可以用逻辑判断的方法去掉,对系统安全运行有利;(3) 手动一自动切换时冲击比较小。鉴于以上优点,本系统的控制算法即采用增量式的PID控制算法。四、

15、电路设计4.1功能模块设计数字温度传感器DS18B20从设备不同的位置采集温度,并将数字信号送入 AT89C51单片机系统,单片机获取采集的温度值,经过处理后得到当前环境中一 个比较稳定的温度值,根据当前设定的温度上下限值,再通过PID控制算法控制 继电器的通断,从而控制加热器的工作,使得水温维持在设定的温度。当采集的 温度经处理后没有达到设定的温度值时,单片机控制继电器开启升温设备(加热 器)。r * I II!nri! q Q 中b 谐图4-1单片机电路图4.2电路连接设计4.2.1温度检测电路4.2.2继电器控温电路当DS18B20采集到温度后,会将温度值传送到单片机。单片机获取采集的温

16、 度值,经过处理后得到当前环境中一个比较稳定的温度值,根据当前设定的温度 上下限值,再通过PID控制算法控制继电器的通断,从而控制加热器的工作,使 得水温维持在设定的温度。2826=3=-关322123242-2S4C1C11zC19IDIL0;-、e.二三图4-3继电器控温电路图4.2.3外部电路启动、复位电路用于系统的开始和重置。图4-4外部电路图参考文献1 余锡存主编.单片机原理与接口技术.西安电子科技大学出版社,2001,7.2 刘金琨.先进PID控制及其MATLAB 仿真M.北京:电子工业出版社,2003.3 曹巧媛主编.单片机原理及应用(第二版)M.北京:电子工业出版社,2002.

17、4 康华光主编.电子技术基础M.北京:高等教育出版社,1998, 121-142.5 何立民.单片机高级教程应用M.北京:北京航空航天大学出版社,2000,3-146 金发庆等编.传感器技术与应用M.北京机械工业出版社,2002.7 秦实宏等.单片机原理与应用技术M.北京:中国水利水电出版社,2005, 27-48.8 陈忠华.基于单片机的温度智能控制系统的设计与实现D.大连理工大学硕士学位论文, 2006.附录PID温度控制器程序#pragma db code#include定义busy信号定义18B20单总线引脚#include INTRINS.H#define BUSY1 (DQ1=0)

18、 sbit DQ1=P3A5;void ds_reset_1(void);void wr_ds18_1(char dat);void time_delay(unsigned char time);int get_temp_1(void);void delay(unsigned int x);void read_ROM(void);int get_temp_d(void);void ds_init(void);void ds_getT(void);void hot();声明18B20复位函数声明18B20写入函数声明延时函数声明18B20读入温度函数/声明延时函数声明18B20读ROM函数声明获

19、取温度函数声明18B20初始化函数声明18B20获得温度显示值函数/* 以下定义各种变量 */ unsigned char ResultSignal;int ResultTemperatureLH,ResultTemperatureLL,ResultTemperatureH;unsigned char ROM8;unsigned char idata TMP;unsigned char idata TMP_d;unsigned char f;unsigned char rd_ds18_1();温度的整数部分和小数部分定义小数计算部分unsigned int TemH,TemL;unsigned

20、 int count;unsigned int tt1,tt2;void main()ds_init();/18B20 初始化while(1)ds_getT();使用该函数获得温度,整数部分存储到TemH,小数部分存储到count的低8位if(TMP_dtt1)hot();/*18B20 初始化函数*/void ds_init(void)unsigned int k=0;ds_reset_1();ds_reset_1();/resetwr_ds18_1(0xcc);/skip rom_nop_();wr_ds18_1(0x7f);ds_reset_1();wr_ds18_1(0xcc);_no

21、p_();wr_ds18_1(0x44);for(k=0;k11000;k+)time_delay(255);ds_reset_1();wr_ds18_1(0xcc);wr_ds18_1(0xbe);TemH=get_temp_1();TemL=get_temp_d();TemH&=0x00ff;TemL&=0x00ff;count=(TemH*256+TemL)*6.25; /*延时程序,单位 us,大于 10us*/ void time_delay(unsigned char time)time=time-10;time=time/6;while(time!=0)time-;/*/*res

22、et ds18b20*/3/*/ void ds_reset_1(void)unsigned char idata count=0;DQ1=0;time_delay(240);time_delay(240);DQ1=1;return;void check_pre_1(void)while(DQl);while(DQ1);time_delay(30);void read_ROM(void)int n;ds_reset_1();check_pre_1();wr_ds18_1(0x33);for(n=0;n8;n+)ROMn=rd_ds18_1();/*/*/* Read a bit from 18

23、20 位读取/*/ bit tmrbit_1(void)idata char i=0;bit dat;DQ1=0;_nop_();DQ1=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();dat = DQ1;time_delay(50);return dat; 3/*/*read a bety from ds18b20 字节读取 */ /*/ unsigned char rd_ds18_1()unsigned char

24、 idata i,j,dat=0;for(i=1;i=8;i+)j=tmrbit_1();dat=(j(i-1)|dat;return dat;/*/*write a bety from ds18b20 写字节*/ /*/ void wr_ds18_1(char dat)signed char idata i=0;unsigned char idata j;bit testb;for(j=1;j1;if(testb)DQ1=0;_nop_();_nop_();DQ1=1;time_delay(60);elseDQ1=0;time_delay(50);DQ1=1;_nop_();_nop_();

25、int get_temp_1(void)unsigned char idata a=0,b=0;unsigned char idata i;EA=0;ds_reset_1();check_pre_1();wr_ds18_1(0xcc);wr_ds18_1(0x44);while(BUSY1);ds_reset_1();check_pre_1();wr_ds18_1(0xcc);wr_ds18_1(0xbe);a=rd_ds18_1();b=rd_ds18_1();i=b;/*若b为1则为负温 */i=(i4);if(i=0)f=0;TMP=(a4)|(b8)TMP=(TMP+1);elsef=

26、1;a=a4;b=b4);if(i=0)f=0;TMP=(a4)|(b4;b=b4;TMP=(alb);m=(m&0x0f);TMP_d=m;EA=1;return(TMP_d);void delay(unsigned int x)unsigned int i;for(i=0;ichannelj:-timek:-set tempraturel:-actual tempraturereturn:adjust_time-adjust time*/void pid (unsigned char ch,float refval)Float DiscE,Tmpr;Errch1=refval-GetTmp

27、(GetData7705(ch+l);/e(k)If(Errch 1=Emax) InteEch 1=InteEch 1=InteEch 0+Errch 1;elseInteEch l= InteEch 0;DiscE=Err ch 1-Errch 0;Tmpr=Kp*Errch 1+Ki*InteEch 1+Kd*DiscE;OnMsch 1=GetOnMs(FiltA*OnMsch 0+FiltB*Tmpr);Errch 0=Err ch 1;InteEch 0=InteEch 1;OnMsch 0= OnMsch 1;/*function:description:parameter:float GetOnMs(float OnTime) output control time noneftmpreturn:*/float GetOnMs(float OnTime)float ftmp;if(OnTime=100) ftmp=100;elseftmp=OnTime;return(ftmp);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号