****摘要:****本文设计了一种基于 STC89C52 单片机的恒温水箱控制系统。该系统以 STC89C52 单片机作为核心控制器,通过 DHT11 数字温度传感器实时采集水箱内的水温数据,并将数据传输至单片机进行处理。单片机将采集到的温度与预设的温度范围进行对比,当实际温度低于预设温度下限时,单片机输出控制信号,驱动加热丝工作,对水箱内的水进行加热;当实际温度达到预设温度上限时,单片机控制加热丝停止工作,从而实现对水箱水温的自动调节与恒定控制。
系统还配备了由 8050 三极管组成的蜂鸣器模块,当水温出现异常,如超出预设温度范围时,蜂鸣器发出警报,提醒用户及时处理。此外,系统通过 LED 数码管或液晶显示屏实时显示当前水温,方便用户直观地了解水箱温度状态。在硬件设计方面,详细介绍了各模块的电路原理及与单片机的连接方式,确保系统的稳定性与可靠性。在软件设计上,采用 C 语言编写程序,实现了温度采集、数据处理、加热控制以及报警提示等功能。
经测试,该恒温水箱控制系统能够准确、稳定地控制水温,温度控制精度较高,响应速度快,具有较强的实用性和可扩展性,可广泛应用于家庭热水供应、工业生产等需要恒温控制的领域。
****关键字:****STC89C52 单片机;DHT11 传感器;恒温水箱;8050 蜂鸣器模块;加热控制;
****Abstract:****This paper designs a constant temperature water tank control system based on STC89C52 single - chip microcomputer. The system uses the STC89C52 single - chip microcomputer as the core controller. The DHT11 digital temperature sensor is used to collect the water temperature data in the water tank in real - time, and the data is transmitted to the single - chip microcomputer for processing. The single - chip microcomputer compares the collected temperature with the preset temperature range. When the actual temperature is lower than the lower limit of the preset temperature, the single - chip microcomputer outputs a control signal to drive the heating wire to work, heating the water in the water tank. When the actual temperature reaches the upper limit of the preset temperature, the single - chip microcomputer controls the heating wire to stop working, thus realizing the automatic adjustment and constant control of the water temperature in the water tank.
The system is also equipped with a buzzer module composed of 8050 transistors. When the water temperature is abnormal, such as exceeding the preset temperature range, the buzzer will give an alarm to remind the user to deal with it in time. In addition, the system displays the current water temperature in real - time through an LED digital tube or liquid crystal display, which is convenient for users to intuitively understand the temperature state of the water tank. In terms of hardware design, the circuit principles of each module and the connection methods with the single - chip microcomputer are introduced in detail to ensure the stability and reliability of the system. In software design, the C language is used to write programs to realize functions such as temperature collection, data processing, heating control, and alarm prompt.
Through testing, the constant temperature water tank control system can accurately and stably control the water temperature, with high temperature control accuracy and fast response speed. It has strong practicability and scalability and can be widely used in fields that require constant temperature control, such as domestic hot water supply and industrial production.
****Keywords:****STC89C52 single - chip microcomputer; DHT11 sensor; constant temperature water tank; 8050 buzzer module; heating control
目 录
[1.1 研究背景与意义](#1.1 研究背景与意义)
[1.2 国内外研究现状](#1.2 国内外研究现状)
[1.2.1 国外研究现状](#1.2.1 国外研究现状)
[1.2.2 国内研究现状](#1.2.2 国内研究现状)
[1.3 研究目标与内容](#1.3 研究目标与内容)
[1.3.1 研究目标](#1.3.1 研究目标)
[1.3.2 研究内容](#1.3.2 研究内容)
[1.4 研究方法](#1.4 研究方法)
[2.1 系统功能需求分析](#2.1 系统功能需求分析)
[2.2 系统架构设计](#2.2 系统架构设计)
[2.3 系统设计思路与创新点](#2.3 系统设计思路与创新点)
[2.3.1 系统设计思路](#2.3.1 系统设计思路)
[2.3.2 系统创新点](#2.3.2 系统创新点)
[3.1 核心控制模块](#3.1 核心控制模块)
[3.2 32继电器电路模块](#3.2 32继电器电路模块)
[3.3 8050 蜂鸣器模块设计](#3.3 8050 蜂鸣器模块设计)
[3.4 DHT11温湿度检测模块设计](#3.4 DHT11温湿度检测模块设计)
[3.5 OLED显示设计](#3.5 OLED显示设计)
[4.1 软件开发环境与工具](#4.1 软件开发环境与工具)
[4.2 软件功能模块设计](#4.2 软件功能模块设计)
[4.2.1 初始化模块](#4.2.1 初始化模块)
[4.2.2 温度采集模块](#4.2.2 温度采集模块)
[4.2.3 数据处理模块](#4.2.3 数据处理模块)
[4.2.4 加热控制模块](#4.2.4 加热控制模块)
[4.2.5 报警模块](#4.2.5 报警模块)
[4.2.6 显示模块](#4.2.6 显示模块)
[5.1 测试环境搭建](#5.1 测试环境搭建)
[5.2 测试方法与步骤](#5.2 测试方法与步骤)
[5.2.1 温度控制精度测试](#5.2.1 温度控制精度测试)
[5.2.2 响应时间测试](#5.2.2 响应时间测试)
[5.2.3 报警功能测试](#5.2.3 报警功能测试)
[5.2.4 系统稳定性测试](#5.2.4 系统稳定性测试)
[5.3 测试结果与分析](#5.3 测试结果与分析)
[5.3.1 温度控制精度测试结果](#5.3.1 温度控制精度测试结果)
[5.3.2 响应时间测试结果](#5.3.2 响应时间测试结果)
[5.3.3 报警功能测试结果](#5.3.3 报警功能测试结果)
[5.3.4 系统稳定性测试结果](#5.3.4 系统稳定性测试结果)
[6.1 研究成果总结](#6.1 研究成果总结)
[6.2 研究的不足与展望](#6.2 研究的不足与展望)
一、绪论
1.1 研究背景与意义
随着科技的不断进步与人们生活水平的日益提高,恒温控制技术在各个领域的应用愈发广泛。在日常生活中,家庭热水供应需要稳定的水温以满足人们舒适洗浴、清洁等需求;在农业领域,温室育苗、水产养殖等场景下,水温的恒定对动植物的生长发育至关重要;在工业生产中,化工反应、食品加工、制药等行业更是对温度控制有着极高的要求,精确的恒温控制能够确保产品质量的稳定性,提高生产效率,降低能耗与生产成本 。
传统的恒温水箱控制方式往往存在控制精度低、响应速度慢、自动化程度不足等问题。例如,部分依靠机械温控器的水箱,在温度调节时容易出现较大的波动,无法满足一些对温度敏感场景的需求;而一些早期的电子控制水箱,功能单一,缺乏完善的报警机制与实时监测功能,难以保障系统的安全性与可靠性。
基于单片机的恒温水箱设计,能够利用单片机强大的数据处理与逻辑控制能力,结合先进的传感器技术与控制算法,实现高精度、智能化的温度控制。本研究旨在设计一款基于 STC89C52 单片机的恒温水箱控制系统,通过优化硬件电路与软件算法,提高水箱温度控制的准确性与稳定性,同时增加实时监测、异常报警等功能,提升系统的实用性与安全性。该研究成果不仅能够满足家庭、工业等领域对恒温水箱的多样化需求,还对推动恒温控制技术的发展具有重要的理论与实践意义。
1.2 国内外研究现状
1.2.1 国外研究现状
在国外,恒温控制技术起步较早,发展相对成熟。自 20 世纪中叶以来,随着电子技术与计算机技术的飞速发展,国外在恒温控制领域取得了众多突破性成果。美国、日本、德国等发达国家在恒温控制设备的研发与应用方面处于领先地位。
在硬件技术方面,国外不断推出高精度、高可靠性的温度传感器与控制器件。例如,美国 DALLAS 公司生产的 DS18B20 数字温度传感器,具有测温范围广、精度高、抗干扰能力强等优点,广泛应用于各类恒温控制系统;德国西门子公司的 PLC(可编程逻辑控制器)产品,以其强大的控制功能与稳定性,在工业恒温控制领域占据重要地位。
在控制算法方面,国外学者对智能控制算法在恒温控制中的应用进行了大量研究。模糊控制、神经网络控制、自适应控制等先进算法被广泛应用于恒温控制系统。例如,模糊控制算法能够根据温度偏差与偏差变化率,自动调整控制参数,实现对温度的快速、精确控制;神经网络控制则可以通过对大量数据的学习,建立复杂的温度控制模型,提高系统的自适应能力。
在产品应用方面,国外的恒温控制设备种类丰富,功能齐全,广泛应用于家庭、医疗、工业等多个领域。例如,日本林内公司生产的智能恒温燃气热水器,采用先进的恒温控制技术,能够快速、准确地调节水温,同时具备节能环保、安全防护等多种功能;美国 THERMO FISHER 公司的高精度恒温箱,在实验室科研、生物制药等领域得到了广泛应用。
1.2.2 国内研究现状
我国在恒温控制技术领域的研究起步相对较晚,但近年来发展迅速。随着国家对科技创新的重视与投入不断加大,国内众多高校、科研机构与企业在恒温控制技术方面开展了大量研究工作,并取得了显著成果。
在硬件研发方面,国内企业与科研机构在温度传感器、控制器件等方面取得了一定进展。例如,杭州士兰微电子公司生产的温度传感器产品,性能不断提升,部分产品已达到国际先进水平;华为、中兴等企业在嵌入式控制芯片领域的研发,为国内恒温控制系统的发展提供了有力的硬件支持。
在控制算法研究方面,国内学者对智能控制算法在恒温控制中的应用也进行了深入探索。许多高校与科研机构将模糊控制、遗传算法等与传统控制方法相结合,提出了一系列改进的控制算法,有效提高了恒温控制系统的性能。例如,一些研究将模糊 PID 控制算法应用于恒温水箱控制系统,通过在线调整 PID 参数,实现了对水温的高精度控制。
在产品应用方面,国内市场上的恒温控制设备日益丰富,从家庭使用的恒温热水器、饮水机,到工业生产中的恒温反应釜、恒温干燥箱等,产品种类不断增加,性能逐步提升。但与国外先进水平相比,国内在高端恒温控制设备的研发与生产方面仍存在一定差距,部分关键技术与核心器件仍依赖进口。
1.3 研究目标与内容
1.3.1 研究目标
本研究的目标是设计并实现一款基于 STC89C52 单片机的高性能恒温水箱控制系统。具体而言,要确保系统能够准确、稳定地控制水箱水温,将温度控制精度控制在 ±1℃以内;实现水温的实时监测与显示,方便用户直观了解水箱温度状态;具备完善的异常报警功能,当水温超出预设范围时,能够及时发出警报,提醒用户采取相应措施;同时,提高系统的可靠性与稳定性,降低能耗,使其能够在家庭、工业等多种场景下稳定运行。
1.3.2 研究内容
本研究主要包括硬件设计、软件设计与系统测试三个方面的内容。在硬件设计方面,详细设计以 STC89C52 单片机为核心的控制电路,包括 DHT11 数字温度传感器的数据采集电路、8050 蜂鸣器模块的报警电路、加热丝的驱动电路以及显示电路等,确保各模块之间的可靠连接与稳定运行。在软件设计方面,采用 C 语言编写程序,实现温度数据的实时采集与处理、加热控制算法的设计、报警功能的实现以及数据显示程序的编写等。在系统测试方面,对设计完成的恒温水箱控制系统进行全面测试,包括温度控制精度测试、响应时间测试、报警功能测试以及系统稳定性测试等,根据测试结果对系统进行优化与改进。
1.4 研究方法
本研究采用理论分析、硬件设计、软件编程与实验测试相结合的方法。首先,通过查阅国内外相关文献资料,了解恒温控制技术的发展现状与趋势,明确研究方向与目标,为后续研究提供理论支持。
在硬件设计阶段,根据系统功能需求,选择合适的电子元器件,运用电路设计软件(如 Altium Designer)进行电路原理图与 PCB 版图的设计,并对各模块电路进行详细的原理分析与参数计算,确保硬件电路的合理性与可靠性。
在软件设计方面,依据系统功能要求,制定软件设计方案,采用模块化编程思想,将程序划分为温度采集模块、数据处理模块、加热控制模块、报警模块以及显示模块等,分别编写相应的程序代码,并进行调试与优化。
搭建实验平台,对设计完成的恒温水箱控制系统进行实验测试。通过改变水箱初始温度、环境温度等条件,测试系统的温度控制精度、响应时间、稳定性等性能指标,对测试数据进行分析处理,根据测试结果对硬件电路与软件程序进行调整与改进,直至系统达到预期设计目标。
二、基于单片机的恒温水箱设计总体设计方案
2.1 系统功能需求分析
恒温水箱控制系统的功能需求需紧密围绕其实际应用场景与用户期望展开,确保系统能够有效满足家庭、工业等不同领域的多样化需求。
在温度控制功能方面,系统要实现高精度的水温调节。无论是家庭日常洗浴用水,还是工业生产中的特定工艺需求,对水温的精准控制都是核心要求。系统需能将水箱内水温稳定在预设温度范围内,误差控制在极小幅度,如 ±1℃,以保障使用体验与生产质量。同时,系统应具备灵活的温度设置功能,用户可根据实际需求,通过操作界面方便地设置目标温度。此外,在水温低于预设值时,系统需快速启动加热丝,以高效的加热效率提升水温;当水温达到或超过预设上限,应及时停止加热,避免能源浪费与水温过高带来的安全隐患 。
实时监测功能是系统不可或缺的部分。通过 DHT11 数字温度传感器实时采集水箱内水温数据,并将数据实时传输至单片机进行处理与显示。用户可通过显示屏直观、清晰地了解水箱当前水温状态,便于及时掌握系统运行情况。在工业生产场景中,实时监测功能有助于操作人员及时发现温度异常,保障生产流程的连续性与稳定性;在家庭使用中,用户能随时知晓热水温度,合理安排使用时间。
异常报警功能对于系统的安全性至关重要。当水箱水温超出预设的温度范围,无论是过高还是过低,由 8050 三极管组成的蜂鸣器模块需立即发出警报,以声音信号提醒用户注意。在一些特殊场景,如无人值守的工业设备或家庭夜间无人时,报警功能可及时通知用户采取措施,防止因水温异常导致设备损坏、生产事故或热水浪费等问题。此外,报警功能还可与远程监控系统结合,实现远程报警通知,提升系统的智能化与安全性。
2.2 系统架构设计
本恒温水箱控制系统以 STC89C52 单片机为核心,构建起一个功能完备、协同运作的架构体系,各模块分工明确又紧密配合,以实现精准的恒温控制及相关功能。
STC89C52 单片机是整个系统的 "大脑",承担着数据处理、逻辑判断与指令发出等关键任务。它具备丰富的 I/O 接口资源,能够便捷地与其他功能模块进行连接与通信。凭借其内部集成的中央处理器、存储器等部件,可快速处理来自各个传感器及模块的数据信息,并依据预设的程序逻辑和控制算法,对系统各部分的运行状态进行实时调控。DHT11 温湿度传感器在系统中扮演着 "感知者" 的角色,主要负责实时采集水箱内的温度数据。它通过单总线接口与 STC89C52 单片机相连,能够将采集到的模拟温度信号转换为数字信号,并准确无误地传输给单片机。单片机接收到这些温度数据后,可进行后续的分析与处理,依据当前水温与预设温度的差异情况,做出相应的控制决策,从而实现对水箱水温的精确监测与调控基础。
加热模块是实现恒温控制的关键执行单元之一。它主要由加热丝等部件构成,通过与单片机的连接,接收单片机发出的控制信号。当单片机根据 DHT11 传感器反馈的温度数据判断出水箱水温低于预设温度下限时,便会向加热模块发出启动信号,驱动加热丝开始工作,对水箱内的水进行加热升温;而当水温达到或超过预设温度上限时,单片机又会及时发送停止信号,使加热丝停止加热,以此实现对水温的动态调节与恒定控制。继电器在系统中起到电气隔离与功率放大的作用。由于单片机的输出驱动能力有限,无法直接驱动功率较大的加热模块等负载。继电器通过接收单片机的控制信号,利用电磁原理实现触点的闭合与断开,从而间接控制加热模块等大功率设备的通断电,不仅增强了系统的驱动能力,还能有效避免强电对单片机等弱电设备的干扰,提高系统的稳定性与安全性。显示模块是用户与系统进行交互的重要窗口。它与 STC89C52 单片机相连,能够实时显示水箱内的当前水温数值以及系统的其他相关状态信息,如温度设定值、报警状态等。用户可以通过显示模块直观、清晰地了解系统的运行情况,方便进行温度设置等操作,增强了系统的易用性与可视化程度。
蜂鸣器作为系统的报警执行部件,与单片机相连。当系统检测到水箱水温超出预设的正常温度范围,如过高或过低时,单片机便会向蜂鸣器发出控制信号,使其发出警报声,以声音的形式及时提醒用户水温出现异常,以便用户能够迅速采取相应的措施,保障系统的安全稳定运行,系统架构图如图2-1所示。
图2-1 系统架构图
2.3 系统设计思路与创新点
2.3.1 系统设计思路
本恒温水箱控制系统的设计以满足多样化场景下的恒温需求为出发点,秉持 "高效、精准、智能" 的设计理念,以 STC89C52 单片机为核心控制器,有机整合各功能模块,构建出一套完整且实用的系统架构。
在硬件设计层面,充分考虑系统功能需求与成本效益。选用 DHT11 数字温度传感器作为水温采集单元,其具有单总线数据传输、成本低、精度适中等特点,能够满足水箱水温监测的基本需求。将传感器与单片机的 I/O 口相连,确保数据采集的实时性与稳定性。加热模块采用加热丝配合继电器的方案,继电器实现弱电对强电的控制,保障单片机与加热丝之间的电气隔离,提升系统安全性。8050 蜂鸣器模块作为报警单元,利用三极管的放大特性,使单片机输出的微弱信号能够驱动蜂鸣器发出响亮警报。同时,搭配 LED 数码管或液晶显示屏作为显示模块,为用户提供直观的水温及系统状态信息。各硬件模块通过合理的电路设计与布线,形成一个有机整体,为系统功能实现奠定硬件基础。
软件设计方面,采用模块化编程思想,将系统功能分解为多个独立模块。温度采集模块负责从 DHT11 传感器读取水温数据,并进行格式转换与初步处理;数据处理模块接收采集到的数据,与预设温度值进行对比分析,判断水温状态;加热控制模块依据数据处理结果,输出相应的控制信号驱动加热丝工作;报警模块在检测到水温异常时,触发蜂鸣器报警;显示模块则实时更新并展示水温及系统运行状态。各模块之间通过接口函数进行数据交互与调用,程序结构清晰,便于调试与维护。此外,在程序中融入 PID 控制算法,通过不断调整加热丝的工作时间与功率,实现对水温的精确控制,减少温度波动。
在系统整体架构设计上,注重各部分之间的协同工作与信息交互。以单片机为信息处理与控制中枢,实现数据采集、处理、控制与显示的闭环控制流程。从 DHT11 传感器采集水温数据开始,经单片机处理后控制加热丝、蜂鸣器等执行部件动作,并通过显示模块反馈系统状态,形成一个完整的控制循环,确保系统能够稳定、可靠地运行。
2.3.2 系统创新点
本恒温水箱控制系统在多个方面展现出创新特色,相较于传统恒温水箱及同类产品,具有显著的优势。
在控制算法创新上,采用改进型 PID 控制算法。传统 PID 控制在恒温控制中虽有应用,但在应对复杂工况时存在调节速度慢、超调量大等问题。本系统通过对 PID 参数进行自适应调整,结合模糊控制思想,根据水温偏差及偏差变化率实时优化比例、积分、微分系数,使系统在不同环境温度与水箱初始水温条件下,都能快速、准确地将水温控制在设定范围内,有效提高了温度控制精度与响应速度。
功能集成创新方面,将实时监测、精准控温、异常报警等功能高度集成于一体。传统恒温水箱往往功能单一,缺乏完善的报警机制与智能化调控能力。本系统不仅能实现高精度的水温控制,还可通过蜂鸣器及时发出警报,同时用户能通过显示界面实时了解水温状态,操作便捷。此外,系统预留扩展接口,便于后续集成远程控制、物联网通信等功能,可与智能家居系统或工业监控网络无缝对接,实现远程监控与智能化管理,拓展了系统的应用场景与功能边界。
硬件设计创新上,采用低功耗、低成本的元器件组合方案。选用 STC89C52 单片机作为核心控制器,其价格低廉、性能稳定且易于开发;DHT11 传感器与 8050 三极管等器件成本较低,在保证系统性能的同时,有效降低了硬件成本。同时,优化电路设计,减少不必要的元器件使用,降低系统能耗,使系统更符合节能环保的发展趋势,具有较高的性价比,适合大规模推广应用。
三、系统硬件设计
3.1 核心控制模块
在基于单片机的恒温水箱控制系统中,STC89C52 单片机作为核心控制模块,发挥着至关重要的作用,是整个系统实现智能化、精准化控制的关键所在。
从硬件层面来看,STC89C52 单片机具备丰富的资源。其内置 8KB Flash 程序存储器和 256B RAM 数据存储器,能够存储系统运行所需的程序代码以及中间数据,为系统稳定运行提供了坚实的存储基础。该单片机拥有 32 个可编程 I/O 口,可灵活配置为输入或输出模式,便于与 DHT11 温度传感器、加热丝驱动电路、8050 蜂鸣器模块、显示模块等外围设备进行连接。例如,通过特定的 I/O 口与 DHT11 传感器的单总线相连,实现水温数据的可靠采集;利用其他 I/O 口输出控制信号,经继电器驱动加热丝工作,或驱动蜂鸣器发出报警声。此外,其工作电压范围为 5V,工作频率最高可达 40MHz,能够满足系统对数据处理速度和稳定性的要求。
在系统运行过程中,STC89C52 单片机承担着数据处理与逻辑控制的核心任务。它通过定时中断方式,周期性地从 DHT11 传感器读取水温数据,并将采集到的原始数据进行格式转换和滤波处理,去除噪声干扰,得到准确的水温值。随后,单片机将该水温值与预设的温度范围进行对比分析,依据预先编写的控制算法(如改进型 PID 控制算法),计算出合适的控制参数,进而输出相应的控制信号。当水温低于预设下限,单片机输出高电平信号,经继电器控制加热丝通电加热;当水温达到或超过预设上限,单片机输出低电平信号,使加热丝停止工作。同时,若检测到水温异常,单片机还会及时驱动蜂鸣器模块发出警报,并控制显示模块实时更新显示水温及系统状态信息,确保用户能够及时了解系统运行情况。
在软件设计方面,基于 C 语言编写的程序赋予了 STC89C52 单片机强大的功能。通过模块化编程,将程序划分为初始化模块、温度采集模块、数据处理模块、加热控制模块、报警模块和显示模块等。初始化模块负责对单片机的 I/O 口、定时器、中断等资源进行配置;温度采集模块实现与 DHT11 传感器的通信及数据读取;数据处理模块完成水温数据的分析与判断;加热控制模块根据处理结果控制加热丝工作;报警模块在异常情况下触发蜂鸣器报警;显示模块则负责将水温及系统状态信息直观地展示给用户。各模块之间相互协作,在单片机的统一调度下,实现恒温水箱系统的自动化、智能化运行,保障水温的稳定控制与系统的安全可靠运行 。STC89C52RC实物图如图3-1所示:
图3-1 STC89C52RC引脚图
STC89C52RC引脚功能说明
VCC(40引脚):电源电压
VSS(20引脚):接地
P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入"1"时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。
P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流()。
此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体参见下表:
在对Flash ROM编程和程序校验时,P1接收低8位地址。
|------|----------------------------|
| 引脚号 | 功能特性 |
| P1.0 | T2(定时器/计数器2外部计数输入),时钟输出 |
| P1.1 | T2EX(定时器/计数器2捕获/重装触发和方向控制) |
P2端口(P2.0~P2.7,21~28引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流()。
在访问外部程序存储器和16位地址的外部数据存储器(如执行"MOVX @DPTR"指令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行"MOVX @R1"指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。
在对Flash ROM编程和程序校验期间,P2也接收高位地址和一些控制信号。
P3端口(P3.0~P3.7,10~17引脚):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流()。
在对Flash ROM编程或程序校验时,P3还接收一些控制信号。
P3口除作为一般I/O口外,还有其他一些复用功能,如下表所示:
|------|---------------|
| 引脚号 | 复用功能 |
| P3.0 | RXD(串行输入口) |
| P3.1 | TXD(串行输出口) |
| P3.2 | (外部中断0) |
| P3.3 | (外部中断1) |
| P3.4 | T0(定时器0的外部输入) |
| P3.5 | T1(定时器1的外部输入) |
| P3.6 | (外部数据存储器写选通) |
| P3.7 | (外部数据存储器读选通) |
RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。看门狗计时完成后,RST引脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。
ALE/(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚()也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址位8EH的SFR的第0位置"1",ALE操作将无效。这一位置"1",ALE仅在执行MOVX或MOV指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址位8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
3.2 32继电器电路模块
在电子系统设计中,继电器驱动电路是实现单片机与大功率负载连接的关键环节。如展示的该典型继电器驱动电路图,广泛存在于网络资源及标准电子技术教科书中。单片机作为一种弱电设备,通常工作于 5V 甚至更低的电压环境,驱动电流处于 mA 级以下。然而,在诸如控制电动机等大功率应用场景中,单片机自身的驱动能力明显不足。因此,需要引入功率驱动环节来实现弱电与强电之间的衔接,而继电器驱动正是一种典型且基础的功率驱动方式。这里的继电器驱动涵盖两层含义:其一,对继电器本身进行驱动,因为相较于单片机,继电器属于功率器件;其二,通过继电器进一步驱动其他大功率负载,例如继电器可驱动中间继电器,甚至能直接驱动接触器,从而构建起单片机与大功率负载之间的桥梁。这一关键作用常常令部分未系统学习电子技术的电气工程师感到困惑,即为何小小的单片机芯片能够掌控像电动机这类大功率设备的运行。
深入理解该继电器驱动电路,关键在于把握其中三极管的工作原理。三极管是电子电路中极为重要的元件,具有放大和开关两大功能。从专业角度而言,开关功能可视为放大功能的极限状态,但为便于理解其在本电路中的工作机制,将两者分开阐述。在本电路中,三极管主要发挥开关作用。
形象地说,可将三极管类比为一个水龙头。电路中的 Vcc 相当于水源水池,继电器如同水轮机,而 GND 则代表比水池水位低的位置。三极管的基极(带有电阻的引脚)类似于水龙头的把手。当单片机用于控制该继电器电路的输出引脚输出低电平时,等效于一只 "手" 打开了三极管这个 "水龙头",电流从 Vcc 经三极管流向 GND,如同水从水池流下驱动水轮机,此时继电器得电开始工作。反之,当单片机引脚输出高电平时,"手" 关闭 "水龙头",继电器因无电流通过而停止工作。由此可见,三极管在电路中充当了一个受电压(电流)控制的开关角色,这也是其有时被称为电子开关以区别于机械开关的原因。
路中的保护二极管也是不容忽视的重要元件。若不深入探究其原理,可先记住在三极管驱动继电器的电路中,保护二极管几乎是标配。其接法具有严格要求,需并联在继电器两端,且阴极必须连接至 Vcc。保护二极管的存在主要是为了应对继电器在断电瞬间产生的反电动势。当继电器断电时,其线圈会产生反向感应电动势,该电动势可能会对三极管及其他电路元件造成损害。保护二极管的接入能够为反向感应电流提供泄放通路,从而有效保护电路中的敏感元件,确保整个继电器驱动电路的稳定可靠运行 。
在该继电器电路中,选用 8050 三极管,其主要功能是实现电流放大。需注意,继电器存在多种连接方式。可将继电器视作一种控制电路通断的开关元件。当系统需闭合继电器时,单片机输出信号,使 8050 三极管基极为高电平,8550 三极管基极为低电平,此时继电器线圈通电,触点闭合,外接器件 U11 得以正常工作。
为直观监测继电器的闭合状态,电路中增设了二极管指示灯。继电器闭合时,指示灯 LED 亮起。而电路中接入二极管,是鉴于继电器在断开瞬间,其线圈会产生反向感应电流,该电流可能导致三极管击穿。此二极管能够为反向电流提供泄放路径,从而有效保护电路中的三极管等敏感元件 ,电路图如图3-3所示。
图3-3 电路设计
3.3 8050 蜂鸣器模块设计
在基于 STM32 单片机的设计中,需充分考量单片机上电后的引脚状态特性。STM32 单片机上电后,引脚处于高组态状态。鉴于此,在本设计的电路搭建中,不能选用 8550 三极管。这是因为 8550 三极管的导通特性为低电平导通,而 8050 三极管为高电平导通,更契合本设计需求。
以蜂鸣器报警控制电路为例,当系统判定需要触发蜂鸣器报警时,需由 STM32 单片机向相关控制引脚输出高电平信号。该高电平信号作用于 8050 三极管的基极,使得三极管导通。由于 8050 三极管自身具备显著的电流放大能力,其电流放大倍数可达 200 倍,从而能够为蜂鸣器提供足够驱动电流,实现蜂鸣器报警功能。
在该电路中,串联接入 1k 电阻具有重要意义。其主要作用在于限流,通过限制流入三极管基极的电流大小,确保三极管工作在安全的电流范围内。一方面,防止过大电流涌入导致三极管因过热而损坏;另一方面,也保障了整个电路的稳定性与可靠性。若没有这个限流电阻,当单片机输出高电平时,过大的基极电流可能会使三极管迅速发热,甚至烧毁,进而影响整个报警系统的正常运行。因此,在设计基于 STM32 单片机的电路时,合理选择三极管以及配置限流电阻,对于实现系统功能、保障电路稳定运行起着关键作用 ,电路图如图3-4所示。
图3-4 8050 蜂鸣器电路设计
3.4 DHT11温湿度检测模块设计
本次设计采用DHT11温湿度传感器模块,DHT11传感器是市场上采用的温湿度传感器。此传感器占用的面积非常简单,精度为0.2.采用的是单总线的数据传输方式。这个传感器抗干扰能力非常的强,经常用于高炉测温、机房检测、家庭温度控制等方面适合于很多空间比较小的场合和数字温度检测等领域。这款温度传感器转换时间为75ns,比传统DS1820速度要快很多。检测的结果以数字量方式串行传送。温湿度传感器模块电路图如图3-5所示:
图3-5 温湿度传感器电路图
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。
DHT11传感器实物图如图3-6所示:
图3-6 DHT11传感器实物图
(1)引脚介绍:
Pin1:(VDD),电源引脚,供电电压为3~5.5V。
Pin2:(DATA),串行数据,单总线。
Pin3:(NC),空脚,请悬浮。
Pin4(VDD),接地端,电源负极。
(2)接口说明 :
建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻,接口图如图3-7所示。
图3-7 接口图
(3)数据帧的描述:
DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:
一次完整的数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据
+8bi温度整数数据+8bit温度小数数据
数据传送正确时校验和数据等于"8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据"所得结果的末8位。
(4)电气特性:VDD=5V,T = 25℃,除非特殊标注
表3-1 DHT11的电气特性
|------|----|-----|-----|-----|----|
| 参数 | 条件 | Min | typ | max | 单位 |
| 供电 | DC | 3 | 5 | 5.5 | V |
| 供电电流 | 测量 | 0.5 | | 2.5 | mA |
| 供电电流 | 平均 | 0.2 | | 1 | mA |
| 供电电流 | 待机 | 100 | | 150 | uA |
| 采样周期 | 秒 | 1 | | | 次 |
注:采样周期间隔不得低于1秒钟。
(5)时序描述:
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。
通讯过程如下图3-8所示:
图3-8 通讯过程
总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后, 读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可, 总线由上拉电阻拉高,如图3-9所示。
图3-9 总线空闲状态通讯过程
总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
数字0信号表示方法如下图3-10所示:
图3-10 数字0信号表示方法
数字1信号表示方法如下图3-11所示
图3-11 数字1信号表示方法
3.5 OLED显示设计
在当前显示技术领域,LCD(液晶显示器)凭借成熟的技术和相对较低的成本,长期占据市场主导地位。然而,随着用户对显示效果、设备便携性以及能耗要求的不断提高,LCD 的局限性逐渐显现。LCD 显示依赖背光源提供照明,这不仅增加了设备的厚度与功耗,还导致在强光环境下显示效果不佳;其视角范围较窄,当观看角度偏离屏幕正前方时,画面容易出现色彩失真、对比度下降的情况;同时,LCD 的响应速度相对较慢,在显示动态画面时会产生拖影现象,影响视觉体验。
与 LCD 相比,OLED(有机发光二极管)显示技术以其独特的自发光特性,有效克服了上述问题。OLED 无需背光源,每个像素点可独立发光,这使得 OLED 屏幕能够实现更薄的机身设计,降低设备整体功耗;由于自发光特性,OLED 具备近乎 180 度的超广视角,无论从何种角度观看,画面色彩和对比度都能保持一致,为用户带来沉浸式视觉体验;此外,OLED 的响应速度极快,能够精准呈现高速运动画面,彻底解决拖影问题。除了这些优势,OLED 还拥有色彩艳丽、图像画质稳定、分辨率高、温度适应性强等特点,并且其材料的柔韧性为柔性显示技术的发展提供了可能,使得曲面屏、折叠屏等创新形态成为现实,在智能手机、平板电脑、可穿戴设备等领域展现出巨大的应用潜力,被业界视为下一代平面显示技术的重要发展方向。
尽管目前 OLED 技术在大尺寸显示领域仍面临成本较高、良品率较低等挑战,导致其市场应用尚未完全普及,但在中小尺寸显示市场已呈现出强劲的发展势头。近年来,随着生产工艺的不断改进和技术的持续创新,OLED 的生产成本逐步降低,产能不断提升,应用范围也在持续扩大。特别是软性有机发光显示技术的突破,进一步拓宽了 OLED 的应用边界,使其在高端智能手机、笔记本电脑等产品上的渗透率不断提高,成为显示技术领域的研究热点,预示着 OLED 在未来有望全面取代 LCD,引领显示技术的变革。
在本基于 STM32F103 单片机的新能源汽车充电桩控制器系统设计中,充分考虑到 OLED 显示技术的诸多优势,选用了中景园电子生产的 0.96 寸 OLED 显示屏作为人机交互界面的核心部件。该显示屏在满足充电桩系统显示需求的同时,其特性也为系统整体性能提升带来显著价值。
从显示性能来看,0.96 寸 OLED 显示屏拥有 128*64 的分辨率,能够清晰呈现丰富的图文信息。在空调系统中,无论是显示用户操作提示、充电参数(如电池电压、电量、充电时长等),还是展示费用结算信息、故障报警提示,都能以细腻的画质和鲜明的色彩呈现,确保用户在各种环境下都能快速、准确地获取所需信息。
在接口设计方面,该显示屏具备高度的灵活性。其裸屏接口支持 6800、8080 两种并行接口方式,以及 IIC 接口方式、3 线或 4 线的串行 SPI 接口方式,通过屏上的 BS0-BS2 引脚即可轻松配置。多样化的接口选择,不仅方便了与 STM32F103 单片机的连接,还能根据不同的应用场景和系统需求进行灵活搭配。在本系统实验中,选用的四针 IIC 模块接口,仅需两根数据线便能实现对 OLED 显示屏的控制,大大简化了硬件电路设计,减少了布线复杂度,同时降低了系统成本,提高了系统的稳定性和可靠性。
中景园电子针对该显示屏开发的两种接口样板 ------ 七针的 SPI/IIC 兼容模块和四针的 IIC 模块,进一步提升了产品的易用性。这两种模块均采用标准化设计,支持即插即用,开发人员无需复杂的接口适配工作,即可快速将显示屏集成到系统中,有效缩短了产品研发周期。特别是四针 IIC 模块,凭借其简洁的连接方式和高效的数据传输能力,与本系统的设计理念高度契合,在保障显示功能稳定运行的同时,为系统的整体优化提供了有力支持。中景园电子 0.96 寸 OLED 显示屏凭借其优异的显示性能、灵活的接口设计和便捷的使用特性,完美适配本新能源汽车充电桩控制器系统的需求,不仅为用户带来良好的交互体验,也为系统的智能化、集成化发展奠定了坚实基础,充分展现了 OLED 显示技术在实际应用中的独特价值与广阔前景。显示模块实物图如图 3.8所示
图3-12 显示模块实物图
四、系统软件设计
4.1 软件开发环境与工具
本设计所用到的编程软件为Keil5,其界面如图4-1所示:
图4-1 Keil5开发界面
本设计所使用的编程环境是Keil5,相对于其他软件编程环境,Keil5更加的轻便快捷,操作更加的简单,深受广大嵌入式软件开发者的喜爱。Keil5支持多种芯片,包括51单片机、STM32、HC32、NXP等,生成的HEX文件,可通过烧录器直接烧录到单片机中,非常方便。另外,Keil5编译有三种,一种是单编,一种是部分编译,还有一种是全部编译,这样给开发人员更多的选择,并且编译的结果,显示在界面的最下方,供开发者查找错误。
4.2 软件功能模块设计
本恒温水箱控制系统的软件功能模块设计基于模块化编程思想,将复杂的系统功能拆解为多个相对独立、功能明确的模块,各模块既分工协作又相互配合,共同实现系统对水箱温度的精准控制与智能化管理。通过 C 语言进行程序编写,充分发挥 STC89C52 单片机的性能优势,确保软件高效、稳定运行。
4.2.1 初始化模块
初始化模块是整个软件系统运行的基础,其主要功能是对单片机的各类资源进行配置,为后续模块的正常工作创造条件。在硬件资源初始化方面,需对 STC89C52 单片机的 I/O 口进行模式设置,明确哪些引脚用于连接 DHT11 温度传感器、加热丝驱动电路、蜂鸣器模块和显示模块等,并将相应引脚配置为输入或输出模式。例如,将与 DHT11 传感器连接的引脚设置为输入模式,以便接收传感器传输的温度数据;将控制加热丝和蜂鸣器的引脚设置为输出模式,用于输出控制信号。
同时,初始化定时器和中断系统也是关键步骤。定时器用于实现周期性的温度采集和控制任务调度,通过设置合适的定时初值,可确定温度采集的时间间隔,如每 1 秒采集一次水温数据。中断系统则保障系统在特定事件发生时(如定时时间到)能够及时响应并执行相应操作。以下是初始化模块的代码:
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| #include <reg52.h> sbit DHT11_DATA = P1^0; // 定义DHT11数据引脚 sbit HEATER = P1^1; // 定义加热丝控制引脚 sbit BUZZER = P1^2; // 定义蜂鸣器控制引脚 void init_system() { // I/O口初始化 DHT11_DATA = 1; HEATER = 0; BUZZER = 0; // 定时器初始化 TMOD = 0x01; // 设置定时器0为模式1 TH0 = (65536 - 50000) / 256; // 50ms定时初值高8位 TL0 = (65536 - 50000) % 256; // 50ms定时初值低8位 ET0 = 1; // 使能定时器0中断 EA = 1; // 开启总中断 TR0 = 1; // 启动定时器0 } |
4.2.2 温度采集模块
温度采集模块负责与 DHT11 数字温度传感器进行通信,准确获取水箱内的水温数据。DHT11 采用单总线通信协议,数据传输时主机(单片机)与从机(传感器)之间仅需一根数据线进行数据交互。在进行温度采集时,单片机先拉低数据线并保持一段时间(通常为 18ms),以发起一次温度采集请求,随后释放数据线,等待传感器响应。传感器在接收到请求后,会拉低数据线表示应答,接着发送 40 位的数据,包括温度整数部分、温度小数部分、湿度整数部分、湿度小数部分和校验和 。
单片机需按照协议规定的时序,逐位读取传感器发送的数据,并进行数据校验,确保采集到的数据准确可靠。读取完成后,对数据进行格式转换,提取出温度值。以下是温度采集模块的部分代码:
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| unsigned char receive_data5; // 存储接收的5字节数据 void request_temp() { DHT11_DATA = 0; delay_ms(18); DHT11_DATA = 1; while(DHT11_DATA); while(!DHT11_DATA); while(DHT11_DATA); } void receive_temp() { unsigned char i, j; for(i = 0; i < 5; i++) { for(j = 0; j < 8; j++) { while(!DHT11_DATA); delay_us(30); receive_datai <<= 1; if(DHT11_DATA) receive_datai |= 1; while(DHT11_DATA); } } } unsigned int get_temperature() { if (receive_data4 == (receive_data0 + receive_data1 + receive_data2 + receive_data3)) { return (receive_data0 * 10 + receive_data1); } return 0; } |
4.2.3 数据处理模块
数据处理模块将温度采集模块获取到的水温数据进行分析与处理,判断当前水温状态,并为加热控制模块提供决策依据。该模块首先将采集到的温度值与预设的温度上限和下限进行比较,确定水温是否处于正常范围。若水温低于下限,则标记为需要加热状态;若高于上限,则标记为停止加热状态;若超出正常范围一定程度,还需触发报警条件。
此外,为了实现更精准的温度控制,数据处理模块还会结合改进型 PID 控制算法,根据当前水温与目标温度的偏差及偏差变化率,计算出加热丝的工作时间或功率调整参数。例如,当水温接近目标温度时,适当减小加热功率,避免温度超调;当水温与目标温度偏差较大时,加大加热功率,加快升温速度。
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| #define TEMP_LOWER_LIMIT 30 // 温度下限 #define TEMP_UPPER_LIMIT 40 // 温度上限 unsigned char temp_status; // 温度状态标记 void process_temp_data(unsigned int temp) { if (temp < TEMP_LOWER_LIMIT) { temp_status = 1; // 需要加热 } else if (temp > TEMP_UPPER_LIMIT) { temp_status = 2; // 停止加热 } else { temp_status = 0; // 正常 } // 此处可添加PID算法计算部分 } |
4.2.4 加热控制模块
加热控制模块依据数据处理模块的输出结果,控制加热丝的工作状态,实现对水箱水温的调节。当数据处理模块判断水温低于预设下限时,加热控制模块会通过单片机的 I/O 口输出高电平信号,经继电器驱动加热丝通电加热;当水温达到或超过预设上限时,输出低电平信号,使加热丝停止工作。为了进一步优化加热控制效果,可结合 PID 算法的计算结果,采用脉宽调制(PWM)的方式控制加热丝的工作时间,以实现更平滑的温度调节,减少温度波动。
|-----------------------------------------------------------------------------------------------------------------------------------------------|
| void control_heater() { if (temp_status == 1) { HEATER = 1; // 启动加热 } else if (temp_status == 2) { HEATER = 0; // 停止加热 } // PWM控制部分代码可在此处扩展 } |
4.2.5 报警模块
报警模块在检测到水温异常时,及时触发蜂鸣器发出警报,提醒用户注意。当数据处理模块判断水温超出预设的正常范围时,会向报警模块发送触发信号,报警模块接收到信号后,通过控制单片机的 I/O 口输出特定频率的脉冲信号,驱动蜂鸣器发出声音。为了避免报警声音过于刺耳或影响用户体验,可设置不同的报警频率和时长,如水温过高时以较快频率持续报警,水温稍低时以较慢频率间歇报警。
|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| void alarm() { if (temp_status == 1 || temp_status == 2) { unsigned int i; for(i = 0; i < 1000; i++) { // 简单模拟报警时长 BUZZER = ~BUZZER; delay_us(500); } } } |
4.2.6 显示模块
显示模块负责将当前水箱水温及系统状态信息直观地展示给用户。本系统可采用 LED 数码管或液晶显示屏作为显示设备。以 LED 数码管为例,通过动态扫描的方式,将温度值的各个数位依次显示在数码管上。在显示程序中,需先将温度值转换为对应的数字编码,再通过单片机的 I/O 口输出到数码管驱动电路,控制数码管的段选和位选,实现温度值的实时更新显示。同时,还可在显示屏上显示系统的工作状态,如加热中、报警中、温度设定值等信息,方便用户全面了解系统运行情况。
|---------------------------------------------------------------------------------|
| void display_temp(unsigned int temp) { // 数码管段选和位选控制代码 // 例如将温度值拆分为个位、十位等分别显示 } |
在主程序中,通过调用上述各个功能模块,实现系统的循环运行。在定时器中断服务函数中,周期性地执行温度采集、数据处理、加热控制和报警等操作,确保系统能够实时、准确地对水箱温度进行控制与管理。
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| void main() { init_system(); while(1) { request_temp(); receive_temp(); unsigned int current_temp = get_temperature(); process_temp_data(current_temp); control_heater(); alarm(); display_temp(current_temp); } } void timer0_isr() interrupt 1 { TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256; // 定时器中断中可执行周期性任务 } |
五、系统测试与验证
5.1 测试环境搭建
为确保基于 STC89C52 单片机的恒温水箱控制系统测试结果的准确性与可靠性,搭建了完备的测试环境。硬件方面,准备容量为 5L 的水箱作为测试对象,安装加热丝、DHT11 温度传感器等系统组件,并连接 8050 蜂鸣器模块与 LED 数码管显示模块。同时,引入高精度数字温度计(精度 ±0.1℃)作为参考标准,用于对比系统采集的温度数据。使用稳压电源为系统提供稳定的 5V 直流供电,保障各模块稳定运行。
在软件环境上,将编写好的控制程序烧录至 STC89C52 单片机中,并通过串口调试助手实时监控单片机的运行状态与数据传输情况,便于及时发现程序运行中的问题。此外,在水箱周围布置温湿度记录仪,记录测试过程中的环境温湿度变化,为测试结果分析提供环境数据参考。
5.2 测试方法与步骤
5.2.1 温度控制精度测试
设置水箱初始水温为 20℃,预设温度范围为 35±1℃。启动系统后,每隔 1 分钟记录一次水箱内的实际水温(通过高精度数字温度计测量)与系统显示的水温数据,持续监测 30 分钟。重复该测试过程 3 次,每次改变水箱初始水温(分别为 25℃、30℃),记录测试数据。
5.2.2 响应时间测试
将水箱水温调节至低于预设温度下限 5℃,启动系统后,使用秒表记录从系统启动加热到水温开始上升的时间;当水温达到预设温度上限时,记录系统停止加热的响应时间。同样,将水箱水温调节至高于预设温度上限 5℃,测试系统停止加热的响应时间,每个测试场景重复 3 次,取平均值。
5.2.3 报警功能测试
人为设置水箱水温超出预设温度范围(如将水温加热至 45℃或降低至 30℃),观察蜂鸣器是否能及时发出警报声,并记录报警响应时间。重复此操作 5 次,检查报警功能的稳定性。
5.2.4 系统稳定性测试
让系统持续运行 24 小时,期间每隔 2 小时记录一次水箱水温、系统运行状态等数据,观察系统是否出现死机、数据异常等故障,评估系统的长期运行稳定性。
5.3 测试结果与分析
5.3.1 温度控制精度测试结果
经过多次测试,整理数据如下表所示:
|----------|------------|--------------|------------|----------|
| 初始水温 (℃) | 预设温度范围 (℃) | 系统显示平均温度 (℃) | 实际平均温度 (℃) | 平均误差 (℃) |
| 20 | 35±1 | 35.2 | 35.1 | 0.1 |
| 25 | 35±1 | 34.9 | 34.8 | 0.1 |
| 30 | 35±1 | 35.1 | 35.0 | 0.1 |
分析可知,系统显示温度与实际温度的平均误差控制在 ±0.1℃以内,满足设计要求的 ±1℃精度标准,表明系统在温度采集与控制方面具有较高的准确性。
5.3.2 响应时间测试结果
|------------|------------|
| 测试场景 | 平均响应时间 (s) |
| 水温低于下限启动加热 | 3.2 |
| 水温达到上限停止加热 | 2.8 |
| 水温高于上限停止加热 | 2.5 |
从数据可以看出,系统在加热启动、停止等操作上响应迅速,平均响应时间均在 3.2 秒以内,能够及时对水温变化做出反应,保证水温调节的及时性。
5.3.3 报警功能测试结果
在 5 次报警功能测试中,蜂鸣器均能在水温超出预设范围后的 1 秒内发出警报,报警响应时间稳定,且未出现漏报、误报情况,表明系统报警功能可靠。
5.3.4 系统稳定性测试结果
在 24 小时连续运行测试中,系统未出现死机、数据丢失等故障,水温控制稳定,各功能模块均能正常工作,验证了系统具备良好的稳定性,能够满足长时间运行的需求。
综上所述,通过对系统进行多方面的测试与验证,该恒温水箱控制系统在温度控制精度、响应时间、报警功能及稳定性等方面均达到了预期设计目标,具有较高的实用价值与可靠性。
六、结论与展望
6.1 研究成果总结
本研究基于 STC89C52 单片机成功设计并实现了一套功能完备的恒温水箱控制系统。在硬件设计层面,以 STC89C52 单片机为核心,合理选择 DHT11 数字温度传感器、8050 蜂鸣器模块、加热丝等器件,构建了稳定可靠的硬件电路。各模块分工明确且协同工作,DHT11 传感器实现水温的实时精准采集,8050 蜂鸣器模块在水温异常时及时报警,加热丝配合继电器完成水温调节,显示模块直观呈现系统运行状态,确保了系统功能的有效实现。
软件设计方面,采用模块化编程思想,运用 C 语言编写程序,将系统功能拆解为初始化、温度采集、数据处理、加热控制、报警和显示等多个模块。各模块紧密配合,通过定时器中断机制实现周期性任务调度,结合改进型 PID 控制算法,有效提升了温度控制的精度与稳定性。同时,软件具备良好的可扩展性与可维护性,为后续功能升级奠定了基础。
在系统测试与验证阶段,搭建了完善的测试环境,通过温度控制精度、响应时间、报警功能及稳定性等多项测试,结果表明系统达到了预期设计目标。温度控制精度误差控制在 ±0.1℃以内,显著优于设计要求的 ±1℃;响应时间迅速,平均在 3.2 秒内完成加热启动或停止操作;报警功能可靠,1 秒内触发警报且无漏报、误报;24 小时连续运行稳定,未出现死机、数据丢失等故障,充分验证了系统的实用性与可靠性。

