还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
过程控制系统绪论在科技高速发展的信息时代,电子技术、微型计算机技术的应用更是空前广泛,伴随着科学技术和生产不断发展,需要对各种参数进行温度测量在单片机温度测量系统中最关键的是测量温度、控制温度和保持温度,温度测量是对工业对象中主要的被控参数之一,因此单片机测量是对温度的有效的测量,并能在工业生产中得到广泛应用本次课设所研究的课题是“基于单片机的热水锅炉温度控制系统设计,主要介绍了对热水锅炉的温度显示、控制及报警、实现了温度的实时显示及控制锅炉水温控制部分采用了AT89S52单片机、DS18B20温度传感器以及步进电机来实现,通过温度传感器DS18B20采集环境温度,以单片机为核心控制部件将采集到的温度通过串口通信MAX232输入到电脑中,在电脑中通过C语言编程来控制单片机的工作方式,将程序下载到单片机中,通过设定温度与给定温度的比较来控制电机的正反转来模拟升温和降温使系统工作在设定的温度范围之内,当温度高于设定值时,通过电机正转来模拟开大冷水阀,进而使水温降低;当温度低于设定值时,通过电机反转来模拟关小冷水阀,进而使水温升高;直到在规定的温度范围内进行恒温加热本次课设通过Labview来绘制人机交互界面设置温度的上下限并且通过该界面可以实时显示当前的温度值,发出报警信号等,便于操作人员观察关键词AT89S52单片机DS18B20温度传感器串口通讯Labview步进电机一设计任务、要求和技术指标
1.1设计任务
①系统构成系统主要由温度传感器,单片机控制系统、锅炉温度对象、执行器(查找资料自己选择)等组成温度传感器、控制器、执行器可查找资料自行选择,控制器选择单片机为控制器单片机型号自选
②写出温度测量与控制过程,绘制温度控制系统组成框图
③
(1)系统硬件电路设计自选温度测量程序、温度校准程序、温度控制程序等部分组成
1.2主要技术指标
(1)温度显示误差不超过1℃
(2)温度显示范围为0℃—99℃
二、总体设计方案
2.1设计思路本设计方案采用AT89S52单片机作为控制器,DS18B20芯片作为温度传感器,步进电机作为执行器构成过程控制系统,来模拟热水锅炉温度控制系统通过温度传感器DS18B20采集锅炉水温,以单片机为核心控制部件将采集到的温度通过串口输入到电脑中,在电脑中通过labview组态软件来显示实时温度和设置预置温度,并根据实时温度与预置温度的偏差大小控制进水阀门的开关,进而达到调节锅灶水温的目的当实时温度高于设定值时,通过电机正转来模拟开大冷水阀,进而使水温降低;当温度低于设定值时,通过电机反转来模拟关小冷水阀,进而使水温升高;直到在规定的温度范围内进行恒温加热本次课设通过Labview来绘制人机交互界面,设置所需温度值
2.2系统总体框图
2.3系统框图
3、控制器AT89S
523.1AT89S52简介AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可程Flash存储器使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容片上Flash允许程序存储器在系统可编程亦适于常规编程器在单芯片上拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案AT89S52具有以下标准功能8k字节Flash、256字节RAM、32位I/O口线、看门狗定时器,2个数据指针、三个16位定时器/计数器、一个6向量2级中断结构、全双工串行口,片内晶振及时钟电路另外AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式空闲模式下,CPU停止工作允许RAM、定时器/计数器、串口、中断继续工作掉电保护方式下,RAM内容被保存振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止电路图如下
4、传感器DS18B20DS18B20是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式DS18B20的性能特点如下•独特的单线接口仅需一个端口引脚进行通讯•简单的多点分布应用•无需外部器件•可通过数据线供电•零待机功耗•测温范围-55~+125℃,以
0.5℃递增华氏器件-67~+2570F,以
0.90F递增•温度以9位数字量读出•温度数字量转换时间200ms(典型值)•用户可定义的非易失性温度报警设置•报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件DS18B20的测温原理如图
3.
3.3所示,图中低温度系数晶振的振荡频率受温度的影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温图2中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要系统对DS18B20的各种操作必须按协议进行操作协议为初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据��预置�低温度系数振荡器�高温度系数振荡器�斜率增加器�计数器1�比较�预置�=0�温度寄存器�计数器2�=0�Tx�加1停止τ1τ2图
3.
3.3DS18B20测温原理图
5、接口通讯单元51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,因此采用专用芯片MAX232进行转换max232资料简介该产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片由于电脑串口rs232电平是-10v+10v,而一般的单片机应用系统的信号电压是ttl电平0+5vmax232就是用来进行电平转换的该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-VTTL/CMOS电平每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平主要特点
1、单5V电源工作
2、LinBiCMOSTM工艺技术
3、两个驱动器及两个接收器
4、±30V输入电平
5、低电源电流典型值是8mA
6、符合甚至优于ANSI标准EIA/TIA-232-E及ITU推荐标准V.
287、ESD保护大于MIL-STD-883(方法3015)标准的2000V51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠
3、系统总工作原理工作原理本设计方案采用AT89S52单片机作为控制器,DS18B20芯片作为温度传感器,步进电机作为执行器构成过程控制系统,来模拟热水锅炉温度控制系统通过温度传感器DS18B20采集锅炉水温,以单片机为核心控制部件将采集到的温度通过串口输入到电脑中,在电脑中通过labview组态软件来显示实时温度和设置预置温度,并根据实时温度与预置温度的偏差大小控制进水阀门的开关,进而达到调节锅灶水温的目的当实时温度高于设定值时,通过电机正转来模拟开大冷水阀,进而使水温降低;当温度低于设定值时,通过电机反转来模拟关小冷水阀,进而使水温升高;直到在规定的温度范围内进行恒温加热本次课设通过Labview来绘制人机交互界面,设置所需温度值系统通过DS18B20检测锅炉的水温,DS18B20作为全数字式的温度传感器,将所测温度以数字量形式传给AT89S52单片机,单片机先不直接处理所测温度,而是将温度传给上位机,计算机通过labview对温度信息进行记录和处理然后又发送到单片机通过单片机控制执行器件Labview先对温度进行中值滤波以消除随机误差然后再与设定温度相减以取得偏差,然后再根据偏差方向控制步进电机的正反转以调节冷水阀的开度进而达到控制锅炉水温的目的
七、参考文献
1、马淑华《单片机原理与接口技术》北京邮电大学出版社
2、任彦硕《自动控制系统》北京邮电大学出版社
3、谭浩强《C语言程序设计》清华大学出版社
8、结束语通过本次课程设计,将之前所学的专业课《单片机原理》、《过程控制系统》、《虚拟仪器》、《C语言》等课程有机的结合到了一起将所学的知识付诸于实践是一件很兴奋的事情,这让我明白了自己所学的知识与实际的生产生活有着很大的联系但通过本次课设我也发现了自己有很多不足之处,对编程缺乏兴趣、对一些本专业的软件不能熟练的掌握等缺点因此,在即将到来的毕业设计中,我要主动去学习一些软件的用法,不拿不敢兴趣为理由,做出一个漂亮的作业附录1源程序/***********************主程序***************************/#includereg
52.h//包含单片机寄存器的头文件#includeintrins.h//包含_nop_函数定义的头文件unsignedcharjieshou;unsignedcharflagtltemp;unsignedcodeFFW
[8]={0x010x030x020x060x040x0c0x080x09};unsignedcodeREV
[8]={0x090x080x0c0x040x060x020x030x01};voiddelay1ms{unsignedcharij;fori=0;i4;i++forj=0;j33;j++;}voiddelaynmsunsignedcharn{unsignedchari;fori=0;in;i++delay1ms;}/*********************步进电机正转***********************/voidmotor_ffw{unsignedchari;unsignedcharj;forj=0;j8;j++//转1*n圈{ifjieshou==3{break;}//退出此循环程序fori=0;i8;i++//一个周期转45度{P1=FFW[i];//取数据delaynms4;//调节转速}}}/******************步进电机反转**************************/voidmotor_rev{unsignedchari;unsignedintj;forj=0;j8;j++//转1×n圈{ifjieshou==0{break;}//退出此循环程序fori=0;i8;i++//一个周期转45度{P1=REV[i];//取数据delaynms4;//调节转速}}}//串口初始化voidUART_Initvoid{SCON=0x50;//串口工作方式为1,串行允许接收TMOD=0x20;//定时器1工作在方式2//PCON=0x80;//SMOD=1;波特率加倍TH1=0xfd;//波特率9600bpsfosc=
11.0592MHzTL1=0xfd;ES=1;//开串口中断TR1=1;//允许定时器1工作EA=1;//开总中断}//串口发送一个字节voidUart_SendCharshortintdat{SBUF=dat;//待发送的数据写入缓冲区while!TI;//等待发送完成TI=0;//清零发送标志位}/*以下是DS18B20的操作程序**/sbitDQ=P3^3;unsignedchartime;//设置全局变量,专门用于严格延时/*函数功能将DS18B20传感器初始化,读取应答信号*/bitInit_DS18B20void{bitflag;DQ=1;//先将数据线拉高fortime=0;time2;time++//略微延时约6微秒;DQ=0;//再将数据线从高拉低,要求保持480~960usfortime=0;time200;time++//略微延时约600微秒;//以向DS18B20发出一持续480~960us的低电平复位脉冲DQ=1;//释放数据线(将数据线拉高)fortime=0;time10;time++;//延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)flag=DQ;//让单片机检测是否输出了存在脉冲(DQ=0表示存在)fortime=0;time200;time++//延时足够长时间,等待存在脉冲输出完毕;returnflag;//返回检测成功标志}/*****************************************************函数功能从DS18B20读取一个字节数据出口参数dat***************************************************/unsignedcharReadOneCharvoid{unsignedchari=0;unsignedchardat;//储存读出的一个字节数据fori=0;i8;i++{DQ=1;//先将数据线拉高_nop_;//等待一个机器周期DQ=0;//单片机从DS18B20读书据时将数据线从高拉低即启动读时序_nop_;//等待一个机器周期DQ=1;//将数据线人为拉高为单片机检测DS18B20的输出电平作准备fortime=0;time2;time++;//延时约6us,使主机在15us内采样dat=1;ifDQ==1dat|=0x80;//如果读到的数据是1,则将1存入datelsedat|=0x00;//如果读到的数据是0,则将0存入dat//将单片机检测到的电平信号DQ存入r[i]fortime=0;time8;time++;//延时3us两个读时序之间必须有大于1us的恢复期}returndat;//返回读出的十六进制数据}/*****************************************************函数功能向DS18B20写入一个字节数据入口参数dat***************************************************/WriteOneCharunsignedchardat{unsignedchari=0;fori=0;i8;i++{DQ=1;//先将数据线拉高_nop_;//等待一个机器周期DQ=0;//将数据线从高拉低时即启动写时序DQ=dat0x01;//利用与运算取出要写的某位二进制数据//并将其送到数据线上等待DS18B20采样fortime=0;time10;time++;//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样DQ=1;//释放数据线fortime=0;time1;time++;//延时3us两个写时序间至少需要1us的恢复期dat=1;//将dat中的各二进制位数据右移1位}fortime=0;time4;time++;//稍作延时给硬件一点反应时间}/*****************************************************函数功能做好读温度的准备***************************************************/voidReadyReadTempvoid{Init_DS18B20;//将DS18B20初始化WriteOneChar0xCC;//跳过读序号列号的操作WriteOneChar0x44;//启动温度转换delaynms200;//转换一次需要延时一段时间Init_DS18B20;//将DS18B20初始化WriteOneChar0xCC;//跳过读序号列号的操作WriteOneChar0xBE;//读取温度寄存器前两个分别是温度的低位和高位}voidmainvoid{unsignedcharTL;//储存暂存器的温度低位unsignedcharTH;//储存暂存器的温度高位unsignedcharTN;//储存温度的整数部分unsignedcharTD;//储存温度的小数部分unsignedcharN=64;//N步进电机运转圈数因为我们的步进电机是减速步进电机减速比是1/64所以这里N=64时步进电机外部的主轴转1圈UART_Init;//初始化串口while1//不断检测并显示温度{ReadyReadTemp;//读温度准备TL=ReadOneChar;//先读的是温度值低位TH=ReadOneChar;//接着读的是温度值高位ifTH0xf8!=0x00//判断高五位得到温度正负标志{flag=1;TL=~TL;//取反TH=~TH;//取反tltemp=TL+1;//低位加1TL=tltemp;iftltemp255TH++;//如果低8位大于255,向高8位进1TN=TH*16+TL/16;//实际温度值=TH*256+TL/16即TH*16+TL/16//这样得出的是温度的整数部分小数部分被丢弃了TD=TL%16*10/16;//计算温度的小数部分将余数乘以10再除以16取整,}TN=TH*16+TL/16;//实际温度值=TH*256+TL/16即TH*16+TL/16//这样得出的是温度的整数部分小数部分被丢弃了TD=TL%16*10/16;//计算温度的小数部分将余数乘以10再除以16取整,//这样得到的是温度小数部分的第一位数字保留1位小数delaynms10;Uart_SendCharTN;Uart_SendCharTD;P2=0xff;//执行部分ifjieshou==1{motor_ffw;//电机正转ifjieshou==3break;//退出此循环程序}elseifjieshou==2{motor_rev;//电机反转ifjieshou==3break;//退出此循环程序}elseP1=0xf0;}}//串口接收中断函数voidINT_UartRcvvoidinterrupt4{unsignedcharRcv=0r=0;ifRI//查询接收标志位(有数据发送过来时置为1){RI=0;//接收标志位清零Rcv=SBUF;//存储缓冲区的数据jieshou=Rcv;}}附录2主程序框图子程序框图(温度读写)附录三数据显示上位机越限报警MAX232电平转换芯片DS18B20温度芯片数据传输AT89S52步进电机ULN2003。