基于51单片机的温度控制系统设计doc.docx
《基于51单片机的温度控制系统设计doc.docx》由会员分享,可在线阅读,更多相关《基于51单片机的温度控制系统设计doc.docx(18页珍藏版)》请在冰豆网上搜索。
基于51单片机的温度控制系统设计doc
基于51单片机的水温自动控制系统
0引言
在现代的各种工业生产中,很多地方都需要用到温度控制系统。
而智能化的控制系统成为一种发展的趋势。
本文所阐述的就是一种基于89C51单片机的温度控制系统。
本温控系统可应用于温度范围30℃到96℃。
1设计任务、要求和技术指标
1.1任务
设计并制作一水温自动控制系统,可以在一定范围(30℃到96℃)内自动调节温度,使水温保持在一定的范围(30℃到96℃)内。
1.2要求
(1)利用模拟温度传感器检测温度,要求检测电路尽可能简单。
(2)当液位低于某一值时,停止加热。
(3)用AD转换器把采集到的模拟温度值送入单片机。
(4)无竞争-冒险,无抖动。
1.3技术指标
(1)温度显示误差不超过1℃。
(2)温度显示范围为0℃—99℃。
(3)程序部分用PID算法实现温度自动控制。
(4)检测信号为电压信号。
2方案分析与论证
2.1主控系统分析与论证
根据设计要求和所学的专业知识,采用AT89C51为本系统的核心控制器件。
AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。
其引脚图如图1所示。
2.2显示系统分析与论证
显示模块主要用于显示时间,由于显示范围为0~99℃,因此可采用两个共阴的数码管作为显示元件。
在显示驱动电路中拟订了两种设计方案:
方案一:
采用静态显示的方案
采用三片移位寄存器74LS164作为显示电路,其优点在于占用主控系统的I/O口少,编程简单且静态显示的内容无闪烁,但电路消耗的电流较大。
方案二:
采用动态显示的方案
由单片机的I/O口直接带数码管实现动态显示,占用资源少,动态控制节省了驱动芯片的成本,节省了电,但编程比较复杂,亮度不如静态的好。
由于对电路的功耗要求不大,因此就在尽量节省I/O口线的前提下选用方案一的静态显示。
图1AT89C51引脚图
2.3检测系统分析与论证
1温度检测:
有选用AD590和LM35D两种温度传感器的方案,但考虑到两者价格差距较大,而本系统中对温度要求的精度不很高,因而选用比较廉价LM35D。
温度传感器采用的是NS公司生产的LM35D,他具有很高的工作精度和较宽的线性工作范围,他的输出电压与摄氏温度线性成比例,且无需外部校准或微调,可以提供±1/4℃的常用的室温精度。
LM35的输出电压与摄氏温度的线形关系可用下面公式表示,0℃时输出为0V,每升高1℃,输出电压增加10mV。
其电源供应模式有单电源与正负双电源两种,其接法如图2与图3所示。
正负双电源的供电模式可提供负温度的测量,单电源模式在25℃下电流约为50mA,非常省电。
本系统采用的是单电源模式。
Vout=10mV/℃×T(℃)
2液位检测:
同样考虑到成本问题,选用自己做一个液位传感装置。
图2单电源模式图3双电源模式
2.4控制系统分析与论证
由于需要用大功率加热装置对水温进行调节,故采用带过零检测双向可控硅输出光电耦合器MOC3041构成后向控制电路。
3 系统原理框图
硬件组成框图如图4所示:
主要由AT89C51单片机、温度信号采集和调理、AD转换、数码显示电路、温度控制等部分组成。
图4 硬件框图
电源开启后,可以显示出实时的温度,并且可以判断出此时的温度是否需要对水进行加热操作
4硬件电路
4.1温度信号检测和调理电路
LM35D采用单电源供电模式如图2将采集到的电压信号送入运放uA741进行放大处理,如图5。
图5信号采集调理电路
4.2显示电路
显示电路由两片74LS164和两个数码管构成,为了PCB中作图的方便,故采用如图6的连接方式。
图6温度显示电路
时钟由单片机的P1.1提供,第一个数码管的数据由单片机的P1.0提供,第二个数码管的数据由第一个164的Q7提供。
164的时序图如图7所示。
图774LS164的时序图
4.3温度控制电路
温度控制电路由光电耦合器MOC3041和双向晶闸管BT137构成,硬件连接如图8。
图8温度控制电路
4.4AD转换电路
本部分电路由ADC0809和一些74系列芯片构成,其中74LS74用于对单片机的ALE信号进行分频作为0809的时钟,74LS373用做地址锁存实现单片机P0口的分时复用。
该部分硬件电路如图9所示。
图9AD转换电路
4.5主控系统电路
该系统由AT89C51构成,由5V电源供电,采用6Mhz的晶振。
主控系统电路主要承担显示及对温度的PID控制的核心引用,各功能通过软件软件实现。
图10为单片机的主控电路。
图10单片机主控电路
4.6整体PCB图见附件A
5软件部分
5.1主程序流程说明
主程序的任务主要是循环检测采集到的温度值,不断比较实现PID控制。
流程图如下:
图11主程序流程图
5.2各子程序模块流程
5.2.1显示部分
显示部分主要包括三个小模块:
第一、原始数据的拆分;第二、待显示数据查表;第三、待显示数据的输出。
数据分配表如图12,送待显示数据流程如图13,查表流程如图14
图13待显示数据输出流程图14查表程序流程
5.2.2中断程序部分
中断部分包括定时器中断(主要实现1秒刷新一次显示)和外部中断(检测液位。
为防止抖动,设置一个标志位,进入中断后判断标志位,如果一秒钟内没有出中断,则响应,否则不响应),流程图分别如图15和图16。
图15定时器中断流程图图16外中断流程图
5.3整体程序见附件C
6系统调试
6.1软件调试
调试所用软件:
KeiluVision2和Proteus7。
将编写好的程序用KeiluVision2汇编编译成hex格式的文件后导入Proteus7中的原理图(附件B)内。
结果正常显示,说明程序本身没有问题。
6.2硬件调试
调试所用工具:
直流稳压电源,示波器,万用表等。
6.2.1放大电路的调试:
将信号调理部分电路的输入端接地,调节电位器,使输出电压为零(用万用表毫伏档测量)。
输入一定的电压值0—1V范围内,观察电路的输出电压,调节电阻值,使输出为输入的5倍。
6.2.2显示电路的调试:
先写一个简单的显示程序,烧入单片机内,接好电路,观察显示是否正常。
6.2.3AD转换电路的调试:
写一个简单的控制ADC0809的程序,用示波器观察ADC0809所接受到的信号是否正确,如时钟信号、开始信号等、给定输入端一个电压,给OE端持续加高电平,使允许输出,用万用表或示波器测量各个输出引脚的转换情况,结果与计算值是否相符合。
6.2.4系统的整体调试:
将编写好的程序烧入单片机中,接好整体电路,观察输出结果是否正确。
调试中显示一直是99,最后去掉373和排阻,显示正常。
主要是因为加的排阻过小,只有330欧姆,而ADC0809向单片机送数据的时间有很短,所以,即使送入0也可能会被单片机认为是1,所以一直显示99。
6.2.5系统存在的问题:
由于实验调试时,只是观察led灯的亮灭变化,没有接上实际的光耦驱动大功率加热器件,而实际测试时,led灯的亮度不高说明驱动电流太小,因而在驱动光耦时还需加入74LS07以增大P1.2口的驱动电流,使之能够驱动光耦。
调试的过程中发现所购买的ADC0809的IN0输入端直接与地短接,所以,真正做成的系统用的是通道1。
又加上调试时去掉了排阻和74LS373,因而选地址时是直接把地址选择端接成了高低电平,虽然实现了功能但是与初衷不符。
参考资料:
【1】谢自美电子线路综合设计华中科技大学出版社
【2】张毅刚单片机原理及应用
附件A:
整体PCB图
附件B:
PROTEUS仿真图
附件C:
本系统所用程序:
DINBITP1.0
CLKBITP1.1
JRBITP1.2
F1BIT21H
ORG0000H
SJMPMAIN
ORG0003H
LJMPINT00
ORG000BH
LJMPINTDISP
ORG0030H
MAIN:
SETBEA
SETBEX0
SETBET0
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
mov20h,#10
SETBTR0;中断初始化
CLRF1
CJ1:
MOVR0,#30H
LCALLD1S
LCALLAD0809
MOVB,A
CJ2:
MOVR0,#31H
LCALLD1S
LCALLAD0809
CJNEA,B,COMP
LJMPCJ2
COMP:
CJNEA,#30H,N30
SETBCTRO
LJMPCJ1
N30:
JNCCOM96
SETBJR
LJMPCJ1
COM96:
CJNEA,#96H,N96
CLRJR
LJMPCJ1
N96:
JCCOMAB
CLRJR
LJMPCJ1
COMAB:
CJNEA,B,DR
LJMPCJ2
DR:
JCDOWN
RISE:
SETBJR
LJMPCJ1
DOWN:
CLRJR
LJMPCJ1
AD0809:
;数据采集转换
MOVDPTR,#0FFF8H
LOOP:
MOVX@DPTR,A
MOVR7,#0AH
DELAY:
NOP
NOP
NOP
DJNZR7,DELAY
MOVXA,@DPTR
MOVDPTR,#TBCD
MOVCA,@A+DPTR
MOV@R0,A
RET
DISP0:
;拆分
MOVR1,#40H
MOVA,@R0
MOVB,A
ANLA,#0F0H
SWAPA
MOV@R1,A
incR1
MOVA,B
ANLA,#0FH
MOV@R1,A
RET
DISP1:
;查表
MOVR0,#40H
MOVR1,#50H
MOVR7,#2
L1:
MOVDPTR,#SEGTAB
MOVA,@R0
MOVCA,@A+DPTR
MOV@R1,A
INCR0
INCR1
DJNZR7,L1
RET
DISP2:
;显示
MOVR0,#50H
MOVR1,#2
L2:
MOVA,@R0
MOVR7,#8
L3:
RLCA
MOVDIN,C
CLRCLK
SETBCLK
DJNZR7,L3
INCR0
DJNZR1,L2
RET
DISP:
PUSHACC
PUSHB
mov33h,r0
LCALLDISP0
LCALLDISP1
LCALLDISP2
movr0,33h
POPB
POPACC
RET
D100MS:
MOVR3,#200
DEL0:
MOVR4,#125
DEL1:
DJNZR4,DEL1
DJNZR3,DEL0
RET
D1S:
MOVR5,#10
DEL2:
CALLD100MS
DJNZR5,DEL2
RET
INT00:
JNBF1,LINT
CLRJR
SJMPRETURN
LINT:
SETBF1
LCALLD1S
RETURN:
RETI
INTDISP:
PUSHACC
PUSH