|
|
??????????? ??题目名称:温度自动控制
??????????? 摘要:本温度自动控制由STC单片机作为主控制器,通过数字温度传感18B20测量温度,被测温度通过单片机处理由数码管显示,温度调节可通过单片机控制加热器实现. 水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动控制,以保证设定的温度基本不变.?温度设定范围为0~99℃,最小区分度为1℃,标定温度≤1℃。?环境温度降低时(例如用电风扇降温)温度控制的静态误差≤1℃?????? 关键词:STC89S52单片机 DS18B20 加热器 数码管 继电器1? 方案论证与比较... 31.1? 温度测量方法方案论证... 31.2? 处理器的选择方案论证... 32? 系统设计... 42.1? 总体设计... 42.2? 单元电路设计... 52.2.1? 电源电路设计... 52.2.2? DS18B20设计... 62.2.3? 数码管显示电路设计... 63? 软件设计... 74?? 系统测试... 85? 结论... 9参考文献:... 9附录:... 9附1:元器件明细表:... 9附2:仪器设备清单... 9附3:电路图图纸... 10附4:程序清单………………………………………………………??? 11 1??????????????? 方案论证与比较
1.1方案论证与比较? 方案1:此方案是采用传统的二位模拟控制方法,选用模拟电路,用电位器设定给定值,采用上下限比较电路将反馈的温度值与给定的温度值比较后,决定加热或者不加热。由于采用模拟控制方式,系统受环境的影响大,不能实现复杂的控制算法使控制精度做得教高,而且不能用数码显示和键盘设定。? ?????方案2:采用单片机AT89C51为核心。采用了温度传感器AD590采集温度变化信号,经高精度低温漂放大器OP07放大,A/D采样芯片ADC0809将其转换成数字信号并通过单片机处理后去控制温度,使其达到稳定。使用单片机具有编程灵活,控制简单的优点,使系统能简单的实现温度的控制及显示,并且通过软件编程能实现各种控制算法使系统还具有控制精度高的特点,硬件较为复杂。8位A/D模数转换芯片精度不够。??????????? 方案3 DS18B20???? 数字温度传感器直接把温度信号转换成数字量,通过STC单片机读取处理送数码管显示,STC单片机控制继电器的关闭和开启来控制温度的变化实现人工控制,编程灵活,控制简单。比较上述三种方案,方案2改善了方案1的不足及缺点,并具有控制简单、控制温度精度高的特点但由于用AD590硬件复杂,精度不高,成本高,所以我们采用方案3,单总线18B20,硬件简单,成本稍底.1.2处理器的比较与选择STC单片机所特有的在线下载功能和其他公司的单片机不同,不是利用SPI进行在线编程,而是利用IAP功能,在系统运行时编程,因此,可以通过串口来对单片机进行编程。其电路极为简单,只要所使用的单片机系统具有232串口通信功能即可。.工作宽温度范围,-40℃~85℃,在系统可编程,无需编程器,可远程升级,抗干扰强.价格低廉,所以采用了STC单片机. 2? 系统设计
2.1? 总体设计
根据高可靠性、实用性强、操作方便的设计原则,合理设计了温控系统的总体结构。水温控制系统是以STC89S52单片机为控制核心,辅以温度采集电路、驱动电路。显示电路和执行机构对水温进行控制的系统,温度测量值与温度设定值送入由AT89S52组成的控制主板后,由单片机的CPU对数据进行处理和比较分析,且把数据传送给数码管显示。若测量值高于温度设定范围,根据系统程序控制,运算得到加热器开启时间,然后由单片机发出控制信号,经过驱动电路使加热器工作。当加热时间达到了程序运算得到的时间长度时,单片机发出一个控制信号,关闭加热器。通过继电器的反复开启和关闭,使容器内水温保持在设定的温度范围内。?
总体设计框架 2.2单元电路设计
2.1电源电路设计?????????????????????????????????? 5V直流电源??首先确定整流电路结构为桥式电路;滤波选用电容滤波;稳压采用78XX系列集成稳压器,这是一个输出正5V直流电压的稳压电源电路。IC采用集成稳压器7805,C1、C4分别为输入端和输出端滤波电容LED和电阻组成电源指示灯。当输出电较大时,7805应配上散热板。5V电源为单片机供电.2.2DS18B20电路设计
DS18B20 数字温度传感器(参考:智能温度传感器DS18B20的原理与应用)是DALLAS 公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。DS18B20 产品的特点:
(1)、只要求一个I/O 口即可实现通信。
(2)、在DS18B20 中的每个器件上都有独一无二的序列号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、测量温度范围在-55 到+125℃之间; 在-10 ~ +85℃范围内误差为±5℃;
(5)、数字温度计的分辨率用户可以从9 位到12 位选择。将12位的温度值转换为数字量所需时间不超过750ms;
(6)、内部有温度上、下限告警设置。1.3数码显示采用动态数码显示,硬件简单。P3口没进行中断,计数,串行通信而是用做一般I/O口作为位选。P3口的2,3,5,7依次作为数码管1,2,3,4的位选,P2口作为段选。8个510R电阻起限流作用 3? 软件设计
主控芯片为STC89S52,本程序采用汇编编写,温度显示软件流程如下:: 4???????? 系统测试
第一次进行系统调试时温度无法显示经反复检查是由于DS18B20引脚接错了导致DS18B20被烧坏。换上新的DS18B20仔细查看资料总于温度显示正常。在继电器驱动方面先采用9015无法驱动后改为8550能够驱动可能是9015集电极电流太小原故。在室温条件下按下键加热器加热,程序设定以5度为步进,当加升高5度后在设定值的1度范围波动。经过反复调试终于成功。 5? 结论
由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标。 参考文献:
《模拟电子线路基础》,吴运昌著,广州:华南理工大学出版社,2004年;《数字电子技术基础》,阎石著,北京:高等教育出版社,1997年;《数据结构与算法》,张晓丽等著,北京:机械工业出版社,2002年;《单片机原理及应用》,李建忠著,西安:西安电子科技大学,2002年;《智能温度传感器DS18B20的原理与应用》西安:西安电子科技大学,2003 附录:
附1:元器件明细表:
1、DS18B20 2、变压器3、继电器 4 ?STC89S52 单片机5? 数码管 ARK SR43028IK6? 加热器 附2:仪器设备清?????
1、数字万用表???????????? 2、数字示波器3、稳压电源4、数字DC器5 ???函数发生器 附4:程序清单
?????? ORG????? 0000H?????? DIG1???? BIT????? P1.1?????? DIG2???? BIT????? P1.2?????? DIG3???? BIT????? P1.3?????? DIG4???? BIT????? P1.4?????? DQ??? BIT????? P1.5?????? KEY1???? BIT????? P3.2?????? KEY2???? BIT????? P3.3?????? KEY3???? BIT????? P3.4?????? FLAG_DEV EQU????? 00H?????? HBIT???? EQU????? 30H?????? LBIT???? EQU????? 31H?????? TEMP???? EQU????? 32H?????? TMP????? EQU????? 33H?????? TEMP_RES EQU????? 34HMAIN:???? LCALL GET_TEMP?????? AJMP? MAIN?KEY_PROCESS: MOV?? P2?????? MOV?? R4,92H?????? LCALL DISPLAY_DEV??GET_TEMP: LCALL INIT_DEV?????? JB FLAG_DEV,MARK?????? LCALL ERR_HANDLE?????? MARK:MOV A,#0CCH?????? LCALL WRITE_DATA?????? MOV?? A,#44H?????? LCALL WRITE_DATA?????? MOV?? R4,#0C6H?? ????LCALL DISPLAY_DEV?????? LCALL INIT_DEV?????? MOV?? A,#0CCH?????? LCALL WRITE_DATA?????? MOV?? A,#0BEH?????? LCALL WRITE_DATA?????? LCALL READ_DATA?????? MOV?? R4,#0C6H?????? LCALL DISPLAY_DEV?????? RETERR_HANDLE:? MOV?? R1,#08H????? SLOOP:LCALL? INIT_DEV?????? JB FLAG_DEV,LAST?????? DJNZ? R1,SLOOP??? DEV_ERR:MOV P2,#86H?????? CLR?? DIG1?????? LCALL DELAY?????? SETB? DIG1?????? MOV?? P2,#0AFH?????? CLR?? DIG2?????? LCALL DELAY?????? SETB? DIG2?????? MOV?? P2,#2FH?????? CLR?? DIG3?????? LCALL DELAY?????? SETB? DIG3?????? MOV?? P2,#0F9H?????? CLR?? DIG4?????? LCALL DELAY?????? SETB? DIG4?????? LJMP? DEV_ERR?????? LAST:RETINIT_DEV: SETB? DQ?????? NOP?????? CLR?? DQ?????? MOV?? R1,#0EFH?????? NOP?????? DJNZ? R1,$?????? SETB? DQ?????? MOV???? R1,#1DH?????? DJNZ? R1,$?????? JNB?? DQ,LOOP1?????? RET????? LOOP1:MOV R1,#06H????????? DJNZ? R1,$?????? MOV?? R1,#2DH?????? NOP?????? NOP?????? NOP????? LOOP2:JB? DQ,LOOP3??????????? DJNZ??? R1,LOOP2?????? RET????? LOOP3:MOV R1,#58H?????? DJNZ? R1,$?????? SETB? FLAG_DEV?????? RETWRITE_DATA:? MOV?? R2,#08H??? SYMBOL1:CLR DQ?????? RRC?? A?????? NOP?????? MOV?? DQ,C?????? MOV?? R1,#1CH?????? DJNZ? R1,$?????? SETB? DQ?????? NOP?????? DJNZ? R2,SYMBOL1?????? RETREAD_DATA:?? MOV?? R3,#4H?????? MOV?? R2,#8H??? SYMBOL2:MOV R1,#4H?????? CLR?? DQ?????? NOP?????? NOP?????? NOP?????? SETB? DQ?????? DJNZ? R1,$?????? MOV?? C,DQ?????? RRC?? A?????? MOV?? R1,#16H?????? DJNZ? R1,$?????? DJNZ? R2,SYMBOL2??? SYMBOL3:MOV R1,#6H?????? CLR?? DQ?????? NOP?????? NOP?????? NOP?????? SETB? DQ?????? DJNZ? R1,$?????? MOV?? C,DQ?????? RRC?? A?????? MOV?? R1,#16H?????? DJNZ? R1,$?????? DJNZ? R3,SYMBOL3?????? MOV?? TEMP,A?????? RETDISPLAY_DEV: MOV?? A,TEMP????? ?MOV?? B,#0AH?????? DIV?? AB?????? MOV?? HBIT,A?????? MOV?? LBIT,B?????? MOV?? R2,#7DH?????? MOV?? DPTR,#DISPTAB?????? MOV?? TMP,B?????? MOVC? A,@A+DPTR?????? MOV?? B,A?????? MOV?? A,TMP?????? MOVC? A,@A+DPTR????? DIS_COUNT:MOV?? P2,R4?????? CLR?? DIG4?????? LCALL DELAY?????? SETB? DIG4?????? MOV?? P2,B?????? CLR?? DIG1?????? LCALL DELAY?????? SETB? DIG1?????? MOV?? P2,A?????? CLR?? DIG2?????? LCALL DELAY?????? SETB? DIG2?????? DJNZ? R2,DIS_COUNT?????? RETDELAY:??? MOV?? R3,#3H??? ????DLY:MOV R1,#0FFH?????? DJNZ? R1,$?????? DJNZ? R3,DLY?????? MOV?? R1,#0E3H?????? DJNZ? R1,$?????? RETDISPTAB:? DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND??????? |
|