基于ARM的嵌入式温度控制系统的设计定稿_第1页
基于ARM的嵌入式温度控制系统的设计定稿_第2页
基于ARM的嵌入式温度控制系统的设计定稿_第3页
基于ARM的嵌入式温度控制系统的设计定稿_第4页
基于ARM的嵌入式温度控制系统的设计定稿_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于ARM的嵌入式温度控制系统的设计摘要:温度报警在生活、工业以及农业上都具有广泛的用途,比如生活上设置一个温度报警功能,可以转换为对火灾的监控;工业上锅炉对温度报警功能,实现对锅炉异常监控等,所以高可靠高精度温度报警控制系统的设计具有重要意义。本文设计以温度报警和控制功能为核心的温度控制系统,首先实现对实现该功能的要素进行分析,设计系统方案,选择确定以DS18B20传感器来实现温度的检测功能,采用ARM单片机接受传感器检测到的温度数据后,与设定的温度上限范围,温度下限范围进行比较,自动识别温度是否异常,如果识别到温度异常,设计蜂鸣器和LED进行报警,实现温度报警功能,同时采用继电器调节升温和降温功能,使得温度维持在给定范围内;通过分析各个模块的特点,对嵌入式温度控制系统的硬件电路做了详细的分析,对软件算法进行详细的分析,最后对实物制作,完成了以温度控制为核心的嵌入式温度控制系统的实物焊接与制作,设计出一款温度控制系统,其中系统工作稳定,检测灵敏度高,实现对温度的检测、显示以及控制。关键词:DS18B20温度传感器,ARM单片机,温度控制,报警DesignofembeddedtemperaturecontrolsystembasedonARMAbstract:Temperaturealarmhasawiderangeofapplicationsinlife,industryandagriculture,suchassettingatemperaturealarmfunctioninlife,whichcanbeconvertedintofiremonitoring;Industrialboilertemperaturealarmfunction,toachieveabnormalmonitoringoftheboiler,sothedesignofhighreliableandhighprecisiontemperaturealarmcontrolsystemisofgreatsignificance.Inthispaper,atemperaturecontrolsystemwithtemperaturealarmandcontrolfunctionasthecoreisdesigned.Firstly,theelementsofrealizingthefunctionareanalyzed,thesystemschemeisdesigned,andtheDS18B20sensorisselectedtorealizethetemperaturedetectionfunction.Afterreceivingthetemperaturedatadetectedbythesensor,armsingle-chipmicrocomputerisusedtocomparewiththesetuppertemperaturerangeandlowertemperaturerangetoautomaticallyidentifythetemperatureWhetherthetemperatureisabnormal?Ifthetemperatureisabnormal,thebuzzerandLEDaredesignedtogiveanalarmtorealizethetemperaturealarmfunction.Atthesametime,therelayisusedtoadjusttheheatingandcoolingfunctionstokeepthetemperaturewithinthegivenrange.Byanalyzingthecharacteristicsofeachmodule,thehardwarecircuitoftheembeddedtemperaturecontrolsystemisanalyzedindetail,andthesoftwarealgorithmisanalyzedindetailAfterthephysicalproduction,thephysicalweldingandproductionoftheembeddedtemperaturecontrolsystemwithtemperaturecontrolasthecorearecompleted,andatemperaturecontrolsystemisdesigned,inwhichthesystemworksstably,hashighdetectionsensitivity,andrealizesthedetection,displayandcontroloftemperature.Keywords:DS18B20temperaturesensor,ARMMCU,temperaturecontrol,alarm第1章绪论1.1研究背景和意义在工业自动化控制领域,对于温度的控制一直是人们研究的热点,它的重要性不言而喻。就好比炼钢厂在炼钢的时候,必须要对刚刚从火炉里拿出来的钢铁做一个热处理,只有这样炼出来的钢铁才能够达到使用要求;再者当塑料厂制造塑料产品时,需要严格把控好生产过程中的温度,每一道不同的工艺所要求的温度是不一样的,只有这样才能制造出合格的产品。科学技术的不断提高,使得每个行业在自动控制领域对控制系统的性能要求越来越严格,在温度控制的过程中总是会出现许多不可预料的因素,这往往会导致被控温度变得难以掌握。温度测量控制系统就是集测量、处理以及监测等多种性能为一身的机电控制系统。这种系统可以用来帮助使用者管理粮库、药房以及仓库的实时温度等等,因此温度测量控制系统不仅能够让人们了解以及预测温度怎样变化,还能够使人们在工作中的损失降到最低,并让成本得到有效的节省,确保企业经济效益的提高。目前,我国的信息化技术可以说是日新月异,发展速度非常之快,越来越多的场所的办公产品都是自动化仪器。不难看出越来越多的电器将会被用在一个很小空间的办公环境中,因此这个很小的空间里就会出现比很多的电源装置,可能此时极易由于电流过载而导致火灾现象的发生,这是相当危险的,所以不得不对电气设备所在的空间进行温度监测,以防发生不必要的火灾险情。一旦我们能够实时掌握此区域内的温度值,那么即使有火灾发生也会被人们发现,方便人们立刻采取相应措施去控制火情、将火灾伤害降到最低。1.2发展现状从上世纪八十年代以来,因为工业技术的快速发展的需要,越来越多的新兴技术开始迅猛发展比如微电子以及计算机技术就是时代发展的重要产物。温度测控系统在国外发展的非常快,并在很短的时间内它已经发展的较为成熟了,这些在控制领域表现尤为突出,智能化、自适应以及参数自整定技术也存在很多相当不错的成绩。其中,日本、美国以及德国的温度测控技术在世界上处于遥遥领先的地位,它们国内的生产温控产品的厂家比较多,并且已经很成功的把它们的产品销往世界各地,这些产品在大惯性以及大滞后的测量环境里能够发挥出很大的作用。它们基本具有上述优点,即它们能够对自己所测量出来的参数进行相应的调整,然后以历史经验为依据去预测参数变化情况,从而使得所测参数值尽可能的准确。温度控制系统不仅控制精度十分令人满意而且具备能够抵抗外界干扰的能力。如今,国外的温度测控产品越来越智能化以及小型化。

我国对于温度控制仪器的研究还处于发展阶段,整体的技术水平还不能使人们满意,现在国内的温度测控系统中主要的元件为PID控制器,它的使用范围比较窄,基本不能用于测量复杂环境下的温度变化,我国与国外温度测控仪表存在着很大的距离,通过几下几点就能看出来:1.整个温度测控行业企业规模不大、而且也不集中,不利于技术的分享与集中,各自为伍致使科研能力受到制约,发展较为缓慢。2.市面上的产品多是PID控制器,智能化程度差。3.产品所使用的主要技术以及算法还不够先进。虽然我国在许多方面的表现都不如外国其它国家,但是我坚信随着时间的推移,在我国政府的大力支持下,我们的研发产品一定能够赶超世界前列。我国政府现在已经就此成立了相关的研发中心,很多企业骨干也参与进来,使得我国的温度测控技术有了很好的发展平台和应用前景。我国政府现在大力号召企业节能减排,许多企业已经采取相应措施,它们已经引进了最先进的温度测控系统去对温度进行实时监测。温度测控系统是集测量实时温度值、数据处理,监测等功能与一身的综合性控制系统。它的应用为企业减轻了许多的压力,节约了不少的劳动力和成本,并且也大大加快了温度检测的速度,测量出来的结果也比人工测量的结果更加可靠,使得企业效益得到很大提升。温度测控系统里面的核心零部件就是测量仪,一个相对质量较好功能完善的测量仪所带来的积极效应是非常巨大的。在温度测控系统中,所应用的传感器种类五花八门,不同的传感器测温方法也不一样。一般来说按照安装方式可分为接触式和非接触式。1.接触式传感器:直接接触目标物体来完成测量。在某个区域内,主要依靠与目标物之间热传递来完成物体温度的测量。2.非接触式传感器:元件与目标物不接触,比较适合用来测量处于运动状态、体积小温度低的目标物,也能够监测被测物体的温度分布情况。1.3本设计任务及要求实现以温度控制功能为核心的嵌入式温度控制系统,具有检测温度范围宽,显示检测温度值,同时实现温度超差自动报警和继电器控制功能,采用LED指示温度异常情况,要求如下:1.对环境温度实时检测,温度检测范围0到125摄氏度,自动识别温度异常。2.设计声光报警功能以及LED指示温度异常功能。3.设计升温继电器和降温继电器,当温度出现异常时,继电器工作,将温度维持在给定范围内。4.能实现对检测的温度数据参数显示,保证实时知晓相关参数。5.为了提高系统功能完整性,设计按键进入参数设置功能,对参数的报警上下界限进行设置。第2章嵌入式温度控制系统方案设计2.1总体方框图以温度控制功能为核心的报警系统,通过满足系统要求的传感器检测温度,单片机读取传感器检测温度值后,对该温度值显示,同时与设定温度上限和下限比较后,判断是否存在温度异常,对蜂鸣器和继电器进行控制,系统框图如图2-1所示。图2-1系统框图2.2温度模块选择介绍生活中经常被应用在各种电器里面的能够感测温度信号的探测器主要有三类,分别是定温式探测器、差温式探测器和差定温式探测器。定温式探测器从本质上来讲就是相当于一款温度传感器,当所测温度升高到与开始设置的温度值一样时,那么就会响应并且发出报警声。经常被用来作为温度探测器里面关键元件的主要有以下几类:铂丝、熔点较小的合金、热敏电阻以及双金属板和双金属管。方案一:选择模拟集成温度传感器,原因是它由硅半导体集成化这种工艺来制造的,所以习惯性的也把它叫做硅传感器或者是单片集成温度传感器。比较常见的此类产品为AD590。AD590属于温度-电流传感器,其主要的功能是可以有效改善系统抵抗外界因素干扰的能力,但仅仅依靠它并不能完成任务还要借助于相应的放大以及A/D转换电路,实现起来需要连接比较复杂的电路,使用集成电路能够有效减少它的增益偏差,但是却很难实现。方案二:选择数字单片机智能温度传感器,它里面主要含有五个模块,分别是A/D转换模块、传感器模块、处理模块、存储模块以及电路模块。我们常见的此类产品为DS18B20传感器。DS18B20传感器是由美国一家公司所制造出来的一类线式温度传感器,它最高可测量125摄氏度最低能够测量零下55摄氏度,并且具有很高的分辨率,它的结果是以16位数字量方式来对外传输,它既可以从寄生电源处获得电能,也能够从远端处获得电能。它还能够同时连接到中央处理器的一条传输线上,所以中央处理器只需要一个通信接口就能够从DS18B20传感器处获得信息,基本不怎么占用CPU的接线端口,而且实现起来并不困难,外接电路也极易实现。

通过上述两个方案的比较,因为方案二所使用的DS18B20传感器能把所有模块都放置在同一芯片上,方便与单片机连接,DS18B20传感器所用到的技术相比第一种方案里的AD590要更加的先进,因此本文将选择使用DS18B20传感器,DS18B20温度传感器工作原理如图2-2所示。图2-2工作原理如上图2-2中所示,首先低温度系数晶振将脉冲信号传输给计数器1,而高温度系数晶振的脉冲信号则会向计数器2方向传输。除此之外还有几个我们看不见的计数器藏在DS18B20传感器中,当芯片处于运动状态的时候,就会开始计量低温度系数晶振产生了多少脉冲信号从而转换成温度值以此来完成温度的测量工作,而高温度系数晶振则代表了计数器什么时候开始工作。2.3显示模块采用LCD1602实现对温度数据的显示,LCD1602的基本功能是显示非汉字,比如字母、数字内容显示,内部结构主要是有一些常见的多个5X7点阵位按照一定的规律构成,若干个点阵位可以实现对若干个字符的显示,因为LCD1602可以实现两行的显示操作,所以在内部增加了每个点阵位之间以及两个行之间的点距,实现对位与位之间的隔开,上下两行之间的隔开显示,正是因为点阵点距的作用,使得LCD1602不具备显示图像以及连续显示汉字的功能,LCD1602包括16个与外部连接和传递信息的引脚,LCD1602如图2-3所示。图2-3LCD16022.4单片机模块以STM32为核心来实现对温度数据的读取,对数码管的控制,对状态指示LED灯进行设置,该模块相比较传统8位单片机基本在各种嵌入式控制系统中都能满足使用要求,该核心模块的内核是基于ARM的Coxtex-M3的32位处理器,在一些高级别和高性能的使用场景时极其受欢迎。该单片机性能非常明显,有以下几点:价格与传统的51单片机几乎相当,外设和内部处理器应有尽有,上百种型号和规格,最大的特点是通信、AD模块等外设都是相对独立的,可以分别进行控制开关,因此工作时功耗超低。第3章嵌入式温度控制系统的硬件设计3.1硬件总体框图本文系统硬件包括单片机控制电路,温度检测电路,显示电路,按键控制电路以及温度控制电路,硬件总体框图如图3-1所示。

图3-1硬件总体框图DS18B20传感器电路:将温度数据传送给单片机,实现对温度的检测。三个按键电路:实现对温度调节界限的上限和下限调节。显示电路:采用LCD1602对检测的实时温度值和设置的界限值实时显示。升温和降温继电器:采用两路继电器实现对加热片和风扇驱动,实现升温和降温。报警电路:采用蜂鸣器当温度出现异常时,进行报警。单片机控制电路:接受传感器和按键电路的信息,对继电器以及报警和显示电路驱动。3.2单片机控制电路本文选择的是基于ARM的STM32F103做为温度控制系统的核心,与一般的MCU单片机一样,也包括复位电路,晶振电路以及电源电路等,其中STM32最小系统有三种有比单片机多的时钟模块,有PLL锁相环,高速外部时钟等,采用32.768kHz的高速外部时钟来实现低功耗操作,采用外部8M晶振与外部晶振配合起来使用,内部电路所产生的时钟频率大小就刚好是单片机需要的大小。在STM32的复位所对应的引脚一端各连接一个电阻和极性电容时,那么就可以实现单片机的复位功能,当电平保持两个时钟周期时才是完成了复位功能。复位电路分成了两个部分,分别是按键复位和上电复位,单片机主控电路如图3-2所示。图3-2单片机主控电路3.3温度检测电路温度检测电路如图3-3所示,对于DS18B20传感器的每个控制指令在DS18B20开发时都以规定好,单片机作为主控设备,必须通过对传感器发送指令才能实现温度数据的读取,比如当单片机的控制引脚输出0X44指令给DQ引脚时,就时温度启动转换指令开始,当单片机给DQ引脚输0xBE时,就代表对单片机准备对内部转换后的温度数据进行读取,再按照流程时序和约定指令时序进行温度的检测。单片机的PA0引脚与DQ引脚连接后,须发出一个480us的信号寻找DS18B20传感器的存在,因此单片机输出一个持续时间为480us的信号输出给DQ引脚,在DQ引脚接受到信号后,会对该信号做出一定的反应表示DS18B20传感器准备好正常工作,在寻找脉冲结束后,该引脚会被拉高,等待DS18B2O发出存在脉冲,寻找脉冲结束后不超过60us,DS18B20传感器会产生一个低电平信号,存在脉冲持续时间为60到240微秒之间,单片机如果读取到该存在脉冲,那么就代表着温度传感器和单片机之间的数据通信模式以及协议达成,可以为下一步传送温度数据做准备,如果在工作时引脚出现断路故障或者寻找脉冲时间不足,DS18B20传感器不会与单片机数据通信。前面两个步骤是单片机和DS18B20传感器为发送数据所作的准备,接着就是对ROM进行控制指令的发送,主要是对传感器的ROM进行操作,发出一个8位数的指令,该步骤在总线上只有一个传感器时可以省略,主要通过每个传感器特定的ID号来实现对总线上不同的传感器进行识别,紧接着发送对ROM操作的指令实现一共有8条相关的指令,按照顺序进行发送,是单片机对传感器控制的关键,主要包括读写数据,复制数据,温度转换开启,值复制以及模式切换,每一步都需按照规定的时序进行;然后执行对数据的读取,DS18B20传感器自温度转换接受后,按照读时序,将温度数据进行读取,最后将采集到的数据转化成实际温度。图3-3温度检测电路3.4LCD显示电路在本文设计的温度控制系统中,采用LCD显示值,第一排显示实时温度值,第二排显示温度的上限和下限值,LCD1602液晶屏电路如图3-4所示。图3-4LCD1602液晶屏电路设计PB口控制LCD的DB0数据口,PA1到PA2控制RS/RW/E引脚,按照下图时序,对通过对应指令显示,对LCD控制,时序图如图3-5所示。图3-5时序图3.5按键电路设计按键电路如图3-6所示,参数调节功能,设计有三个按键引脚。图3-6按键电路KEY1控制是否进入设置引脚,KEY2和KEY3分别控制加和减操作。3.6灯光提示电路温度出现异常时都会有声音和对应的LED提示进行报警,灯光提示电路如图3-7所示。图3-7灯光提示电路PA6引脚作为本系统分配控制报警的引脚,温度异常时,引脚PA6会被被置高驱动Q1使它导通,缘蜂鸣器同样也会导通发生;PA7和PB8分别实现对绿灯和蓝灯控制,代表温度过低和温度过高。3.7温度控制电路当温度出现低于下限异常时,使加热片工作,升温;当温度出现高于上限异常时,使风扇工作,降温;温度控制电路如图3-8所示。图3-8温度控制电路PB14和PB15分别实现对温度过低和温度过高控制,同时对继电器也实现控制,当出现异常后,单片机分配的控制引脚输出一个高电平信号,电阻R5和R8限流后,Q1与Q2导通,VCC通过LED和继电器线圈以及Q1和Q2形成回路,线圈得电负载导通开始工作。3.8硬件总体电路整个系统以STM32为核心,通过读取DS18B20温度传感器的检测数据后,在内部对数据进行判断,对LCD显示控制的同时,也对继电器电路进行控制调节温度,总体硬件布线图如图3-9所示。图3-9总体硬件布线图第4章嵌入式温度控制系统软件设计4.1主程序设计在开发软件时,基本上都使用C语言和汇编语言来完成设计任务。在使用汇编语言来开发软件系统时,里面所包含的机器指令主要通过文字助记来表达,这种表达也是与机器码最接近的一个。它在执行程序时有突出的优点,效率很高,不会占用很多的存储空间,但是也有很多缺点,比如兼容性比较差,不能适用于多种不同的CPU。C语言则比汇编语言所具有的优点更多,它不仅融合了汇编语言的优势同时还具备计算机高级语言的特点,兼容性较高,比较容易读写,可以直接控制硬件动作,修改和扩充系统功能时也比较方便,更加迎合人们的想法。从以上两种编程语言的对比可知,C语言更适合用来编写本系统的软件程序,所以本系统所有的软件部分都使用C语言来完成。将系统的软件首先按照需要实现的功能划分为几个彼此独立的部分,然后再依据每个部分要完成的具体动作来完成各个子程序的编写工作,通过不停调用各个子程序实现系统程序的循环运行,以此就可以达到各司其职的目的。上述已经提到单片机一般采用汇编和C语言来进行编写程序。这两种语言相比较而言,C语言更加的方便被使用,并且也更容易被读写和移植,在开发代码方面也表现得更加突出,所以现在一般编程都会优先选择C语言。主程序先设置定时模块初始化、LCD模块,再设置显示设置,在显示模块设置显示位置,显示温度上限值,温度下限值以及实时温度值,然后进入while控制的循环,实时读取温度值,按键值以及对温度进行比较,实现报警,设置等功能,主程序流程图如图4-1所示。图4-1主程序流程图为了提高系统运行效率,300ms实现对温度数据进行读取,然后调用不同的子函数,实现具体功能,其中子函数有显示子函数,按键子函数以及报警子函数。4.2显示子程序设计显示子程序主要是单片机对LCD的一个指令控制模式,如首先依个复位过程,分别通过延时15ms,5ms,5ms后通过指令38H实现忙信号检测,通过该指令实现模式的设置,通过08H指令实现关闭显示等操作,显示程序流程图如图4-2所示。图4-2显示程序流程图4.3温度读取子程序设计温度读取子函数流程图如图4-3所示。图4-3温度读取子函数流程图根据DS18B20传感器的工作流程,按照顺序实现对温度数据的采集后,传送给单片机实现温度数据采集。4.4报警子程序设计检测到温度值后,与设定的t_high和t_low比较,进行报警和指示,报警子函数流程图如图4-4所示。图4-4报警子函数流程图第5章系统调试5.1焊接实物与调试根据原理图对实物焊接并调试,首先进行单元调试,再进行系统整体调试。在对每一单元部分进行调试的时候应首先弄清楚调试标准,调试的先后顺序一定要与系统中信号的传输方向保持一致,来完成整个系统的分步调试过程。单元调试分为静态和动态这两种方式。静态调试指的是通过测量在无外界信号干扰下系统各元器件的工作状况,通过静态调试,可以让已经处于异常或者即将异常的元器件第一时间从系统中排除出去。动态调试则是指在系统运行的过程中接收前一部分单元信号后,此单元的工作参数达标与否。当完成系统中每一个独立单元的调试工作以后,联合构成的系统是否能够正常工作还不一定,所以对系统整体电路进行调试过程必不可少。整体的系统调试主要依靠当系统运行时检测动态参数是否达标来完成的性能测试,将正在运行的系统各个参数及时记录下来,并把参数与设计值进行对比就能够找到问题出在哪个地方,最后想办法去解决它,及时的调整动态参数值,直至全部达到设计标准才算是成功完成了整个调试过程。实物图如图5-1所示。图5-1实物图5.2功能调试实现温度报警,须具有对温度检测、显示报警和按键设置等功能,主要对这三个功能进行验证:1.按下电源系统上电,可以看到LCD上的显示屏,会显示两排内容,一排显示实时温度值,一排显示温度阈值,上电显示如图5-2所示。图5-2上电显示2.报警功能,给温度传感器加热,可以看到LCD上显示的实时温度值会上升,当高出显示的阈值时,指示灯和蜂鸣器工作报警,温度报警功能如图5-3所示。图5-3温度报警功能3.按键设置功能,本文设定的温度范围25到35,可以通过按键分别对两个界限进行设置,按键设置如图5-4所示。图5-4按键设置以温度报警功能为核心的温度报警器,实现了LCD显示值,蜂鸣器和LED灯对温度过高和过低进行报警提示,其中系统工作稳定,在检测精度、检测范围等功能设计都实现了。第6章总结利用传感器技术和单片机技术,以实现温度报警为出发点,来设计整个系统,选择DS18B20高精度数字式温度传感器实现对温度的检测,检测到温度异常后,就会通过灯光和声音指示报警,本文完成的工作以及得到的总结如下:1.以温度报警功能为基础,围绕温度的检测、显示、报警等方面展开工作,实现检测0到+125摄氏度的温度范围。2.研究单片机与DS18B20传感器之间的通信时序,单片机按照DS18B20传感器的工作时序,来精确的采集温度数据。3.采用显示、蜂鸣器以及LED灯实现温度的显示功能和核心的温度异常报警功能。4.围绕单片机及外围电路,传感器及外围电路以及报警等电路的研究,设计各部分硬件电路和软件算法,实现对嵌入式温度控制系统的实物验证。设计出来的嵌入式温度控制系统,实物通过调试,实现以温度报警为主要功能的温度检测报警系统,因受时间和能力条件的限制,系统还能做的更加完善,比如通常温度和湿度不分家,可以增加湿度的报警功能,同时该系统不具有对温度远程检测和对温度远程控制的功能,因此功能相对单一,如果能在系统中增加保湿和去湿功能以及无线发送数据到监控端实现远程监控,那么系统将会得到非常大的升级。参考文献:[1]周亚辉.运用单片机与计算机通信进行温度显示监控[J].电子技术与软件工程,2019(12):232.[2]杨怡婷,欧阳名三.基于ZigBee技术和CC2530模块的无线温度监控系统设计[J].湖南工程学院学报(自然科学版),2019,29(02):40-43.[3]韩梦龙,齐自成,王振伟,张启超,孙立刚,褚斌.基于Arduino与Nrf24l01无线轴承润滑油智能温度监控系统设计[J].中国农机化学报,2019,40(05):167-171+200.[4]付瑞玲,王银玲.基于单片机的多点温度监控系统设计[J].电子测量技术,2019,42(07):125-129.[5]肖伟,李训栓,刘志勇,李景旺,宋鹏飞,秦攀,李文昊.基于微信小程序与单片机的BLE温度监控系统[J].高校实验室工作研究,2018(03):137-140.[6]李巧侠.基于嵌入式系统的智能温度控制研究[J].微型电脑应用,2018,34(10):84-86.[7]卜敏玥,陆广平.基于单片机的远程温度监控系统设计[J].电子世界,2018(10):137-138.[8]廖雄,罗正华,唐毅谦,喻娜.基于GSM短消息的远程温度监控系统的设计与实现[J].成都大学学报(自然科学版),2017,36(01):70-72.[9]韩涛,陈闯,李石荣.基于无线传感器网络的智能温度监控系统设计[J].电子世界,2017(01):180-183.[10]王银旺,马宏兴,张晓玲,袁旭斌.基于上位机、NRF多点无线温度监控系统[J].电脑知识与技术,2016,12(23):230-231.[11]鄢志明.单片机温度控制系统的设计研究[J/OL].现代信息科技[2020-04-17].[12]胡瑶.基于单片机控制的铁路机车压缩机温度控制电路的研究[D].兰州交通大学,2016.[13]李威.基于C8051F120单片机控制的大棚智能温度控制系统的设计[J].农村经济与科技,2017,28(S1):201-202.[14]李鑫宇,肖雪.基于单片机的温度控制系统设计研究[J].通信电源技术,2018,35(02):15-16.[15]李耀贵,吴康福.浅析单片机温度控制系统的研究[J].企业科技与发展,2019(04):70-71.[6]刘家琪,刘嵩,韦亚萍,李坤,张齐松.基于单片机的PID温度控制系统设计[J].湖北民族学院学报(自然科学版),2019,37(02):219-222.[17]黎涛,金亚玲.基于单片机的智能鱼缸温度控制系统的设计[J].湖北农机化,2019(12):58.[18]吕值敏.基于AVR单片机控制的恒温水箱温度控制系统设计的研究[J].山东工业技术,2017(14):235.[19]史玲.基于单片机的温度控制系统的研究与实现[J].电子制作,2014(17):9-10.[20]宋慧,王智檀.基于单片机的温度控制系统研究[J].电子制作,2014(04):150.致谢时间过得飞快,大学生活一晃而过,回看过往,心中倍感充实。经过几个月的努力,毕业论文即将完成,通过这个任务借此机会,我要对大学期间来帮助过我的人表示深深的感谢。首先,感谢我的和蔼可亲的父母,一直鼓励支持我,你们的爱是我最宝贵的财富。其次,感谢我的指导老师赵莹琦老师,赵老师从选题、构思到最后定稿的每一个环节都给予细心并耐心的指引与教导,赵老师认真工作的态度、严谨的治学风格,使我深受启发,以后,无论是做人还是做事都要有一颗上进心,乐观的态度,永不放弃的精神。最后,感谢我的同学朋友们,通过相互之间的探讨与交流,不仅解决了问题还增进了友谊。至此,再次感谢帮助过我的人,让我的毕业设计能够顺利的完成。经过这次毕业设计不仅积累到了宝贵的经验还给我带来的提升能够为以后的工作和学习提供非常大的帮助,相信以后会有更多的进步。附录#include"LCD1602.h"#include"delay.h"#include"sys.h"//把8位数按位逆序u8BitReversed(u8x){u8temp[8];u8i=0;u8j=7;u8result=0;for(i=0;i<8;i++){temp[i]=(x>>i)&0x01;}for(i=0;i<8;i++){result=result|(temp[j]<<(i));j--;}returnresult;}voidLCD_Check_Busy(void){LCD1602_RS0;delay_us(1);LCD1602_RW1;delay_us(1);LCD1602_EN0;delay_us(1);GPIO_Write(GPIOC,0Xff);delay_ms(1);LCD1602_EN1;delay_us(100);}/*写入命令函数*/voidLCD_Write_Com(unsignedcharcom){LCD1602_RS0;delay_us(1);LCD1602_RW0;delay_us(1);LCD1602_EN1;delay_us(1);com=BitReversed(com);GPIO_Write(GPIOA,(GPIO_ReadOutputData(GPIOA)&0XFF00)+com);delay_us(100);LCD1602_EN0;}/*写入数据函数*/voidLCD_Write_Data(unsignedcharData){LCD1602_RS1;delay_us(1);LCD1602_RW0;delay_us(1);LCD1602_EN1;delay_us(1);Data=BitReversed(Data);GPIO_Write(GPIOA,(GPIO_ReadOutputData(GPIOA)&0XFF00)+Data);delay_us(100);LCD1602_EN0;}/*写入字符串函数*/voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s){if(y==0){LCD_Write_Com(0x80+x);}else{LCD_Write_Com(0xC0+x);}while(*s){LCD_Write_Data(*s);s++;}}/*写入字符函数*/voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData){if(y==0){LCD_Write_Com(0x80+x);}else{LCD_Write_Com(0xC0+x);}LCD_Write_Data(Data);}voidLCD1602_write_long(unsignedcharx,unsignedchary,u32data,unsignedcharnum){unsignedchartemp[12],i=12;while(i--){temp[i]='';}temp[num]='\0';while(num--){if(data||data%10)temp[num]=data%10+0x30;data=data/10;}LCD_Write_String(x,y,temp);}/*清屏函数*/voidLCD_Clear(void){LCD_Write_Com(0x01);delay_ms(5);}/**/voidLCD_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);//开启GPIOAGPIOBGPIOC时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//输出速度50MHZGPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOAGPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_10;//LCD1602RS-RW-EN?GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//输出速度50MHZGPIO_Init(GPIOB,&GPIO_InitStructure);//GPIOCLCD_Write_Com(0x38);delay_ms(5);LCD_Write_Com(0x08);/*显示关闭*/delay_ms(5);LCD_Write_Com(0x01);/*显示清屏*/delay_ms(5);LCD_Write_Com(0x06);/*显示光标移动设置*/delay_ms(5);LCD_Write_Com(0x0C);/*显示开及光标设置*/delay_ms(5);}#include"key.h"#include"sys.h"#include"delay.h"//按键初始化函数voidKEY_Init(void)//IO初始化{GPIO_InitTypeDefGPIO_InitStructure;//初始化KEY0-->GPIOA.13,KEY1-->GPIOA.15上拉输入RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);//使能PORTA,PORTE时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;//PE2~4GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//设置成上拉输入GPIO_Init(GPIOE,&GPIO_InitStructure);//初始化GPIOE2,3,4//初始化WK_UP-->GPIOA.0下拉输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//PA0设置成输入,默认下拉GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.0}//按键处理函数//返回按键值//mode:0,不支持连续按;1,支持连续按;//0,没有任何按键按下//1,KEY0按下//2,KEY1按下//3,KEY2按下//4,KEY3按下WK_UP//注意此函数有响应优先级,KEY0>KEY1>KEY2>KEY3!!u8KEY_Scan(u8mode){staticu8key_up=1;//按键按松开标志if(mode)key_up=1;//支持连按if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1)){delay_ms(10);//去抖动key_up=0;if(KEY0==0)return1;elseif(KEY1==0)return2;elseif(KEY2==0)return3;elseif(KEY3==1)return4;}elseif(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;return0;//无按键按下}#include"ds18b20.h"#include"delay.h"//复位DS18B20voidDS18B20_Rst(void){DS18B20_IO_OUT();//SETPA0OUTPUTDS18B20_DQ_OUT=0;//拉低DQdelay_us(750);//拉低750usDS18B20_DQ_OUT=1;//DQ=1delay_us(15);//15US}//等待DS18B20的回应//返回1:未检测到DS18B20的存在//返回0:存在u8DS18B20_Check(void){u8retry=0;DS18B20_IO_IN();//SETPA0INPUTwhile(DS18B20_DQ_IN&&retry<200){retry++;delay_us(1);};if(retry>=200)return1;elseretry=0;while(!DS18B20_DQ_IN&&retry<240){retry++;delay_us(1);};if(retry>=240)return1;return0;}//从DS18B20读取一个位//返回值:1/0u8DS18B20_Read_Bit(void)//readonebit{u8data;DS18B20_IO_OUT();//SETPA0OUTPUTDS18B20_DQ_OUT=0;delay_us(2);DS18B20_DQ_OUT=1;DS18B20_IO_IN();//SETPA0INPUTdelay_us(12);if(DS18B20_DQ_IN)data=1;elsedata=0;delay_us(50);returndata;}//从DS18B20读取一个字节//返回值:读到的数据u8DS18B20_Read_Byte(void)//readonebyte{u8i,j,dat;dat=0;for(i=1;i<=8;i++){j=DS18B20_Read_Bit();dat=(j<<7)|(dat>>1);}returndat;}//写一个字节到DS18B20//dat:要写入的字节voidDS18B20_Write_Byte(u8dat){u8j;u8testb;DS18B20_IO_OUT();//SETPA0OUTPUT;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb){DS18B20_DQ_OUT=0;//Write1delay_us(2);DS18B20_DQ_OUT=1;delay_us(60);}else{DS18B20_DQ_OUT=0;//Write0delay_us(60);DS18B20_DQ_OUT=1;delay_us(2);}}}//开始温度转换voidDS18B20_Start(void)//ds1820startconvert{DS18B20_Rst();DS18B20_Check();DS18B20_Write_Byte(0xcc);//skipromDS18B20_Write_Byte(0x44);//convert}//初始化DS18B20的IO口DQ同时检测DS的存在//返回1:不存在//返回0:存在u8DS18B20_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTA口时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//PORTA0推挽输出GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_8);//输出1DS18B20_Rst();returnDS18B20_Check();}//从ds18b20得到温度值//精度:0.1C//返回值:温度值(-550~1250)shortDS18B20_Get_Temp(void){u8temp;u8TL,TH;shorttem;DS18B20_Start();//ds1820startconvertDS18B20_Rst();DS18B20_Check();DS18B20_Write_Byte(0xcc);//skipromDS18B20_Write_Byte(0xbe);//convertTL=DS18B20_Read_Byte();//LSBTH=DS18B20_Read_Byte();//MSBif(TH>7){TH=~TH;TL=~TL;temp=0;//温度为负}elsetemp=1;//温度为正tem=TH;//获得高八位tem<<=8;tem+=TL;//获得底八位tem=(float)tem*0.625;//转换if(temp)returntem;//返回温度值elsereturn-tem;}#include"led.h"#include"delay.h"#include"sys.h"#include"usart1.h"#include"LCD1602.h"#include"string.h"#include"stdio.h"#include"ds18b20.h"#include"stmflash.h"#defineWriteFlashAddress((u32)0x08010000)//读写起始地址u8Temperature;//温度u16Temperature_Min=15;//温度报警值:下限u16Temperature_MAX=40;//温度报警值:上限u8setnum=0;//设置变量voidSTMFLASH_WRITE()//STM32内部FLASH写入{STMFLASH_Write(WriteFlashAddress,(u16*)"FDYDZ",5);//用于校验STMFLASH_Write(WriteFlashAddress+0x02,&Temperature_Min,1);//存储报警值STMFLASH_Write(WriteFlashAddress+0x04,&Temperature_MAX,1);//存储报警值delay_ms(100);}voidSTMFLASH_READ()//STM32内部FLASH读取{charSTMFLASH_CHECK[6];STMFLASH_Read(WriteFlashAddress,(u16*)STMFLASH_CHECK,5);//读出校验字符串STMFLASH_CHECK[5]='\0';if(strstr(STMFLASH_CHECK,"FDYDZ")==NULL)//新的单片机,需要先存储一遍值,然后再读取,值才不会出错{STMFLASH_WRITE();//存储}STMFLASH_Read(WriteFlashAddress+0x02,&Temperature_Min,1);//读出报警值STMFLASH_Read(WriteFlashAddress+0x04,&Temperature_MAX,1);//读出报警值if(Temperature_Min<0||Temperature_MAX<0||Temperature_Min>99||Temperature_MAX>99)//内部FLASH出错,则赋原始值{Temperature_Min=15;Temperature_MAX=40;}}voiddisplay_set_val()//显示报警值{LCD_Write_Char(4,1,Temperature_Min/10+0x30);LCD_Write_Char(5,1,Temperature_Min%10+0x30);LCD_Write_Char(13,1,Temperature_MAX/10+0x30);LCD_Write_Char(14,1,Temperature_MAX%10+0x30);}voidKEY_SCAN(void)//按键扫描{if(!KEY1)//设置键{delay_ms(10);if(!KEY1){while(!KEY1);//卡死setnum++;if(setnum>2)//按下次数超过两次,退出设置{setnum=0;LCD_Write_Com(0x0C);//关闭光标}if(setnum==1){LCD_Write_Com(0x80+0x40+5);LCD_Write_Com(0x0F);}if(setnum==2){LCD_Write_Com(0x80+0x40+14);LCD_Write_Com(0x0F);}}}if(!KEY2)//加键{delay_ms(10);if(!KEY2){while(!KEY2);//卡死if(setnum==1){if(Temperature_MAX-Temperature_Min>1)Temperature_Min++;display_set_val();LCD_Write_Com(0x80+0x40+5);LCD_Write_Com(0x0F);STMFLASH_WRITE();//存储}if(setnum==2){if(Temperature_MAX<99)Temperature_MAX++;display_set_val();LCD_Write_Com(0x80+0x40+14);LCD_Write_Com(0x0F);STMFLASH_WRITE();//存储}}}if(!KEY3)//减键{delay_ms(10);if(!KEY3){while(!KEY3);//卡死if(setnum==1){if(Temperature_Min>0)Temperature_Min--;display_set_val();LCD_Write_Com(0x80+0x40+5);LCD_Write_Com(0x0F);STMFLASH_WRITE();//存储}if(setnum==2){if(Temperature_MAX-Temperature_Min>1)Temperature_MAX--;display_set_val();LCD_Write_Com(0x80+0x40+14);LCD_Write_Com(0x0F);STMFLASH_WRITE();//存储}}}}intmain(void){u16count=0;delay_init();//延时函数初始化NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级KEY_IO_Init();//按键初始化STMFLASH_READ();//开机读取一般存储值delay_ms(300);BEEP_DISENABLE();//蜂鸣器初始化Relay_IO_Init();//继电器初始化DS18B20_Init();delay_ms(300);LCD_Init();//1602初始化LCD_Write_String(0,0,"Temperature:00C");LCD_Write_String(0,1,"Min:00CMax:00C");display_set_val();while(1){KEY_SCAN();//按键扫描if(count++>500&&setnum==0)//大约500毫秒读取一次{count=0;Temperature=DS18B20_Get_Temp()/10;//读取温度LCD_Write_Char(13,0,Temperature/10+0x30);//显示温度十位LCD_Write_Char(14,0,Temperature%10+0x30);//显示温度个位if(Temperature<=Temperature_Min||Temperature>=Temperature_MAX)BEEP=1;//超限报警elseBEEP=0;if(Temperature<=Temperature_Min)Relay1=1;//低于下限,开启加热elseRelay1=0;if(Temperature>=Temperature_MAX)Relay2=1;//高于上限,开启降温elseRelay2=0;}delay_ms(1);}}

电脑不启动故障诊治了解电脑启动的过程在诸多电脑故障中,无法正常启动是最令用户头痛的事了。笔者长期从事维护电脑的工作,在这个方面积累了一些经验,现在就将这些经验整理归纳出来与朋友们分享。本文将以家用电脑和windows98操作系统为基础,介绍电脑无法正常启动故障的诊治。要想准确地诊断电脑不启动故障,首先要了解的起动过程,当我们按下电源开关时,电源就开始向主板和其它设备供电,此时电压还没有完全稳定,主板控制芯片组会根据CMOS中的CPU主频设置向CPU发出一个Reset(重置)信号,让CPU初始化,电压完全稳定后,芯片组会撤去Reset信号,CPU马上从地址FFFF0H处执行一条跳转指令,跳到系统BIOS中真正的启动代码处。系统BIOS首先要做的事情就是进行POST(PowerOnSelfTest,加电自检)。POST的主要任务是检测系统中的一些关键设备(电源、CPU芯片、BIOS芯片、定时器芯片、数据收发逻辑电路、DMA控制器、中断控制器以及基本的64K内存和内存刷新电路等)是否存在和能否正常工作,如内存和显卡等。自检通过后,系统BIOS将查找显示卡的BIOS,由显卡BIOS来完成显示卡的初始化,显示器开始有显示,自此,系统就具备了最基本的运行条件,可以对主板上的其它部分进行诊断和测试,再发现故障时,屏幕上会有提示,但一般不死机,接着系统BIOS将检测CPU的类型和工作频率,然后开始测试主机所有的内存容量,内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,这些设备包括:硬盘、CD-ROM、软驱、串行接口和并行接口等连接的设备,大多数新版本的系统BIOS在这一过程中还要自动检测和设置内存的相关参数、硬盘参数和访问模式等。标准设备检测完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中已安装的即插即用设备。每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。最后系统BIOS将更新ESCD(ExtendedSystemConfigurationData,扩展系统配置数据)。ESCD数据更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软盘、硬盘或光驱启动。以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录将负责读取并执行IO.SYS,这是Windows最基本的系统文件。IO.SYS首先要初始化一些重要的系统数据,然后就显示出我们熟悉的蓝天白云,在这幅画面之下,Windows将继续进行DOS部分和GUI(图形用户界面)部分的引导和初始化工作,一切顺利结束,电脑正常启动。根据故障现象诊治了解电脑启动的过程,故障就好判断了,下面我们就根据故障现象开始诊治了:现象一:系统完全不能启动,见不到电源指示灯亮,也听不到冷却风扇的声音。这时,基本可以认定是电源部分故障,检查:电源线和插座是否有电、主板电源插头是否连好,UPS是否正常供电,再确认电源是否有故障,最简单的就是替换法,但一般用户家中不可能备有电源等备件,这时可以尝试使用下面的方法(注意:要慎重):先把硬盘,CPU风扇,或者CDROM连好,然后把ATX主板电源插头用一根导线连接两个插脚(把插头的一侧突起对着自己,上层插脚从左数第4个和下层插脚从右数第3个,方向一定要正确),然后把ATX电源的开关打开,如果电源风扇转动,说明电源正常,否则电源损坏。如果电源没问题直接短接主板上电源开关的跳线,如果正常,说明机箱面板的电源开关损坏。现象二:电源批示灯亮,风扇转,但没有明显的系统动作。这种情况如果出现在新组装电脑上应该首先检查CPU是否插牢或更换CPU,而正在使用的电脑的CPU损坏的情况比较少见(人为损坏除外),损坏时一般多带有焦糊味,如果刚刚升级了BIOS或者遭遇了CIH病毒攻击,这要考虑BIOS损坏问题(BIOS莫名其妙的损坏也是有的),修复BIOS的方法很多杂志都介绍过就不重复了;确认CPU和BIOS没问题后,就要考虑CMOS设置问题,如果CPU主频设置不正确也会出现这种故障,解决方法就是将CMOS信息清除,既要将CMOS放电,一般主板上都有一个CMOS放电的跳线,如果找不到这个跳线可以将CMOS电池取下来,放电时间不要低于5分钟,然后将跳线恢复原状或重新安装好电池即可;如果CPU、BIOS和CMOS都没问题还要考虑电源问题:PC机电源有一个特殊的输出信号,称为POWERGOOD(PG)信号,如果PG信号的低电平持续时间不够或

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论