基于继电器的水温控制系统的实现
基于继电器的水温控制系统
摘 要: 单片机在检测和控制系统中得到广泛的应用, 温度则是系统常需要测量、控制和保持的一个量。 本文从硬件和软件两方面介绍了基于继电器的温度控制系统的设计,对硬件原理图和程序框图作了简洁的描述。
关键词: 单片机;温度传感器;温度;测量
设计要求:
1.用51单片机控制水槽的加热温度。从现在的室温加热到目标温度40℃。
2.加热棒功率2KW ,控制器为继电器。
3.要求在尽可能短的时间内将水从室温加热到目标温度,并且能够保持在目标温度附近的一定精度范围内。
一 工作原理
该水温控制系统主要由单片机控制系统、前向通道(温度采样转换电路)、后向通道(温度控制电路)、键盘显示电路等四部分组成,其总体设计框图如图1所示。
图1 单片机控制系统原理框图
单片机控制系统原理如图1所示,其工作原理是单片机依次查询各传感器的输出信号(水温模拟传感器输出的模拟信号需要经过温度传感器进行模数转换);然后对输入信号进行相应处理后通过显示模块输出。
单片机控制系统是以单片机为核心,配合温度传感器,信号处理电路,显示电路,输出控制电路组成,软件选用汇编语言编程。单片机可将温度传感器检测到的水温模拟量转换成数字量,显示于显示器上。功能由硬件和软件两大部分协调完成,硬件部分主要完成各种传感器信号的采集、转换,各种信息的显示;软件主要完成信号的处理及控制功能等。
显示电路
加热装置
测试部分 键盘输入
控制部分
前向通道是系统的温度采样转换电路,它主要包括传感器、信号调理系统、A/D转换芯片。其中A/D转换芯片是整个前向通道的核心。
后向通道是系统的温度控制电路,在单片机控制系统中,单片机总是要对被控制对象实现控制操作,因此,在这样的系统中,需要有后向通道。后向通道是计算机实现控制运算处理后,对被控对象的输出通道接口。系统的后向通道是一个输出通道,其特点是弱电控制强电,即小信号输出实现大功率控制。
键盘显示电路既是用键盘输入的方式来控制单片机,以实现人们的需求。键盘功能主要有按键识别、去抖、重键处理、发送扫描码、自动重发、接收键盘命令、处理命令等。
二系统设计基本方案
确定单片机控制系统总体方案是进行系统设计最关键一步,总体方案的好坏直接影响整个控制系统的性能及实施细则,其设计主要是根据被控对象的任务及工艺要求而确定。
根据题目要求系统模块可以划分为:控制器模块,加热装置模块,温度采集模块,键盘与显示模块四个部分。
2.1 控制器模块设计方案
根据题目要求,控制器主要用于对温度测量信号的接受和处理,控制电热丝和风扇使控制对象满足设计要求,控制显示电路对温度值实时显示以及控制键盘实现对温度值的设定等。控制器模块可以选择以下方案:
采用单片机89C51为核心。采用了温度传感器DS18B20采集温度变化信号,并通过单片机处理后去控制温度,使其达到稳定。使用单片机具有编程灵活,控制简单的优点,使系统能简单的实现温度的控制及显示,并且通过软件编程能实现各种控制算法使系统还具有控制精度高的特点。
89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。
1.主要特性:
与MCS-51 兼容
4K字节可编程闪烁存储器
寿命:1000写/擦循环
数据保留时间:10年
全静态工作:0Hz-24Hz
三级程序存储器锁定
128*8位内部RAM
32可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内振荡器和时钟电路
2.管脚说明:
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电
流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC 指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
3.振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
4.芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE 管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
5.结构特点:
8位CPU;
片内振荡器和时钟电路;
32根I/O线;
外部存贮器寻址范围ROM、RAM64K;
2个16位的定时器/计数器;
5个中断源,两个中断优先级;
全双工串行口;
布尔处理器;
2.2 加热装置模块设计方案
本设计使用功率2KW的加热棒进行加热,控制加热棒的功率即可以控制加热的速度。对加热装置模块可以选择以下方案:
采用继电器控制。使用继电器可以通过较高的电压和电流,在正常条件下,工作十分可靠。继电器无需外加光耦,自身即可实现电气隔离。这种电路无法精确实现电热丝功率控制,电热丝只能工作在最大功率或零功率,对控制精度将造成影响。但可以由多路加热丝组成功率控制,由单片机对温差的处理实现分级功率控制,提高系统动态性能。采用继电器控制省去光耦和交流过零检测电路,在软件上选用适当的控制算法,同样可
以达到较好的效果。
2.3 温度采集模块设计方案
本设计温度信号为模拟信号,要对温度进行控制和显示,所以要把模拟量转换为数字量。该温度采集模块可以选择以下方案:
采用数字温度传感器DS18B20。DS18B20为数字式温度传感器,无需其他外加电路,直接输出数字量。可直接与单片机通信,读取测温数据,电路简单。DS18B20与传统的热敏电阻相比,他能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,因而使用DS18B20可使系统结构更趋简单,可靠性更高。它在测温精度、转换时间、传输距离、分辨率等方面带来了令人满意的效果。
2.4 键盘与显示模块设计方案
为了方便的修改控制参数,系统设计了键盘与显示电路。显示器的扫描方式一般有静态显示和动态显示,对于多位LED 数码显示器,通常采用动态扫描方法,即逐个地循环地点亮各位显示器。这样虽然在任一时刻只有1位显示器被点亮,但是由于人眼具有视觉残留效应,看起来与全部显示器持续点亮的效果基本一样(在亮度上要有差别)。静态显示显示多位LED 时,硬件电路结构比较复杂,为简化电路结构,电路中没有采用译码器,直接用单片机程序进行编码输出,这样使硬件结构清晰。
VCC
1
2345674L S 245
B0B1B2B3B4B5B6B7
A0A1A2A3A4A5A6A7G DIR
GND VCC
a b c d e f g dp
Vcc a b c d e f g dp Vcc a b c d e f g dp Vcc a b c d e f g dp Vcc a b c d e f g dp Vcc a b c d e f g dp
Vcc PNP
PNP
PNP
PNP
PNP
PNP
P0
P2
图2显示电路
此电路中的LED 数码显示器是8段共阳极接法,所以显示0、1、2、3、4、5、6、
7、8、9时分别对应编码C0H、F9H、A4H、B0H、99H、92H、82H、F8H、80H、90H,要显示小数点时,只需再将相应的编码的最高位置0。
由于LED显示器的段电流为8mA左右,所以不能由单片机直接驱动,因此接上驱动器74LS245 八双向总线收发器,而LED显示器的公共端的驱动电流较大,8段全亮时需约40~60mA。因此在单片机与LED的公共端之间接上三极管做为电流驱动器以提高驱动能力。此三极管采用的是PNP型。
使能端G
方向控制DIR操作
L L B总线数据传入A总线
L H A总线数据传入B总线
H X A总线与B总线隔离
表1 74LS245输入与输出
键盘采用非编码键盘结构,目的为了简化硬件电路,图3和4表示了此4*4行列式键盘的结构示意图。4*4表示有4根行线和4根列线,在每根行线和列线的交叉点上均匀分布1个单触点按键,共16个按键。其中定义0~9十个数字键,小数点,开/关键,显示参数键,设定值键。
P1.4 P1.5 P1.6 P1.7
P1.0 第一行
P1.1 第二行
P1.2 第三行
P1.3 第四行
第1列第2列第3列第4列
图3键盘示意图
1
2
3
456789.开/关修改确定切换无
S4
S8
S12
S16
A1A2A3A4
B4
S3S7S11S15
A1A2A3A4
B3
S2S6S10
S14
A1
A2A3A4
B2
S1
S5S9S13
A1
A2A3A4
B1
A1A2A3A4
B1B2B3B4
图4键盘电路
三 系统各模块的总体设计方案
继电器随着设定的温度,依据情况跳变。加1键Up 键(P1.1),当按下 Up ,调节当前温度。减1键Down 键(P1.2),当按下Down ,调节当前温度。
图5 系统基本框图
系统的基本框图如上图5所示。CPU 首先写入命令给DS18B20,然后DS18B20开始转换数据,转换后通过89C51来处理数据。数据处理后的结果就显示到数码管上。另外由键盘设定温度值送到单片机,单片机通过数据处理发出温度控制信息到继电器。DS18B20可以被编程,所以箭头是双向的。
Output LCD 数码管
继电器
DS18B20
键盘输入
89C51
Input
四 硬件设计与实现
该系统设计目的为一实验系统,系统设计要求:
用51单片机控制水槽的加热温度。从现在的室温加热到目标温度40℃。 加热棒功率2KW ,控制器为继电器。
要求在尽可能短的时间内将水从室温加热到目标温度,并且能够保持在目标温度附近的一定精度范围内。
本系统的执行方法是循环查询执行的,键盘扫描也是用循环查询的办法,各模块关系图如图6所示。
图6 系统硬件模块关系图
4.1 温度采集部分设计
本系统采用半导体温度传感器作为敏感元件。传感器我们采用了DS18B20单总线可编程温度传感器,来实现对温度的采集和转换,直接输出数字量,可以直接和单片机进行通讯,大大简化了电路的复杂度。DS18B20应用广泛,性能可以满足题目的设计要求。
4.2 DSI8B20的测温功能的实现
其实测温电路的实现是依靠单片机软件的编程上。 当DSI8B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的0,1字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.25℃/LSB 形式表示。温度值格式如表1所示,其中“S ”
单片机初始化模块
继电器控制模块
键盘扫描模块(扫描有无Enter 键按下)
测到温度值,存放到Buffer 中
处理温度值,换算成BCD 码
温度显示模块
为标志位,对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。DSI8B20完成温度转换后,就把测得的温度值与TH做比较,若T>TH或T 4.3 温度转换算法及分析 温度控制算法 通常,温控都采用偏差控制法。偏差控制的原理是先求出实测温度 对所需温度的偏差值,然后对偏差值处理获得控制信号去调节电阻的加 热功率,以实现对温度的控制。在工业上,偏差控制又称PID 控制,这 是工业控制过程中应用最广泛的一种控制形式,一般都能收到令人满意 的效果。 温度控制程序框图 温度控制程序的设计应考虑如下:1)键盘扫描、键码识别和温度显示; 2)温度采样、数字滤波;3)数据处理;4)PID 计算、温度标度转换 主程序框图(右图) 本程序包括设置有关标志、暂存单元和显示缓冲区清零、T0 初始化、CPU 开中断、温度显示和键盘扫描等程序。 4.4 系统总体电路图设计 以热电偶为检测元件的单片机温度控制系统电路原理图如图7所示 图7 单片机温度控制系统电路原理图 五系统软件设计 系统的软件设计采用汇编语言,对单片机进行实现各项功 能。 主程序对模块进行初始化,而后调用读温度、处理温度、 显示、键盘、和继电器各模块。用的是循环查询方式,来显示 和控制温度。 本软件设计采用循环查询来处理各个模块,温度是缓慢变 化量,所以可以满足性能要求。主程序流程图如图8所示。 5.1系统程序流程图 系统程序流程图如图8所示。图8系统程序流程图5.2 温度部分软件设计 DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传 输。其工作时序包括初始化时序、写时序和读时序。故主机控制DS18B20完成温度转换必须 经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最 后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒, 然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主 CPU收到此信号表示复位成功。程序主要函数部分如下: (1)初始化函数 //读一个字节函数 ReadOneChar(void) {unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) 开始 初始化 启动DS18B20 读温度 计算温度 LED 显示 { DQ = 0; // 给脉冲信号dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay(4);} return(dat);} //写一个字节函数WriteOneChar(unsigned char dat) {unsigned char i=0; for (i=8; i>0; i--) {DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat>>=1;}} (2)读取温度并计算函数ReadTemperature(void) {unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9 个寄存器)前两个就是温度a=ReadOneChar(); b=ReadOneChar(); t=b; t<<=8; t=t|a; tt=t*0.0625; t= tt*10+0.5; //放大10 倍输出并四舍五入---此行没用 (3)主程序部分见附录 结束语 本文的温度控制系统只是单片机广泛应用于各行各业中的一例,通过本次设计,对单片机的应用有了初步了解,对以前学过的模电数电知识又温习了一遍。单片机的应用越来越广泛,由于单片机的运算功能较差,往往需要借助计算机系统,因此单片机和PC机进行远程通信更具有实际意义。 参考文献 [1]耿方志. 温度控制系统的设计. 电子世界, 2003,12(5).37-38 [2]张培仁. 十六位单片微型处理器原理及应用.清华大学出版社,2005 [5]刘震,张宗勇,肖敬若. 数字式自动控温热水器的设计[J]. 科学技术与工程,2004 附:程序代码 ===============主程序=============== ORG 0000H LJMP MAIN ORG 0003H LJMP INT0 ORG 0030H MAIN: MOV SP,#70H ;置初值 CLR P1.7 MOV R0,#40H SETB PSW.4 SETB PSW.3 SETB IT0 SETB EA SETB EX0 MOV TMOD,#20H ;波特率9600 MOV TH1,#0FDH MOV TL1,#0FDH SETB TR1 MOV SCON,#50H SETB TI CLR 30H CLR 01H SETB P1.7 CLR P1.6 CLR P1.5 MOV DPTR,#0BFFFH MOV A,#00H MOV 2EH,#0 MOV 2DH,#0 MOV 2CH,#0 MOV 2BH,#0 MOV 2AH,#0 MOV 29H,#0 MOV 62H,#0 LOOP: MOV DPTR,#0BFFFH MOVX @DPTR,A ;启动A/D转换 CLR 00H WAIT: LCALL XUAN CHAXUN:JNB P1.3,LOOP1 ;调整 JNB P1.4,LOOP2 MOV A,29H CJNE A,2CH,AA LJMP XXX ;正常 AA: JNC ERRO ;上限低于下限,跳转XXX: SETB EX0 MOV A,@R0 LCALL XUAN LJMP WAIT ERRO: MOV 63H,#0EH ;显示“ERRO“MOV 62H,#15H MOV 61H,#15H MOV 60H,#0H SETB 30H SETB 01H EEEE: LCALL DELAY JNB P1.3,XX1 ;是否重新调整 JNB P1.4,XX2 LJMP EEEE XX1: LJMP LOOP1 XX2: LJMP LOOP2 ;==========显示数据转换========= Xian: MOV A,@R0 MOV B,#100 MUL AB MOV R3,A MOV A,B MOV B,#10 DIV AB MOV R1,#62H MOV @R1,A DEC R1 MOV @R1,B MOV A,R3 MOV B,#10 MUL AB DEC R1 MOV @R1,B CLR 30H ACALL DELAY MOV A,2EH CJNE A,62H,E1 MOV A,2DH CJNE A,61H,E1 MOV A,2CH CJNE A,60H,E1 LJMP E2