基于单片机的数字温度计设计

摘 要

数字温度计系统是一种快速直观的检测环境温度的设备,用于快速生成生活中对周围环境温度检测的设备,它也是快速提高各个测温效率的必要设备之一。为了满足生活中对数字温度计的这一需求,本文设计了一款精度高、可靠性高、操作简便的数字温度计系统。
本文利用STM32单片机控制DS18B20感温芯片,结合8段数码管、独立按键模块完成数字温度计功能,该系统不仅可以实时直观检测当前环境温度而且提供设置温度上限和下限,在超过温度上限或者降低到温度下限以后,报警灯开始闪烁。
通过对本系统的测试,结果表明本设计很好地实现了数字测温显示功能和超限报警功能。成熟的DS18B20模块增加了系统的稳定性,它不需经过模拟信号与数字信号的转换,只需要三线就可以完成温度的采集,简化了外围电路。高效的32位单片机STM32增加该系统的可扩展性。该系统不仅可以单独应用于生活中测量温度,还可以和其他模块连接起来组成一个全新的、更加高端的系统,例如恒温大棚温控系统,温度检测联动报警系统等。

关键词:数字温度计;温度传感器DS18B20;STM32单片机

1 系统总体方案

数字温度计系统要求实现实时温度的采集显示和监测。按照设计的要求,系统可分为三个部分,即对于温度数据的采集部分、对于温度检测的报警部分、对于数据的显示部分。其中的数据采集是运用单片机通过单线协议读取测温芯片数据,采集数据后通过显示部分对环境进行显示,方便用户读取实时温度,温度检测报警部分通过独立按键设置温度门限值,实时对比环境温度和门限温度,超出门限温度后控制LED闪烁报警。
本设计具体的系统方案如图1.1所示。
在这里插入图片描述

图1.1 系统设计方案

2 系统的硬件电路设计

2.1 单片机系统设计

2.1.1 单片机型号的选择

为了保证系统更好更快的运行,应该选择性价比高,可靠性高,低功耗的控制器。由于温度测量需要掉电保护来防止温度测量时出现太大误差,所以需要使用掉电存储数据的时候可以直接使用单片机内部的存储,因此应选择含有2k字节的EEPROM存储的单片机。基于此有以下方案可供选择:
方案一:使用STC89C51单片机作为主控制器。它采用8051内核,它是一个8位通用CPU外加一些闪存单元组成。用户代码可以通过串行通信口下载到芯片中,成本低是它的一个优势。
方案二:使用MSP430混合信号处理器作为它的主控单元,它是一个16位能量消耗超低的精简指令集[5] 的CPU。一般来说,需要使用电池供电的设备仪表使用该系列的单片机。开发难度一般比较大、价格稍微贵些。
方案三:使用STM32F103C8T6单片机作为主控单元,STM32F103是以低功耗、高性能、高稳定性32位的CONTESTM3内核的单片机,满足高稳定系和后续处理复杂控制的可扩展性。
MSP430单片机价格稍微贵些,且属于16位CPU,STC89C51单片机开发难度较低但是满足不了复杂程度高的处理,STM32系列单片机价格低,性能出众满足设计所需,因此本系统使用STM32系列单片机。

2.1.2 单片机的引脚说明

本设计是以STM32F103C8T6为最小系统作为主控单元,主要引脚说明见表2.1。它将所有的引脚以插针形式全部引出,板载晶振和复位逻辑,采用3.3V供电。该封装在焊接的时候可以采用一个IC插座进行先焊接然后焊接完成后再将芯片插到IC插座上这样做方便更换单片机单元。STM32F103一共具有48只引脚,其中可以用来控制的引脚有32个分别是PA0-15、PB0-15、PC13-15。这些引脚默认都可以当做GPIO来使用,可输入可输出,在这些引脚上同时也提供了第二功能,比如SPI,IIC,AD等等。
在这里插入图片描述

图2.1 STM32封装形式

表2.1 单片机引脚功能
在这里插入图片描述

2.2 显示模块设计

2.2.1 显示器件的选择

数字温度计为了方便用户读取当前实时温度,直观的展现出温度数据需要通过显示器件将温度信息显示出来,温度信息占用两位数字,不用太过复杂的显示器件,显示器件可以有以下选择:
方案一:使用LCD1602液晶显示屏[4]作为用于显示的设备。LCD1602液晶显示器将最多32个字母分成两行显示,也称为文字液晶显示器,显示数字、字母、符号或文字。LCD1602液晶显示器由大量的位图字符构成,每个位图字符可以显示一个字符,字符与每个位的每行分开,这称为字符间距和行间距。因此,图像在画面上不能很好地工作。而为了更完美的显示,该液晶需要采用控制器,大多使用的是HD44780,才能完成字符的功能。
方案二:使用LED数码管[5]作为系统的显示设备。其对于展示数字和字母有很好的效果,并且价位低廉。本设计显示温度只有两位数字位,因此直接将所有16位引脚可以直接接到单片机上,为了克服主控制器端口的电流输出不足问题,可以用三极管对电流进行放大后控制数码管。实现简单方便。
液晶显示屏造成资源浪费,且实现方式比较复杂,使用LED数码管可以满足本设计的功能要求。因此本系统采用LED数码管实现。

2.2.2 显示模块的工作原理

LED数码管分为共阳极和共阴极两种,共阳极就是把每位数码管的8个显示LED的正极连接到一起,用控制端把每个段的负极连接,控制端为低有效;共阴极就是讲每位数码管的8个显示LED的负极连接到一起,控制端连接每个段的正极,控制端为高有效,本设计采用共阳极设计;
因为单片机输出引脚的驱动电流太小,不足以驱动LED数码管或者驱动LED数码管太暗,就需要通过三极管增加驱动电流[6],现选型C9012 PNP型三极管,封装如2.6图所示,发射级接VCC,基级接GND,集电极接数码管公共脚。LED接线原理图如图2.7所示;
在这里插入图片描述

图2.6 C9012三极管封装

3 系统软件设计

3.1 软件开发环境的介绍

本应用程序使用Keil MDK μVision5[9]实现。Keil MDK μVision5是Keil公司对于ARM微控制器,尤其是ARM Cortex-M内核微控制器最好的一款集成开发工具。MDK-ARM包含了工业标准的Keil C编译器、宏汇编器、调试器、实时内核等组件。Keil MDK μVision5具有业行领先的ARM C/C++编译工具链,完美支持Cortex-M、Cortex-R4、ARM7和ARM9系列器件,包含世界上品牌的芯片。比如:ST、Atmel、Freescale、NXP、TI等众多大公司微控制器芯片。

3.2 系统重要函数

3.2.1 主函数设计

基本上所有的嵌入式程序都是以main()函数作为程序的入口点,main函数中最开始部分一般都是各个外围设备的初始化,然后主函数轮训处理任务。
本设计中首先对定时器、延时模块、LED数码管和按键的初始化,初始化一般是打开需要用到的资源的时钟,中断,分配GPIO等等。然后初始化DS18B20器件最后进入主轮询任务。流程图如图3.1,轮询任务中首先读取温度值,然后读取按键值并且做一些温度上下限的温度调节,再然后就是现实控制逻辑。

在这里插入图片描述

图3.1 系统流程图

4 系统调试

4.1 系统硬件测试

在系统的焊接过程中,上电前需要对系统进行开路和短路测试,尤其是电源的两极是不是有短路现象,找出一些具有方向的元件,查看是否有设计和焊接出错的。需要将实物电路板对照着原理图,首先检查每一个器件的位置以及焊接时候是否虚焊的地方。然后对于短路、短路、虚焊这些情况,只能采用仪器进行测量,如数字万用表,将数字万用表打到蜂鸣档,检测短路、断路、虚焊。
在使用万用表检测时,将数字万用表打到蜂鸣档,如果红笔和黑笔出现短路,万用表就会给出嘟嘟提示,根据这个原理可以用来检测电路短路、断路、虚焊。在需要检测元件或电线两端是否连接有两支笔时,蜂鸣器的声音是正常的,反之异常。
确认硬件没有问题以后就可以上电,注意观察电流值,如果电流值过大肯定电路板有短路的地方,用手可以触碰一下芯片,如果瞬间发热严重也代表有问题。
系统硬件调试遇到的问题:
(1)DS18B20过热
初次上电后,发现DS18B20芯片瞬间发热严重,断电检查电路发现官方器件原理图画法有问题,特别容易让用户搞反1脚和3脚,重新焊接问题解决。所以在画原理图部分时候一定要仔细核对各个引脚的相对位置。
(2)测温距离过短
在项目初期测温时测温距离过短,与设计预期相差甚远,后经过查阅资料发现连接DS18B20的总线电缆长度有限。当电缆每米扭转次数越多,通信距离越远。因此,在设计使用DS18B20的远程温度测量系统时,要充分考虑母线分布电容与阻抗的匹配问题。

4.2 系统软件测试

系统软件用Keil5集成开发工具编写,Keil5集成开发工具可以连接JLINK ARM调试工具,通过SWD调试口可以非常方便的进行系统软件在线调试。SWD调试口为串行线调试口,我们常见的JTAG有20pin接口,拥有太多的Pin接口自然会会导致PCB布线会非常麻烦,而支持SWD接口调试,只需要使用4个Pin口:GND、3.3V、SWIO、SWCLK。
程序同样可以通过SWD调试口下载到单片机中。
系统软件调试主要遇到以下问题:
(1)DS18B20双向口实时切换问题。
GPIO可以设置IO方向,在51单片机,如果需要输入则直接给引脚赋值1即可读取引脚数据,对于STM32单片机来说,如果是双向口,就不可以这样处理,最开始DS18B20一直没有发现回应,数据口是双向的,必须要随着逻辑变化GPIO口的方向,通过查找资料,用寄存器赋值方式简化了切换方向的方式,解决了问题。
(2)DS18B20返回信号问题。
在DS18B20测温程序设计过程中,系统向DS18B20发出温度转换的命令之后,程序通常会等待来自DS18B20的返回信号。但是如果DS18B20中有不不恰当的接触或错误的断线,会在读DS18B20时无法接收到返回信号,程序就会陷入死循环,不能继续进行。因此,调试前应该仔细检查硬件的连接。
在这里插入图片描述

图4.1 软件调试成功图

5 结 论

本篇论文提出了解决水银温度计等机械温度系统无法准确读取温度的问题,应用本设计用户可以准确的读取到当前的环境温度,对于工业设计来说可以很方便的应用数字温度数据,提高工业检测水平。
本设计是由STM32F103单片机、温度传感器、独立按键以及外围电路组成。温度传感器采用的是DS18B20数字温度传感器,它通过“一线总线”连接到单片机处理单元。单片机每经过100ms读取一次温度信息,同时将温度信息通过LED数码管展现给用户。用户也可以设置温度的最大值和最小值,经由单片机比对后生成报警信号。独立按键部分可以调整温度的最大值和最小值,它有两个独立的按键组成,可组合成多种功能,如:调节最大值,调节最小值,数值增加,数值减少,返回到温度显示等等;
本设计经过原理图绘制,硬件元器件采购、焊接以及软件程序的编码调试,各部分均达到了预期功能:实现了实时采集温度以及显示功能,独立按键实现了温度阈值的调整,实现了温度超出阈值以后报警显示温度功能。该温度系统可靠性高、抗干扰能力强,可以使用户精确的读取到当前的温度。应用本设计还可以扩展多种应用,如实时温度网络推送,恒温大棚温控系统等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值