基于单片机的温度控制系统设计
摘要: 最近这些年,随着科学技术的不断发展和进步,单片机技术通过在各行各业中的应用也日臻完善。而温度测控系统也因单片机所特有的强大处理能力、功耗低以及体积小等优点向着小型化和智能化发展。本设计以STC89C52单片机为主控制芯片,外接温度传感器DS18B20以及外接加热制冷元件组成温度控制系统。通过该系统,人们可以加深对温度控制理论的理解和研究。
本文对比了几种当前比较经常使用的温度控制系统的各自特点,决定通过程序设定温度上下限值,选择AT240C2芯片保存设置的温度值。并且详细讨论了该温度控制系统的硬件构成,软件的设计以及各串口电路设计。其中,硬件部分包括电源模块、温度采集模块、串行通信模块、测试模块以及外设控制模块,除外设控制模块外其余各模块均进行了原理图设计;软件部分主要针对各模块通信协议进行了程序编写。为了充分保证系统的稳定性,同时也采取了相应措施。配备了一组继电器来控制执行单元,使温度能在一定范围。该系统具有良好的稳定性,可行性和鲁棒性,可以进行使用和推广。
关键词: 单片机 温度控制系统 DS18B20
Design of Temperature Control System Based on Microcontroller
Abstract:With the continuous development and progress of science and technology nearly, SCM technology through all walks of life in the application is also improving. The temperature measurement and control system is also a small and intelligent development because of its unique powerful processing ability, low power consumption and small size. The design of STC89C52 microcontroller based control chip, an external temperature sensor DS18B20 temperature measurement system. Through this system, people can deepen the understanding and research of temperature control theory.
In this paper, the characteristics of several current temperature control systems are compared, and the digital PID temperature controller is considered. And discussed the temperature control system’s hardware constitution, the software design and each serial port circuit design in detail. The hardware includes the power supply module, temperature acquisition module, serial communication module, test module and peripheral control module, control module and other peripherals in each module are principle diagram design and PCB production; in the part of software modules of communication protocol and control algorithm for the program. In order to ensure the stability of the system, corresponding measures have been taken. A set of relays is provided to control the execution unit so that the temperature is within a certain range. The system has good stability, feasibility and robustness, and can be used and popularized.
Key words:microcontroller temperature control system DS18B20
目录
第1章 绪论 1
1.1 本课题研究的背景与意义 1
1.2 温度控制系统的发展与现状 1
1.2.1 国内发展状况 1
1.2.2 国外发展状况 2
1.3 系统总体设计方案 2
1.3.1 系统性能及特点 2
1.3.2 系统总体架构 3
1.3.3 主要器件的选用 4
1.4 本文主要工作 4
第2章 温度控制系统硬件设计 5
2.1 主控芯片STC89C52简介 5
2.1.1 STC89C52芯片特性 5
2.1.2 时钟模块 5
2.1.3 Digital I/O模块 6
2.1.4 USART模块 6
2.1.5 JTAG模块 7
2.2 系统硬件总体结构 8
2.3 温度数据采集电路设计 8
2.3.1 DS18B20芯片简介 8
2.3.2 温度数据采集电路原理图设计 10
2.3.3 温度数据采集模块PCB设计 10
2.4 串行通信接口电路设计 11
2.4.1 TUSB3410芯片简介 11
2.4.2 串行通信接口电路原理图设计 11
2.4.3 串行通信接口PCB设计 12
2.5 JTAG接口电路设计 12
2.6 外设控制电路设计 13
第3章 温度控制系统软件设计 15
3.1 系统软件总体结构 15
3.2 主程序模块设计 16
3.3 温度数据采集模块设计 17
3.4 串行通信模块设计 20
3.5 控制模块设计 21
第4章 用户操作界面设计 23
4.1 可视化编程工具VB简介 23
4.2 数据接收显示模块设计 23
4.3 控制信息输入模块设计 24
4.4 温度告警模块设计 26
4.5 安装文件制作 27
4.6 使用说明 27
第5章 系统调试 30
5.1 IAR Systems开发环境 30
5.1.1 创建项目 30
5.1.2 导入源程序 30
5.1.3 仿真参数设置 31
5.1.4 下载源程序 31
5.2 调试结果及数据分析 33
结论 37
致谢 38
参考文献 39
第1章 绪论
1.1本课题研究的背景与意义
温度作为一个极为重要的物理常量,其反映了物体的冷热程度,人们的生产和生活很多情况也会受到温度的影响。温度的测量和控制技术已经广泛应用到了各个领域,工农业的生产和其他科研项目很多都需要对温度进行有效的监控。
温度控制系统前提是温度的采集测量,根据测量时是否接触被测物体可以分为非接触式和接触式测量法两类。其中,非接触式测量就是不和被测物体接触,它的特点是测温上限比较高,但是误差较大;接触式测量与之相反,就是接触被测物,其特点是直观可靠,然而产生的误差不可控。在实际的测量控制中,首先需要解决的问题就是怎样快速实时的对温度采样,与此同时还要保证数据传输的正确,并能对所测温度对象进行较为精确的控制。鉴于当前温度测控系统正朝着智能化发展,嵌入式的温控系统也会越来越重要。
本文将微控制器与温度控制系统相结合,设计一个可用于测量温度并进行温度调节的温度控制系统。可用于室温检测控制、水温控制调节、空调的恒温控制等小型系统的环境温度测控。该系统具有低功耗、转换速度快、操作便捷、效果显著的特点。同时具有良好的稳定性和鲁棒性,并且软件部分兼容性较强。
1.2温度控制系统的发展与现状
1.2.1国内发展状况
温度控制系统在我国起步较晚,20世纪80年代科学家才开始涉及这一方面研究,所以,总体来说,我们国家在温控方面是落后于西方发达国家的。尤其是在温度控制器方面,我国很多主流产品主要以点位控制为主,但是这种方式有一定弊端,那就是难以对时变和滞后的温度系统加以控制。与此同时,我国的温度测控现状远远没有达到工厂化的程度,具体体现在没有可靠的自正定软件。并且,我国温控系统的装备配套能力也不强,致使很多控制参数需要人工现场根据人工经验调试。可喜的是,国家也在大力开发创新,总体技术也在从简单应用向实用化过度。
1.2.2国外发展状况
国外对温控技术研究较早,大概始于20世纪70年代。首先出现的是模拟的组合仪表进行数据信息的记录和控制,后来在80年代左右出现了分布式的控制系统,而现在绝大多数发达国家已经在自动化的基础上向着无人化发展,并且在参数自整定方面也取得很大成果。在温控系统中处于重要低位的温度传感器方面,从赛贝发明热电偶传感器到后来西门子发明的铂电阻以及半导体热电偶传感器,再到现在的智能温度传感器,显然可以发现国外在温度传感器方面也是远远超过中国。目前国外的温控系统具备以下特点:一、适用于复杂的温度控制系统的控制,二、普遍采用模糊控制,适用范围广,三、具备参数自整定功能,四、控制精度高同时有很强的抗干扰能力以及良好的鲁棒性。
1.3系统总体设计方案
1.3.1系统性能及特点
本文中讨论的是温度测量控制系统的设计与制作。温度测量的速度和精度、系统控制的实时性和准确性、操作部分的功能设置和难易程度以及整个系统工作时的稳定性和功耗是本设计需要权衡的几个重要方面。本次设计的温控系统的性能及特点可以概括为以下几点:
(1)能够实现对被测对象实时温度的测量(约每秒更新一次),并且通过PC端的操作界面显示出当前温度值。
(2)操作人员可以方便、简单地通过PC端操作界面设定控制期望的温度值,并可限制在一定的变化范围内。系统能够自动根据设置,通过加热或者通风来调节被控对象的温度。
(3)能够实时监测被控对象温度是否正常。如果系统监测到被控对象的温度超过限定值,则PC端操作界面将产生报警并且提示温度过高还是温度过低。
(4)上位机和下位机通过USB接口通信,易于接口扩展,可用于笔记本。
(5)系统功耗低,可靠性高,不容易出故障。
(6)控制软件安装方便并且对运行环境要求低。
1.3.2系统总体架构
根据系统设计的特点和要求,系统的总体框图如图1-1所示。
图1-1系统总体框架图
系统主要分为以下几个模块:
主控制芯片模块:该模块是温度测量控制系统的核心部分,它的主要任务包括存储和处理采集到的温度数据、控制通讯端口的数据传输、调节外设的运行状态和功能扩展等。
温度采集模块:该模块是温度测量的重要组成部分,其测量范围、测量精度和转换时间是衡量系统测量性能优劣的重要指标,它的主要任务是采集温度值并将采集到的温度模拟量经A/D转换成数字量后输出。
通讯接口模块:该系统的通讯接口包括串行通信接口、JTAG测试接口和普通I/O口三个部分。串行通信接口用于主控制芯片与主机PC的数据传输。测试接口用于程序设计过程中对系统进行调试和验证。普通I/O口则主要用于主控制芯片启停温度传感器、读入温度数字量以及输出对加热器、散热器或其他扩展外设的控制信息。
外部模拟电路:主控制芯片通过I/O口输出对外围设备的控制信息。该模块主要任务是将主控制芯片输出的这些数字信号转换成相应的模拟信号输出,实现对外围设备的控制功能。
人机交互模块:该模块的主要任务是将温控系统的所有功能融合到主机PC的可视化界面上来,方便用户通过计算机进行操作和控制。
1.3.3主要器件的选用
主控芯片选用STC89C52,因为其内部资源相当丰富同时体积小、功耗低,但是却具备很强大的性能,可以在主控模块轻松进行扩展,实现其他功能。温度传感器选用达拉斯公司生产的单总线数字式温度传感器DS18B20,此传感器可以把温度信号直接转换为9~12位数字量,并且温度转换时间控制在1秒。外部需要的加热和制冷装置,通过固态继电器执行通断开关。
1.4本文主要工作
本论文主要以低功耗单片机STC89C52和单线数字式温度传感器DS18B20为研究对象,对温度控制系统进行探索和设计。主要考虑到便于操作和控制结果直观,采用人机操作界面。同时,注意实用性和成本因素。具体如下:
(1)查阅国内外温度控制的研究成果,了解温度控制的发展现状和前景。
(2)均衡现有器件资源和需实现的功能要求制定通用温度控制系统的总体设计方案。
(3)完成系统的硬件设计和制作,细节如下:
(a)单片机温度采样电路。
(b)USB转UART接口电路。
©外设控制电路(器件为风扇和加热管)。
(4)完成系统的软件设计和制作,具体如下:
(a)主程序及初始化模块。
(b)采集DS18B20温度数据模块。
©单片机UART发送与接收数据模块。
(d)控制运算模块。
(5)进行系统的整体仿真与调试,验证系统运行时的准确性和稳定性。
第2章 温度控制系统硬件设计
2.1主控芯片STC89C52简介
2.1.1 STC89C52芯片特性
STC89C52是宏晶公司推出的内部资源丰富的低功耗8位微控制器,结合了传统的51单片机优点,因为它具有8位CPU,所以可以给嵌入式系统提供各种灵活有效的解决措施。STC89C52各引脚如图2-1所示,芯片特性如下:
(1)工作电压:可选5.5V~3.3V或3.8V~2.0V
(2)可选择节电模式
(3)4个外部中断
(4)3个16位定时器/计数器
(5)工作频率:0~40MHz
(6)片上集成512字节的RAM
(7)通用异步串行口(UART),还可用定时器如软件实现多个UART
(8)工作温度在-40~+85℃
图2-1STC89C52引脚图
本设计中涉及到的内部资源主要包括基础时钟模块、串行通讯接口UART(P2.4、P2.5)、I/O(P2口)和JTAG测试模块。
2.1.2 时钟模块
STC89C52单片机由于输出频率不同,可以产生三种时钟,分别是主系统时钟,子系统时钟和辅助时钟。因为系统整体功耗和系统频率成正比,因此,不同的时钟模块,因为其不同的频率,从而不断变换,降低了系统功耗。
2.1.3 I/O模块
STC89C52有32位I/O口,均可单独编程。本设计中使用P2口,其中P2.0和P2.1分别用来控制加热器和散热器、P2.3用来采集温度数据、P2.4和P2.5用来和上位机串行通讯。
2.1.4USART模块
STC89C52的串行通信由硬件直接实现,用户只需设置相关寄存器即可实现串行通信的功能。图2-2是USART模块的硬件框图。
图2-2 USART模块硬件框图
此模块可以分为四个部分,分别是波特率部分和接收部分以及发送部分、接口部分。发送和接收两个寄存器的移位时钟均由波特率发生器产生。USART有接收和发送两个独立的中断源,使用两个独立的中断向量用于接收和发送中断事件。本设计中选择异步串行通信方式。
2.1.5JTAG模块
JTAG即联合数据工作组,是一种国际标准测试协议,在芯片的内部测试时广泛使用。图2-3为标准JTAG硬件框图。一般来说,它都有4线。
图2-3 JTAG模块硬件框图
2.2系统硬件总体结构
本设计中温度控制系统的硬件部分主要由供电单元模块、温度采集模块、串行通信模块、外接执行单元模块和JTAG测试接口构成。
系统采用+5V的USB供电模式,通过转换芯片输出3.3V供电电压。该温度控制系统以单片机为核心控制器。外部温度则由温度传感器DS18B20测得,并将采集到的温度以模拟量转换成数字量,温度传感器采用“单线总线式”结构接入单片机,单片机通过普通I/O口P2.3读取温度值并进行相应处理。主机PC经TUSB3410虚拟的一个COM口与单片机的USART模块进行串行通信,从而向主机发送温度数据。单片机根据最新接收到的用户控制信息和当前温度测量值进行比较,根据单片机内预先写入的控制算法得出对外围设备的具体控制方式。这些控制信息通过单片机的I/O口P2.0和P2.1输出,对加热器和散热器进行控制。
2.3 温度数据采集电路设计
2.3.1 DS18B20简介
DS18B20是美国的达拉斯公司改进后的新产品,它是单总线数字式的温度传感器,它的数据采集转换只要1s钟但是却可以反映9~12位的数字量,功能十分强大,但是原理相当简单,同时精度还很高,对于温控系统,其非易失性的特点十分符合要求。对于DS18B20一般有寄生供电和独立供电两种供电方式。
根据上述特性,DS18B20可以广泛使用。
表2-1中列出了引脚的排列和说明。DS28B20与外界通信仅通过DQ这一个单线接口。
表2-1 DS18B20引脚说明
引脚号 符号 说明
1 GND 接地
2 DQ 单线数据输入输出引脚;寄生电源模式下的供电端
3 VDD 可选VDD引脚,外接电源时必须接地
图2-4所示为DS18B20内部结构图,有很多部件构成,其中核心的是64位ROM以及温度传感器和警告装置,其中存储器由一个高速暂存存储器RAM和一个电可擦除EEPROM组成。
图2-4 DS18B20内部结构图
2.3.2 温度数据采集电路原理图设计
本设计中温控系统的下位机均通过USB的5V电源供电。单片机的标准电压为3.3V,故需通过电源转换芯片SP6201将5V电源转换成3.3V电源。SP6201的典型接法如图2-5所示,图中输入端IN输入5V电压,输出VCC为3.3V。
图2-5 电源部分 5V转3.3V
DS18B20采用外接5V电源供电方式,可直接接入USB接口线的+5V端。VCC引脚通过电容接地进行滤波,保证输入电压的稳定。DS18B20数据手册中规定数据线DQ在空闲时为高电平状态,故在VCC和DQ间加上4.7K的上拉电阻。整个原理图见图2-6。
图2-6电路原理图
2.3.3 温度数据采集模块PCB设计
PCB的设计流程分为网表输入、规则设置、元器件布局、布线、检查、复查、输出六个步骤。
本设计中首先根据电路的规模和设计要求,确定所需制作电路板的物理外形尺寸和电气边界,即切换当前的工作层面为Keep Outlayer,绘制出电路图边界。规划好电路板后,在原理图编辑器中执行Design菜单命令Update PCB装入网络表和元件,系统自动将上节中所示原理图设计的数据装入印制电路板的设计系统PCB。Protel提供了元件自动布局工具,本设计中采用手工布局,元件布局时通常需要考虑到以下几个问题:
(1)元件布局应便于用户的操作使用。
(2)尽量按照电路的功能布局。
(3)数字电路部分和模拟电路部分尽可能分开。
(4)特殊元件的布局要根据不同元件的特点进行合理布局。
(5)应留出电路板的安装孔和支架孔以及其他有特殊功能安装要求的元件的安装位置等。
按照上述注意事项将元器件布局完成后,根据设计要求设定自动布线的参数,采用系统自动布线功能完成布线工作。系统自动布线往往不太合理,需要手工进行调整,如调整连接线的走向、加宽电源线等。布线完成后可对电路板进行表面覆铜,避免干扰。具体pcb版图如图2-7所示。
图2-7 pcb版图
2.4串行通信接口电路设计
2.4.1TUSB3410芯片简介
TUSB3410是一款独特的桥接器,它可以通过电源直接供电或者连接USB供电。其传输速率相当之高,功能齐全。桥接器模型如图2-8所示。
图2-8 USB-TO-UART模型
2.4.2串行通信接口电路原理图设计
由图2-8 USB-TO-UART模型所示,主机PC的数据流通过USB数据线输入TUSB3410后由SOUT输出给单片机,单片机的数据流通过SIN输入TUSB3410后由USB数据线输出给主机PC。USB转UART接口硬件原理图如图2-9所示。
图2-79USB转RS-232接口硬件原理图
2.5JTAG接口电路设计
JTAG即联合数据工作组,是一种国际标准测试协议,在芯片的内部测试时广泛使用。一般标准的情况下是4线。各线的具体作用如下:TCK是提供时钟信号来驱动其他的执行单元工作;TMS是提供转换工作;TDI是数据输入接口;输入各种所需要的数据;TDO是数据输出线。主要输出所需数据。
TRST可以用来对TAP Controller进行复位(初始化)。
本设计中采用的JTAG仿真器一端为计算机标准并口连接,另一端为双列直插式插针。图2-8所示为JTAG仿真器和单片机JTAG模块引脚的连线图。
图2-8 JTAG接口
2.6 外设控制电路设计
由于器件资源的限制,本设计采用了古老的定值开关控温法,通过软件判断加热还是通风。具体方法是将I/O口输出的控制信号通过运算放大器放大后驱动继电器来控制电源的通断,从而选择加热器和散热器的工作状态。这种方法虽然简单,但是忽略了温度可能存在的延时滞后问题,致使被控对象温度波动较大,控制精度低,不适合于高精度的温度控制。不过在环境温度控制中仍可使用。本设计可作出相应的改进:将原来的控制信号只有启动和关闭两种信号,增加输出温度偏差量,通过反馈环节实现恒温保持。
第3章 温度控制系统软件设计
3.1系统软件总体构造
在温控系统中,软件也起了很大作用,其很大程度上决定了一个系统的性能。温控系统的主要功能都需要软件来实现。本设计采用模块化方法,把整个系统所要实现的功能分割成若干子模块,子模块内又可分解为若干任务,这样逐层细分有利于程序的调试,便于理解和维护。另外,需要注意的是系统的实时性、稳定性等指标,这是衡量系统的优劣的关键。因此在设计过程中对数据采集和控制算法做了相应处理。本设计中应用程序循环程序,循环中通过调用子函数实现相应的功能。通过中断服务子程序处理异步事件。图3-1所示为软件总体结构。
图3-1 系统软件总体结构图
由图3-1可以看出,围绕主控制芯片单片机的系统软件主要包括以下五个模块:主程序模块、温度采集模块、串行接口传输模块、执行控制单元模块、测试模块。各模块分工独立、功能明确,采用软件接口进行连接,遵循模块内部数据联系紧凑、模块之间数据联系松散的原则。主程序模块主要列出了应用程序的整体框架和对单片机进行硬件初始化。温度数据采集模块主要将温度传感器测得的温度数字量采集并存储到单片机存储器中。串行通讯模块主要实现单片机和主机用户操作界面的数据传输,单片机向主机发送温度数据,主机向单片机发送控制命令。控制模块主要通过控制算法实现单片机I/O口对外设的控制。在本章下面几节中将对各模块进行具体分析和说明。
3.2主程序模块设计
主程序模块的主要功能是对上电后的单片机和外设进行初始化,并构建应用程序执行的顺序、框架。主程序模块流程图如图3-2所示。
图3-2 主程序模块流程图
其中初始化包括单片机硬件初始化、温度传感器初始化和串行通信口初始化三部分。应用程序的主要功能是:首先检测温度传感器,若总线上存在温度传感器,则转入执行数据温度采集模块;然后转入串行通信模块发送采集到的温度数据;最后单片机通过控制算法对外设做出相应控制。
看门狗定时器的主要功能是当程序发生故障时(如软件陷阱或死循环)能使受控系统重新启动。本设计中主程序运行时一直处于无限循环状态,故将其关闭。在所有的电子系统中,时钟的性能和稳定性决定着正个系统的性能,本设计选择了XT2高速晶体振荡器作为系统主时钟。单片机执行指令通过系统时钟驱动,所以初始化时需要先打开XT2,待其工作稳定后再进行其他设置。
3.3温度数据采集模块设计
由于DS18B20特殊的通讯协议,因此完成温度转换必须经过三个步骤:
(1)初始化程序。包括接收和发出两部分,具体如图3-3。
(2)发送ROM指令。总线主机接收到存在脉冲表示复位成功,然后发送一条ROM指令,选择指定的温度传感器,每个温度传感器都由一个唯一的64位ROM标识。
(3)发送功能指令。这些指令允许总线主机读写DS18B20内部暂存寄存器。本设计中通过写入ConvertTemperature[44H]命令启动温度转换,1秒后(温度转换时间约为1秒)通过写入读暂存寄存器命令读取寄存器内的数据。
图3-3 初始化时序
图3-4 读/写时序
总线主机通过时间片来读出和写入DS18B20的数据,如图3-4。
图3-5温度数据采集模块流程图
图3-6 写字节、读字节流程图
图3-5所示为温度数据采集模块流程图;图3-6为写字节、读字节流程图。
3.4串行通信模块设计
在前面介绍USART模块时已经提出STC89C52的串行通信由硬件直接实现,用户只需设置相关寄存器即可实现串行通信的功能。本设计中选用USART模块的UART模式,通过UART实现单片机与主机PC的连接。图3-7所示为UART模式下USART模块的相关寄存器。
图3-7 USART模块寄存器:UART模式
本设计中UART硬件初始化主要包括以下几个步骤:首先通过控制寄存器UCTL选择SWRST使能软件复位并设置消息帧格式为数据长度8位、偶校验;然后确定波特率,通过发送控制寄存器UTCTL选择发送时钟源为ACLK,通过波特率控制寄存器UBR00、UBRO1和调制寄存器UMCTL确定波特率为9600bit/s;接着后设置中断寄存器ME1、IE1、IFG1,使能TXD和RXD并清除中断标志;最后开总中断,允许进入串行数据接收和发送中断服务子程序。在接收数据前还需先清空接收缓存器。当待发送的数据送入UART的发送缓存UTXBUF时,启动发送,本设计中直接通过主程序将待发送数据写入发送缓存中;当UART的接收缓存URXBUF接收到数据时,启动接收,通过中断服务子程序,将接收缓存中的数据存入指定寄存器内。图3-8所示为UART初始化流程图。发送和接收部分详见附录A源程序代码。
图3-8 UART初始化流程图
3.5控制模块设计
该模块的已知条件是当前温度测量值和温度允许的变化范围,经控制算法处理得出加热或是通风的处理办法。
该设计采用的是定值开关控温,通过继电器控制执行单元的开关,温度低于下限温度,启动加热装置,温度高于上限温度,启动通风降温设备。若温度出现在临界点时,将出现电源不断开启和关闭的现象,容易造成器件的损坏。为避免出现这一现象,本设计中加入了模糊算法的思想,算法设计流程如图3-9所示。
图3-9 控制算法流程图
第4章 用户操作界面设计
4.1可视化编程工具VB简介
Visual Basic简称VB,它是一种可以在Windows环境下开发的高级程序设计语言。因为它提供的组件可以快速建立一个应用程序,所以简单易学并且提高效率,同时VB的功能依然强大。本设计中用户操作界面主要实现PC端实时读取单片机的温度数据和向单片机写入控制信息等功能。VB自带的串行通讯控件MSComm可方便快捷地实现PC端和单片机的串行通信。现在使用的VB版本分为普及版、专业版和企业版三种,每一种版本都有对应的族群。由于串行通讯的组建包含在专业版和企业版中,本设计中安装了VB6.0企业版。
4.2数据接收显示模块设计
MSComm控件发送和接收数据需要通过串口进行,为此提供两种处理通讯的方法:一是查询方式,二是事件驱动。本设计中需要实时监测温度数据,所以采用事件驱动方式,其数据接收部分如下:
Select Case MSComm1.CommEvent
Case comEvReceive '有数据发出
RXD_Buffer = MSComm1.Input '接收数据
End Select
使用串口前必须对串口进行初始化设置,即端口的属性设置。本设计中仅涉及到部分常用属性设置。具体如下:
(1)选择通讯端口号USB接口经usb转RS-232驱动后虚拟成Com3.CommPort=3。
(2)设置传输速度等参数。Settings=“9600,E,8,1”。
(3)数据传输的类型选择。采用字节传输.InputMode=0。
(4)设置每次从接收缓冲区读取字节数。单片机每次发送4个字节.RThreshold=4。
(5)开启通讯端口.PortOpen=True。
(6)每接收完一次数据,需清空输入寄存器.InBufferCount=0。
(7)使用完MSComm通讯对象后关闭通讯端口.PortOpen=False。
TextBox控件是程序同用户进行交互的常用方式,用来在程序中提供文本框,可显示和输入字符串。单片机发出的数据是十六进制表示的温度数值,而文本框中显示的是ASCII码对应的字符,若要在文本框中十进制形式显示接收到的十六进制数值,必须做相应处理。处理如下:
For i = 1 To Len(RXD_Buffer)
Text1.Text = Text1.Text & Val(“&H” & Hex(Asc(Mid(RXD_Buffer, i, 1))) & “&”) & " "
Next
Text1.Text = Text1.Text + vbCrLf '调整格式
4.3控制信息输入模块设计
用户通过此模块可完成对温控系统的全部控制,可操作项包括:打开和关闭实时温度监测、退出系统、设置温度的上下限值。
CommandButton按钮控件用来启动、中断或结束一个进程。开启端口MSComm1.PortOpen=True。关闭端口MSComm1.PortOpen=False。由于每次鼠标单击都将产生Click事件关闭或打开通讯端口,需采用消息对话框提示当前串口状态。程序如下:
Private Sub Command1_Click()
On Error Resume Next
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True '打开端口
Else
MSComm1.PortOpen = False '关闭端口
MsgBox “串口已关闭!”
End If
If Err Then '发生错误事件时将提示警告信息
MsgBox “串口打开失败!”
End If
End Sub
温度传感器的测量范围为-55℃~125℃,用ComboBox组合框向用户提供选择的列表,可避免用户自行输入文本信息时格式和范围上的错误。选择项目数过多时在属性窗口中手动添加较为麻烦,可在窗体函数中给ComboBox添加选项。实现语句如下:
For i = -55 To 125 Step 1
Combo1.AddItem i
Next
当用户选择列表项时即产生Combo_click事件,进程自动将选择的温度上下限值存入事先定义的TL和TH寄存器待用,如TL = Val(Combo1.Text)。Val是VB自带的将数字字符串转换为数值的数学函数,可将Combo1.text的字符转换为带符号的温度数值。
温度上下限设置完以后,可点击输入设置值按钮将设置的温度上下限值送入单片机,单片机经处理后可对外设进行控制。前面MSComm控件设置的是以字节方式进行数据传输,在VB中字节类型的范围是0-255,若要发送有符号数必须做相应处理,可将有符号数分成两个字节发送,前一字节存放符号,后一自己存放绝对值。处理和发送程序如下:
Private Sub Command2_Click()
Dim TXD_Buffer(3) As Byte
If Val(Combo1.Text) < 0 Then
TXD_Buffer(0) = 1
TXD_Buffer(1) = Abs(Val(Combo1.Text))
Else
TXD_Buffer(0) = 0
TXD_Buffer(1) = Val(Combo1.Text)
End If
If Val(Combo2.Text) < 0 Then
TXD_Buffer(2) = 1
TXD_Buffer(3) = Abs(Val(Combo2.Text))
Else
TXD_Buffer(2) = 0
TXD_Buffer(3) = Val(Combo2.Text)
End If
On Error Resume Next
MSComm1.Output = TXD_Buffer '发送数据
Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0 '等待,直到数据发送完毕
MSComm1.OutBufferCount = 0 '等待数据发送完毕
End Sub
4.4温度告警模块设计
此模块主要对温度测量值和预先设定值进行比较,以指示灯的方式直观地体现温度状态。如温度超出范围将产生橙色和红色告警。
单片机每次发出的4个字节表示的温度数值,温度比较只精确到1℃,因此需提取第一个字节和最后一个字节。处理如下:
temp = AscB(RXD_Buffer) '温度值的整数部分
Text3.Text = RightB(RXD_Buffer, 2) '温度值的符号
预先设定的温度上下限存放在TL和TH中,均为有符号数,若要直接进行比较,需将提取的两个字节温度值转换为单字节有符号数。处理如下:
temps = Asc(Text3.Text) '温度值的符号43为“+”,45为“-”
If temps = 45 Then '将温度的绝对值temp转换为有符号数
temp = 0 - temp
End If
指示灯部分将三张图片叠加,同时每次只显示一张图片,处理如下:
If temp > TH Then '温度大于上限值,红灯亮
Image4.Visible = False
Image3.Visible = False
Image2.Visible = True
ElseIf temp < TL Then '温度小于下限值,黄灯亮
Image4.Visible = False
Image2.Visible = False
Image3.Visible = True
Else '温度正常,绿灯亮
Image3.Visible = False
Image2.Visible = False
Image4.Visible = True
End If
4.5安装文件制作
VB6.0中自带了package&deployment向导,运行打包向导后,按照提示可轻松制作安装程序。但是由于VB自带的打包工具生成的安装程序很不稳定,经常出现问题,通常使用其他打包工具。本设计中选用Setup Factory 7.0制作安装文件。
运行Setup Factory 7.0,选择创建新工程后,工程向导会提示加载工程文件。选择要制作的VB工程文件,系统会自动收集你所使用的所有控件,包括DLL、OCX文件,以及Windows系统文件、VB运行库等。跟系统无关的附加文件需要手工添加,比如:MP3、BMP、TXT、INI等文件。
为避免自动添加文件不完整,本设计采用了VB自带打包向导和Setup Factory 7.0相结合的方法,具体操作如下:
(1)运行package&deployment向导,选择工程,添加此工程的执行文件,选择打包方式为标准安装包、压缩文件类型为单个压缩文件,向导会自动完成打包。打包完之后会生成三个文件和一个文件夹。
(2)运行Setup Factory 7.0,退出工程向导,选择添加文件,添加Support压缩包中的全部文件,设置屏幕外观属性后再通过发布向导构建安装文件。
制作完成的安装程序安装方便、自带卸载程序、对运行环境要求较低,可在没有安装Visual Basic的环境下运行。
4.6使用说明
本设计中用户操作界面安装方便,使用简单。
双击mperature_control setup.exe文件,按照提示点击‘下一步’即可完成软件的安装。安装界面如图4-1所示。
图4-1 温控用户操作软件安装界面
安装完成后运行temperature.exe文件,将出现如图4-2所示用户操作界面。功能介绍如下:
(1)若下位机已连接,点击‘开始监测’,左边文本框内将显示被测对象当前温度值,每秒更新一次,显示格式如图中注释所示。温度报警模块的文本框内将显示当前温度值的符号和整数部分。若下位机未连接,点击‘开始监测’,将弹出对话框提示“串口打开失败”。
(2)在开始监测模式下,分别通过温度下限值和上限值列表选择温度范围,可启动温度报警系统,报警模块中温度状态指示灯将点亮。
(3)点击‘输入设置值’,PC端将把当前温度设定值发送给下位机,下位机经处理后控制外设。
(4)在开始监测模式下,再次点击‘开始监测’,将停止监测,并且弹出对话框提示“串口已经关闭”。
(5)点击‘退出’,退出用户操作界面。
图4-2用户操作界面
第5章 系统调试
5.1IAR Systems开发环境
5.1.1创建项目
运行IAR Embedded Workbench IDE,页面弹出如图5-1所示对话框。点击‘Create new project in current workspace’,进入项目类型选择对话框,本设计中采用C进行编程,点击‘确定’后选择项目保存路径,新项目创建完毕。
图5-1Embedded Workbench启动界面
5.1.2导入源程序
如图5-2所示,右击左侧Workspace一栏已经建好的项目,选择‘Add->Add File’从源程序存储路径选择源程序‘T_R_DS18B20.C’,点击‘打开’后加载。
图5-2导入源程序界面
5.1.3仿真参数设置
如图5.2所示选择‘Options’选项,出现对话框,可进行仿真器各类参数设置。
首先进行主芯片选择。本设计使用STC89C52为主控制芯片。
其次进行仿真模式选择,即图5-3所示。Simulator为软件仿真,即虚拟MCU仿真;FET Debugger为硬件仿真。本设计需要将源程序拷入单片机进行硬件调试,故选择FET Debugger。
再者进行程序下载设置,如图5-4。本设计中使用的JTAG仿真器通过并口线连接主机,因此Conection一栏选择LPT1。下载模式选择擦除原信息后再写入。
图5-3调试器选择界面
图5-4程序下载设置界面
5.1.4下载源程序
下载程序前需要对源程序进行编译和连接,成功后才能下载到单片机内。点击工具栏的编译按钮Compile可编译源文件,过程及任何出错信息会显示在IAR Embedded Workbench IDE界面下方的Message消息框内。双击错误信息,光标将直接移动到程序错误行,根据提示进行修改后再重复上述过程。
点击工具栏的Debugger按钮下载源程序,下载成功后即可进行仿真。调试可以采用单步运行或者设置断点运行以及全局运行等,若需修改程序,必须先退出仿真界面。仿真时可通过菜单栏的视图选项View跟踪单片机内各寄存器和变量存储内容的变化情况。本设计中主要采用‘Watch’选项,观察变量GetScratchpad(温度传感器DS18B20暂存存存储器)、RXDATA_BUF(单片机发送缓存)、和TXDATA_BUF(单片机接收缓存)等信息。硬件仿真成功界面如图5-5所示。
图5-5程序下载并仿真成功界面
5.2调试结果及数据分析
本次设计的温控系统包括主控芯片单片机(下位机)和用户操作界面(上位机)两部分构成。测试时还需用到JTAG仿真器。
将附录B中所示已经制做好的下位机USB口接入主机,第一次接入时PC端将提示“该硬件无法被识别”,这时需打开‘TUSB3410_ Driver setup.exe’安装USB转串口驱动程序。安装完成后PC端便可识别USB。然后通过‘开始’菜单的‘所有程序’打开已经安装好的用户操作界面‘Temperature_control.exe’,结合图5-5所示界面进行仿真测试,即可得到如图5-6所示结果。具体操作如下:
(1)在计算机设备管理器中找到下位机对应的端口号,双击后设置波特率为9600,停止位为1,偶校验。
(2)在IAR Embedded Workbench IDE硬件仿真界面下单击工具栏里的全局运行按钮,让单片机处于工作状态。
(3)点击用户操作界面的‘开始检测’按钮,便可实时检测并显示单片机采集到的温度数据,温度报警模块按照上一次设定的温度值进行温度状态提示,单片机也将按照上一次的设置控制外设。
(4)重新选择温度范围后,点击‘输入设置值’,系统将按照新设定进行温度告警和控制。
(5)一段时间后,在硬件仿真界面下单击工具栏里的暂停按钮,让单片机停止工作后再在Watch一栏查看预先设置跟踪的变量的值。
图5-6所示为上述过程执行后得到的结果,经验证准确无误,当时的室温约为15℃。
图5-6调试结果
(1)用户操作界面说明:
左侧文本框内显示的是每一妙更新一次的温度测量值,最后一行的显示是“15 43 75 43”,其中15为温度值的整数部分、4375为温度值的小数部分、43为温度值的符号(ASCII码43表示字符‘+’,45表示字符‘-’),含义为上一刻测得的温度值为+15.4375℃。
两个选择列表的值分别是“-2”和“16”,表示已设置了温度范围为-2~16℃。从右边Watch一栏的RXDATA_BUF
两个文本框显示的“+”和“15”,表示上一刻测得的温度值符号为正,整数部分为15。指示灯显示绿色,表示温度正常。
(2)Watch一栏说明:
GetScratchpad的9个字节存储的是单片机上一刻读出的温度传感器测得的温度值和配置信息。这里不作详解。
经转换后的温度值存入TXDATA_BUF内,其中TXDATA_BUF[0]=0x0F表示温度值的整数部分为15;TXDATA_BUF[1]=0x2B和TXDATA_BUF[2]=0x4B合起来表示温度值的小数部分为0x2B4B即十进制数4375;TXDATA_BUF[3]=0x2B表示温度值的符号为‘+’。即上一刻测得的温度值为+15.4375℃。
接收缓存RXDATA_BUF里存放的是通过PC端用户操作界面设置的温度范围-2~16℃。RXDATA_BUF[0]=1表示温度下限值符号为‘-’;RXDATA_BUF=
0x02表示温度下限制绝对值为2;RXDATA_BUF[3]=0表示温度上限值符号为‘+’;RXDATA_BUF=0x10表示温度上限制绝对值为16。
结 论
本设计的主要任务是设计并制作一个适用于小型系统的温度测试与控制系统。通过了解现阶段温度测量控制系统的设计方案和技术水平,对比各种MCU和温度传感器的性能、结构以及根据现有器件资源,最终选择了设计和制作基于STC89C52和DS18B20的温度控制告警系统。本次设计过程,主要完成了以下工作:
(1)硬件设计与制作
以STC公司的STC89C52单片机为核心控制芯片进行系统硬件设计,硬件部分包括:电源模块、温度数据采集模块、USB-TO-UART接口模块、JTAG测试模块和外设控制模块。
整个系统采用USB的+5V电源线供电,单片机需要的3.3V电压由电源转换芯片SP6201提供。单片机通过普通I/O口启停DS18B20的温度转换并采集温度数字量。单片机通过UART口和主机PC的USB口进行数据交换,其中USB-TO-UART由TUSB3410实现。JTAG测试引脚插针引出,仿真器则使用现有仿真器。外设控制模块由于器件资源所限,仅使用加热片和风扇实现。
(2)软件设计
使用汇编语言对硬件的各模块进行程序算法编写,程序总体结构采用了模块化的设计方法。
(3)用户操作界面的设计与制作
使用VB进行了用户操作界面的设计,设计完成后用VB自带的打包工具和专业打包工具SetupFactory相结合的方法制作了安装程序。此安装程序可以使用户操作界面在没有安装Visual Basic的系统环境下安装使用。
目前,智能化的温度控制器正向着多功能、高精度、高安全性和高可靠性发展。本设计中需要进一步研究和改善的地方有如下几个方面:
(1)本设计中的温度测控系统上电后开始连续工作直到关闭时才停止,在此期间用户不能控制其转换速度。因此,可在程序设计中增加工作模式,如:单次转换模式、连续转换模式、待机模式等。
(2)可通过DS18B20内部的配置寄存器选择转换精度,以调整分辨率和最大转换时间。在对精度要求高的场合可适当牺牲转换时间来获得较高转换精度;在实时性要求较高的场合可适当牺牲转换精度来获得较快转换时间。
(3)增加外部EEPROM,由于STC89C52存储空间相对较大,也可直接在主控芯片内划出适当一部分ROM空间,用来存储用户信息和历史记录,以便外设控制模块实现自调整功能。
(4)外设控制算法可采用现在得以快速发展的以神经网络和模糊数学为理论基础的智能控制算法,如模糊控制、神经网络控制和模糊PID控制等。以确保主控芯片能更加实时、准确地对外设器件进行控制。
致谢
本文在我的毕设导师许波老师的精心指导下完成,在论文的前期准备与撰写过程中,许波老师给了我很多宝贵的意见和建议。由于我在公司实习无法及时查找文献资料,她在百忙之中给我找了许多和论题相关的资料,并不断地鼓励和支持我要把毕业设计做到更好。她严谨细致的工作态度以及对学生的热情帮助深深地感动了我,在此我向她致以最衷心的感谢和最诚挚的敬意!
四年充实的大学生活让我自信、独立,如今我即将走向社会。十分感谢学校给我一个学习成长的平台!同时也感谢所有关心和帮助过我的老师以及同学!是你们让我找到了人生的方向。
最后衷心地感谢各位专家教授抽空审阅本文!
参考文献:
[1]张爱筠等.温度控制系统的设计与市场研究.商业经济. 2008.299(2):57-58.
[2]王海宁.基于单片机的温度控制系统的研究.合肥工业大学. 2008.
[3]谭伟平,胡荣强,张响亮.基于RS-485和组态的机房温度远程监控. 2010.
[4]边琳.时滞温度控制系统控制方法的研究.吉林大学. 2007.
[5]邓兴成.单片机原理与实践指导.机械工业出版社. 2009.
[6]孙传友,孙晓斌.测控系统原理与设计.北京航空航天大学出版社.2007.
[7]瓮嘉民.单片机典型系统设计与制作实例解析.电子工业出版社.2014
[8]陈忠华.基于单片机的温度智能控制系统的设计与实现.大连理工大学.2006
[9]DS18B20 Data Sheet.DALLAS Corporation. 2005.
[10]TI TUSB3410 Date Sheet.TEXAS INSTRUMENTS. 2002.
[11]SP6201EM5-2.85 Data Sheet.Sipex Corporation. 2004.
[12]I2C EEPROM 24LCxx Data Sheet.Microchip Technology Inc. 2005.
[13]严晓照,张兴国.基于模糊控制算法的温度控制实验系统.机电工程. 2006.23(10):19-20.
[14]范逸之.VisualBasic与RS-232串行通信控制.中国青年出版社. 2002.
[15]钱培德等.Visual Basic傻瓜书.清华大学出版社.