0 引言
温度的测量和控制在日常生活和工业领域中具有广泛的应用,随着人们生活水平的大幅提高,对温度测量控制的精度和范围也有着更高的要求。在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题,这类控制对象惯性大,滞后现象严重,存在很多不确定的因素,难以建立精确的数学模型,从而导致控制系统性能不佳,甚至出现控制不稳定、失控等现象。PID控制方式控制稳定且精度高,但是控制对象的模型难以建立,并且当扰动因素不明确时,参数调整较复杂。本文采用DS18B20数字温度传感器,该传感器具有微型化、封装简单、低功耗、高性能抗干扰能力、测量范围广、强易配处理器等优点,可使系统测量更加精确,电路更加简单。实验测试证明,设计的样机系统测温控温精度均为0.1℃,测温控温的范围可达-55~+125℃,可应用于家用电器、汽车、冷库等领域。
1 系统总体方案
该系统将检测点的温度采集之后发送到单片机进行处理,并通过4×4矩阵按键进行温度上限和下限的设定。当温度超过设定值范围后,单片机将发出控制信号启动升温装置或降温装置,使温度恒定在一定的范围。系统主要包括温度采集模块、4×4行列式矩阵按键模块、主控模块、温度控制模块、测温控温显示模块等,其结构框图如图1所示。
2 系统硬件设计
2.1 温度检测模块
该系统温度测量部分采用DALLAS公司生产的一线式数字温度传感器DS18B20,它具有微型化、低功耗、高性能抗干扰能力、测量范围广、强易配处理器等优点,DS18B20可直接将温度转化成串行数字信号给单片机处理,它具有三引脚TO-92小体积封装形式,温度测量的范围为-55~+125℃,测温分辨率可达到0.062 5℃。
2.2 4×4行列式按键模块
该系统采用4×4行列式矩阵按键输入,其中除了0~9这10个相应数字温度按键外,还设计了温度重设按键、确定按键、零下温度选择按键和小数点按键等用来控制温度。该系统采用的是非编码式键盘,按键的识别采用的是全局扫描法。
2.3 主控模块
该设计采用AT89C51单片机作为主控芯片。该芯片是一款高性能的CMOS 8位微处理器,自带4 KB闪存,产品性价比高,满足系统的设计需求。该系统中主控芯片AT89C51不断的对采集到的温度信号与输入的控制温度进行比较,若超出设定范围则启动升温或降温装置,直至温度到达设定的范围区间内。
2.4 温度控制模块
该系统温度控制电路中,单片机通过三极管的通断控制继电器,达到控制电热器的目的。当温度低于设定温度下限时,单片机发送低电平信号经过74LS04非门电路后变为高电平,使NPN型三极管导通,继电器使电源与电热器接通,电热器加热,温度慢慢升高。当温度高于设定温度上限时,单片机发送高电平信号经过74LS04非门电路后变为低电平,使NPN型三极管截止,继电器使电源与制冷系统接通,制冷系统工作,温度慢慢降低。当继电器突然断电时,会产生很大的反向电流,反接在三极管两端的二极管可将反向电流分流,达到保护三极管的作用。
2.5 测温控温显示模块
该设计显示部分采用2个4位8段共阳极数码管7SEG-MPX4-CA。一个数码管用于显示当前环境温度,另外一个数码管用于显示设定温度。为了节省I/O口,本设计通过74LS04双2线-4线译码器连接两个数码管的位码。
3 系统软件设计
该设计软件部分采用模块化设计,通过Keil公司开发的μVision3编译器用C51语言编写,主要包括温度检测,按键驱动和温度控制等。其中温度检测包括DS18B20初始化子程序、DS18B20读取子程序、DS18B20写子程序、DS18B20转换温度子程序、DS18B20温度采集子程序、采集温度数码管显示子程序等;按键驱动包括矩阵按键驱动子程序、按键显示子程序等;温度控制包括输入键值处理子程序、温度对比控制子程序等。主程序流程图如图2所示。
4 结语
本文设计的温度测控系统,采用DS18B20数字温度传感器实时采集环境温度,采用4×4矩阵按键自由设定温度上限和下限,采用AT89C51单片机处理采集的温度数据和发送控制温度信号,将环境温度和设定温度通过数码管7SEG-MPX4-CA实时显示。设计的样机系统经实验表明,测温精度和控温精度均高达0.1℃,测温范围为-55~125℃,并可在-55~128℃范围内进行温度控制。温度控制系统在工业生产和日常生活中,主要是要求在一定的温度范围内保证温度恒定,并要求一定的精度,因此该系统可应用于家用电器、工业、汽车、冷库等许多领域。
关键字:AT89C51 DS18B20 数码管 温度测控
引用地址:
基于AT89C51单片机的温度测控系统设计
推荐阅读最新更新时间:2024-03-16 12:35
51单片机C语言程序(四)键盘 数码管 跑表程序
程序一 数码管前三位显示一个跑表, 从000到999之间以1%秒的速度运行, 当按下一个独立键盘时跑表停止, 松开手后跑表继续运行(用定时器设计表) #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; sbit s2=P3^4; uchar code table ={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71, 0x
[单片机]
AVR单片机控制DS18B20的示例C程序
#include mega48.h #include delay.h #include nokia3310.h #include monobus.h unsigned char data_H, data_L,wendu; unsigned int data_T; void main(void) { lcd_init(); //lcd初始化 lcd_cls(); //清屏,光标回位 while(1) { monobus_init(); //单总线复位 write_monobus(0xCC);
[单片机]
51单片机学习之路(四)-定时器
写在前面:以下涉及到的程序及电路图不保证为最优方案,会存在很多不足之处,望谅解。另外,C51的内容是在整理很久之前所学的知识,可能会存在错误,欢迎指正。 正文 学习目标:学会使用51单片机中的定时器0。 学习内容: 用定时器0控制LED灯的亮灭 用定时器在数码管上实现计时 程序一:控制LED灯 功能要求:运行程序后连接在单片机上的LED灯以1s的频率闪烁。 定时器寄存器简单介绍 在本次内容中将使用定时器0,定时器1的使用方式与定时器0大体相同,以下简单介绍一下将要使用到的几个中断寄存器,具体介绍请以官方数据手册为准: TMOD:定时器模式寄存器,大致分为4个模式: 00:定时器0或1选择13位定时/计数器模式,该模式下TL
[单片机]
嵌入式频率计的设计
1 引 言 本频率计的设计以AT89C51单片机为核心,利用他内部的定时/计数器完成待测信号周期/频率的测量。单片机AT89C51内部具有2个16位定时/计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。在定时器工作方式下,在被测时间间隔内,每来一个机器周期,计数器自动加1(使用12 MHz时钟时,每1μs加1),这样以机器周期为基准可以用来测量时间间隔。在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。外部输入在每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所
[测试测量]
温度DS18b20与PIC单片机通讯程序
ORG PIC54 GOTO MAIN ORG 0 ;---------------------- ;---------------------------- DELAY22 MOVLW D'200' ; DELAY 2*250=500mS MOVWF COUNT1 DE32 MOVLW D'250' ; 8*250=2mS MOVWF COUNT2 DE42 NOP ; 1+2+1=5uS DECFSZ COUNT2,1 GOTO DE42 DECFSZ
[单片机]
基于AT89C51型单片机的号音自动播放器设计
1 引言 机关、院校日常作息需要计时和号音提示,笔者利用AT89C51型单片机和LM386型音频功率放大器构成了自动计时和号音播放器,成本低,效果好,值得推广。 2 AT89C51的主要特性和引脚功能 AT89C51是带4K字节闪烁可编程可擦除只读存储器(EPEROM)的低电压、高性能CMOS 8位微处理器(俗称单片机)。该单片机与工业标准的MCS-51型机的指令集和输出引脚兼容。AT89C51将多功能8位CPU和闪烁存储器组合在单个芯片中,为很多嵌入式控制提供了灵活性高且价格低廉的方案。 AT89C51的主要特性如下: 寿命达1000写/擦循环; 数据保留时间:10年; 全静态工作:0Hz-24MHz; 三
[应用]
基于AT89C51单片机的数码管循环点亮0到9(Keil+Proteus+C语言)
要求描述: 选用AT89C51单片机,绿色7段共阴极数码管,使用C语言实现 仿真图 代码 #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE = { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f }; void DelayMS(uint x) { uchar t; while(x--) for(t=120;t 0;t--); } void main() { u
[单片机]
PIC16F877A例程---DS18B20
#include pic.h #include pic1687x.h __CONFIG(0x3F32); //芯片配置字 #define LCDRS RB2 #define LCDRW RB1 #define LCDE RB0 #define LCDDATA PORTD #define DS18B20 RE0 #define TRIS_B20 TRISE0 void LCD1602_INIT(void); void WRITE_LCD_CMD (char cmd); void WRITE_LCD_DATA (char data);
[单片机]