基于STM32F103的恒温系统的设计.docx
- 文档编号:25131718
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:22
- 大小:699.83KB
基于STM32F103的恒温系统的设计.docx
《基于STM32F103的恒温系统的设计.docx》由会员分享,可在线阅读,更多相关《基于STM32F103的恒温系统的设计.docx(22页珍藏版)》请在冰豆网上搜索。
基于STM32F103的恒温系统的设计
中国矿业大学计算机学院
2013级本科生课程报告
课程名称信科专业综合实践
报告时间2016.09.20
学生姓名张谊坤
学号08133367
专业电子信息科学与技术
任课教师王凯
任课教师评语
任课教师评语(①对课程基础理论的掌握;②对课程知识应用能力的评价;③对课程报告相关实验、作品、软件等成果的评价;④课程学习态度和上课纪律;⑤课程成果和报告工作量;⑥总体评价和成绩;⑦存在问题等):
成绩:
任课教师签字:
年月日
摘要
针对目前温度控制在生产生活中被广泛应用,而传统的温度控制系统是由功能繁杂的大量分离器件构成,为了节约成本、提高系统的可靠性,本文设计了一种基于STM32F103T6的温度控制系统。
本设计是基于DS18B20的温度控制系统,以STM32F103ZET6为控制系统核心,通过嵌入式系统设计实现对温度的显示和控制功能。
在该系统中,为了减小干扰的影响,用均值滤波算法对采样数据进行处理之后再进行温度判定等一系列操作的依据。
设计中,基本上实现了该系统的功能,通过DS18B20采集温度数据,使用LCD屏幕来显示相关的信息,能够通过加热和降温将温度控制在恒定的范围内,并可以手动设置恒温范围,温度超出限制后会有声光报警。
关键词:
STM32F103,均值滤波,恒温控制,DS18B20
1绪论
1.1选题的背景及意义
21世纪是科学技术高速发展的信息时代,电子技术、嵌入式技术的应用已经是非常广泛,伴随着科学技术和生产的不断发展,在生产生活中需要对各种参数进行温度测量。
因此温度一词在生产生活之中出现的频率日益增多,与之相对应的,温度控制和测量也成为了生活生产中频繁使用技术,同时它们在各行各业中也发挥着非常重要的作用。
如在日趋发达的工业领域之中,利用测量与控制温度来保证生产的正常运行;在农业生产中,用于保证蔬菜大棚的恒温保产等;在科学研究中,往往也需要一个恒温的环境作为实验的保障。
温度值是表征物体冷热程度的一个物理量,温度的测量则是工农和业生产过程中一个很重要也普遍的参数。
温度的测量及控制对保证产品的质量、提高生产的效率、节约能源、安全生产、促进经济的发展起到非常重要的作用。
因为温度测量的普遍性,使得温度传感器的数量在各种传感器中居首。
并且随着科学技术与生产的不断发展,温度传感器的种类仍然在不断增加和丰富以来满足生产生活中的各种需要。
在嵌入式温度控制系统中的关键是温度的测量、温度的控制和温度的保持,温度是工业控制对象中主要的被控参数之一。
因此,嵌入式要对温度的测量则是对温度进行有效及准确的测量,并且能够在工业生产中得广泛的应用,尤其在机械制造、电力工程化工生产、冶金工业等重要工业领域中,担负着重要的测量任务。
在日常工作和生活中,也被广泛应用于空调器、电加热器等各种室温测量及工业设备的温度测量。
但温度是一个模拟量,需要采用适当的技术和元件,将模拟的温度量转化为数字量,才生使用计算机进行相应的处理。
1.2设计思想
恒温系统应用于各种工业或者民用领域,如何精确地控制温度成为一个非常重要的研究问题。
本系统需要利用STM32来控制各器件的工作情况,使传感器维持在一个固定的温度上。
本文所研究的课题是基于嵌入式的恒温控制系统设计,实现了温度的实时监测与控制。
温度控制部分,提出了用DS18B20、STM32F103ZET6和LCD的硬件电路完成对室温的实时检测及显示,利用DS18B20与嵌入式系统连接由软件与硬件电路配合来实现对加热片和散热风扇的实时控制。
从DS18B20读出或写入DS18S20信息仅需要一根口线,其读写及其温度变换功率来源于数据线,该总线本身也可以向所挂接的DS18B20提供电源,不需要额外电源。
同时DS18S20能提供九位温度精度,它无需任何外围硬件便可方便地构成温度检测系统。
加热片通过带有继电器的电路驱动,由嵌入式开发板的一根口线控制并供电,继电器需要嵌入式开发板提供额外的电源。
DC5V散热风扇的实时控制也仅仅需要一根口线,由开发板供电,不需要外加电源。
而且本次的设计主要实现温度监测,超温报警,温度控制,超过设定的门限值时自动启动加热和散热装置等功能。
而且还要以STM32开发板为主机,使温度传感器通过一根口线与嵌入式开发板相连接,再加上温度控制部分和人机交互部分来共同实现温度的监测与控制。
1.3实现的功能
(1)能够连续测量环境的温度值,用LCD屏幕来显示环境的实际温度。
(2)能够设定恒温的温度范围,初始范围是30℃~33℃。
(3)能够实现温度自动控制,如果设定温度在30℃~33℃,则能使温度保持恒定在30℃~33℃。
(4)使用嵌入式STM32F103ZET6控制,通过输入按键来控制恒温范围的设定值,数值采用LCD屏幕显示。
(5)温度超出范围时能够实现声光报警:
LED灯和数码管闪烁,蜂鸣器报警。
2硬件设计
2.1硬件平台
本次设计的硬件平台选用的是STM32系列的F103ZET6嵌入式开发板。
STM芯片根据容量分为三大类:
LD(小于64K),MD(小于256K),HD(大于256K),STM32F103ZET6类属第三类。
具有如下特点:
1.基于ARMCortex-M3核心的32位微控制器,LQFP-144封装.
2.512K片内FLASH(相当于硬盘),64K片内RAM(相当于内存),片内FLASH支持在线编程(IAP).
3.高达72M的频率,数据,指令分别走不同的流水线,以确保CPU运行速度达到最大化.
4.通过片内BOOT区,可实现串口下载程序(ISP).
5.片内双RC晶振,提供8M和32K的频率.
6.支持片外高速晶振(8M),和片外低速晶振(32K).其中片外低速晶振可用于CPU的实时时钟,带后备电源引脚,用于掉电后的时钟行走.
7.42个16位的后备寄存器(可以理解为电池保存的RAM),利用外置的纽扣电池,和实现掉电数据保存功能.
8.支持JTAG,SWD调试.配合廉价的J-LINK,实现高速低成本的开发调试方案.
9.多达80个IO(大部分兼容5V逻辑),4个通用定时器,2个高级定时器,2个基本定时器,3路SPI接口,2路I2S接口,2路I2C接口,5路USART,一个USB从设备接口,一个CAN接口,SDIO接口,可兼容SRAM,NOR和NANDFlash接口的16位总线-FSMC.
10.3路共16通道的12位AD输入,2路共2通道的12位DA输出.支持片外独立电压基准.
11.CPU操作电压范围:
2.0-3.6V.
2.2硬件设计模块图
设计整体模块如图2-1所示:
STM32CPU
DS18B20温度传感器模块
键盘模块
LCD模块
温度控制模块
警报模块
风扇
加热片
LED灯
蜂鸣器
图2-1设计模块图
如图所示,本次设计共有五大模块:
DS18B20温度传感器模块、键盘模块、LCD显示模块、温度控制模块以及警报模块构成;其中温度控制模块又有小风扇和加热片两个小模块,警报模块有LED灯和蜂鸣器两个小模块。
各个模块的功能如下:
DS18B20温度传感器模块:
DS18B20为温度传感器,主要作用是温度采集。
键盘模块:
键盘模块共包含三个按键:
K_LEFT、K_UP和K_DOWN,其中,K_LEFT主要是实现Flag标志的更新,实现程序中不同模块的转换,详见下面的程序流图,K_UP和K_DOWN两按键主要是实现最低温度和最高温度的设置。
LCD显示模块:
实现温度的显示。
温度控制模块:
实现恒温控制,允许温度在设定的一定范围内变化,温度过低时加热片启动升温,温度过高时小风扇启动降温。
警报模块:
警报模块主要是在温度超出正常范围时发出警报信息,实现声光报警,主要为LED和数码管闪烁和蜂鸣器发声。
2.3温度传感器DS18B20
DS18B20是常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
工作原理:
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20测温原理如图2-2所示。
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
低温系数晶振
斜率累加器
温度寄存器
比较
预置
=0
计数器1
=0
计数器2
预置
高温系数晶振
加1
停止
LSB
置位/清除
图2-2DS18B20测温原理图
DS18B20的主要特性:
(1)适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电
(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯
(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
(5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃
(6)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温
(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快
(8)测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
(9)负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
接线方法:
面对着扁平的那一面,左负右正,一旦接反就会立刻发热,有可能烧毁!
同时,接反也是导致该传感器总是显示85℃的原因。
实际操作中将正负反接,传感器立即发热,液晶屏不能显示读数,正负接好后显示85℃。
特点
独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0V至5.5V无需备用电源测量温度范围为-55℃至+125℃。
华氏相当于是-67华氏度到257华氏度-10℃至+85℃范围内精度为±0.5℃
温度传感器可编程的分辨率为9~12位,温度转换为12位数字格式最大值为750毫秒,用户可定义的非易失性温度报警设置,应用范围包括恒温控制、工业系统、消费电子产品温度计、或任何热敏感系统
描述该DS18B20的数字温度计提供9至12位(可编程设备温度读数)。
由于DS18B20是一条口线通信,所以中央微处理器与DS18B20只有一个一条口线连接。
为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。
因为每一个DS18B20的包含一个独特的序号,多个ds18b20s可以同时存在于一条总线。
这使得温度传感器放置在许多不同的地方。
它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。
DS18B20采用一线通信接口。
因为一线通信接口,必须在先完成ROM设定,否则记忆和控制功能将无法使用。
主要首先提供以下功能命令之一:
1)读ROM,2)ROM匹配,3)搜索ROM,4)跳过ROM,5)报警检查。
这些指令操作作用在没有一个器件的64位光刻ROM序列号,可以在挂在一线上多个器件选定某一个器件,同时,总线也可以知道总线上挂有有多少,什么样的设备。
若指令成功地使DS18B20完成温度测量,数据存储在DS18B20的存储器。
一个控制功能指挥指示DS18B20的演出测温。
测量结果将被放置在DS18B20内存中,并可以让阅读发出记忆功能的指挥,阅读内容的片上存储器。
温度报警触发器TH和TL都有一字节EEPROM的数据。
如果DS18B20不使用报警检查指令,这些寄存器可作为一般的用户记忆用途。
在片上还载有配置字节以理想的解决温度数字转换。
写TH,TL指令以及配置字节利用一个记忆功能的指令完成。
通过缓存器读寄存器。
所有数据的读,写都是从最低位开始。
2.4LCD屏幕
图2-3LCD管脚图
TFT-LCD又叫做薄膜晶体管液晶显示器,其管脚图如上,其管脚在STM32F103中有相应的管脚对应。
常用的液晶屏接口很多种,8位、9位、16位、18位都有。
而常用的通信模式呢,主要有6800模式和8080模式两种,今天呢,我们来讲的是8080模式。
如果大家接触过LCD1602或者LCD12864等,那么就会发现8080模式的时序呢,其实跟LCD1602或者LCD12864的读写时序是差不多的。
8080接口有5条基本的控制线和多条数据线,数据线的数量主要看液晶屏使用的是几位模式,有8根、9根、16根、18根四种类型。
具体如下表:
表2-1TFT-LCD各位功能
可以知道,LCD液晶屏的信号线主要有:
1)CS:
用于片选的选择。
2)RS:
用于选择命令或者数据。
3)WR:
写使能。
4)RD:
读使能。
5)RESET:
复位端。
其时序如下图:
图2-4LCD时序图
(1)在WR跳变为低电平之后,液晶屏开始读取总线上面的数据。
如果使用IO口模拟写入的时候,可以先在总线上面写入数据,然后在跳变WR,以保证当读取的时候,总线上面的数据是稳定的。
(2)在RD跳变为低电平之后,液晶屏放置数据到总线上面。
液晶屏的读写时序了,大家操作的时候,可以使用单片机IO口模拟它的时序进行操作。
2.5DC5V散热风扇
散热风扇的驱动电路如图2-5所示:
风扇仅需要的一根口线驱动,当I/O输出为低电平时,三极管导通,风扇启动;当I/O输出为高电平时,风扇停止。
2.6加热片
加热片驱动电路如图2-6所示:
I/O口
图2-6加热片驱动电路
加热片也仅仅需要一根口线控制,I/O口为高电平时,继电器L与N_O端连通,加热片工作;I/O口为低电平时,继电器L与N_O端断开,加热片工作。
3软件设计
3.1软件平台
本设计的软件平台为keiluvision4,目前使用KeiluVision4的产品有KeilMDK-ARM,KeilC51,KeilC166和KeilC251。
KeiluVision4具有以下特点:
发展:
2009年2月发布KeiluVision4,KeiluVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。
新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。
新版本支持更多最新的ARM芯片,还添加了一些其他新功能。
2011年3月ARM公司发布最新集成开发环境RealViewMDK开发工具中集成了最新版本的KeiluVision4,其编译器、调试工具实现与ARM器件的最完美匹配。
新特征:
1.最新的KeiluVision4IDE,旨在提高开发人员的生产力,实现更快,更有效的程序开发。
2.uVision4引入了灵活的窗口管理系统,能够拖放到视图内的任何地方,包括支持多显示器窗口。
3.uVision4在μVision3IDE的基础上,增加了更多大众化的功能。
4.多显示器和灵活的窗口管理系统
5.系统浏览器窗口的显示设备外设寄存器信息
6.调试还原视图创建并保存多个调试窗口布局
7.多项目工作区简化与众多的项目
3.2软件设计模块图
恒温系统
温度检测模块
报警模块
恒温控制模块
控制算法
键盘模块
显示模块
图3-1软件设计模块
软件设计中共分为六大部分,温度检测模块、显示模块、报警模块、键盘模块、恒温控制模块和控制算法。
温度检测模块主要是温度传感器DS18B20相关的程序,实现温度的采集和转换,最终为我们常用的摄氏温度值的形式;显示模块以LCD屏幕相关程序为主,实现必要信息的显示;警报模块实现温度超限报警,恒温控制实现对温度的恒定控制,在程序里,这两部分在一个函数里;键盘模块主要是实现温度值得设定;控制算法是对采集温度所做的一个均值滤波,以排除采集的错误数据。
3.3主程序流程图
主程序流程图3-2如下所示:
进行初始化之后,进入一个while
(1)的死循环里,不断的根据flag的值来更新工作的状态。
当Flag=0时,进入温度实时显示部分,在显示的同时还会进行恒温状态的控制;当Flag=1时,进入恒温范围下限的设置的界面,利用按键设置目标值,并同时实现恒温控制;当Flag=2时,进入恒温范围上限的设置的界面,利用按键设置目标值,并同时实现恒温控制。
Flag标志通过按键更新,0—2循环,到3自动变为0。
3.4子程序流程图
3.4.1恒温控制子程序流程图
在恒温控制子程序中,通过对当前温度值的判断来决定要执行的动作:
温度过高时,执行高温时所对应的相关动作,即最左边4位数码管显示“H”字样,红色报警指示灯亮,同时风扇启动散热,加热片不工作;温度过低时,执行低温时所对应的相关动作,即最左边4位数码管显示“L”字样,蓝色报警指示灯亮,同时加热片启动加热,散热风扇不工作;在温度正常显示时,数码管左4位没有显示,绿色警报指示灯亮,加热片和风扇都不工作。
3.4.2flag标志设置子程序流程图
开始
K_LEFT仍按下?
图3-4flag标志设置子程序流程框图
K_LEFT按下?
消抖延时10ms
N
Flag++
Flag=3?
Flag=0
Y
Y
Y
结束
N
N
flag标志作为温度显示和温度设置之间的转换标志,其设置的过程必须清晰且正确:
flag初始值为0,即初始状态为温度显示与恒温控制状态;当K_LEFT按键按下时,延时10ms以消除抖动,防止误触,然后flag标志自加1;当flag=1时,进入恒温范围下限的设置的界面,并同时实现恒温控制;当flag=2时,进入恒温范围上限的设置的界面,并同时实现恒温控制;flag自加到3时,会自动重置为0。
3.4.3温度设置子程序流程图
温度设置子程序流程图如下所示:
开始
K_UP仍按下?
下?
图3-5温度设置子程序流程框图
K_UP按下?
延时消抖动
温度+0.1℃
K_DOWN按下?
Y
延时消抖动
K_DOWN仍按下?
下?
温度-0.1℃
结束
Y
Y
Y
N
N
N
N
恒温范围的设置主要由K_UP、K_DOWN两个按键完成:
K_UP按下,延时10ms消除抖动,防止误触,然后相应的温度范围+0.1℃;K_DOWN按下,延时10ms消除抖动,防止误触,然后相应的温度范围-0.1℃;
3.4.4温度读取函数流程图
温度读取函数流程图如下所示:
开始
初始化
发送0xCC,设置单片工作方式
发送0x44,启动温度转换
延时,等待温度转换完毕
发送0xBE,读取转换的温度
低字节存入a
高字节存入b
温度原码temp=((b<<8)+a)
温度为负?
温度值value=temp*(-0.0625)
温度值value=temp*(-0.0625)
返回value
结束
Y
N
图3-6温度读取函数流程图
本次设计中仅使用了一个DS18B20温度传感器,根据其指令表需要先发送一个0xCC设定工作的方式;然后发送0x44启动温度装换,转换的数据存入9位的RAM中;延时一段时间,等待温度转换完毕;发送0xBE,读取RAM中储存的数据,高字节为b,低字节为a,温度转换的原码temp=高字节左移8位+低字节,注意此时的temp并不是我们常用的摄氏温度值,后面还需要转换;根据温度值的符号不同返回不同的值,温度为正value=temp*(0.0625),温度为负value=temp*(-0.0625),此时的value才为我们生活中常用的摄氏温度值。
3.4.5均值滤波程序流程图
开始
初始化
ch=readtemp()
max=min=final=ch
i<=9?
ch ch=readtemp() final+=ch ch>max? min=ch max=ch i++ final=(final-max-min)/8 返回final N N N Y Y Y 图3-7均值滤波流程图 这里只是对连续采集的10次数据进行了一次均值滤波,将10次采集的温度总值减去10次中的最大值和最小值后取平均数便得到了滤波后的相对稳定的温度值。 均值滤波的数据可以在程序中改变参数的值来调整,完成不同次数的滤波。 3.4.6显示函数程序流程图 开始 温度值*100 将显示的信息“xx.xx℃”存入数组dat[] 调用GUI_Show12ASCII()函数显示 结束 图3-8显示函数流程图 本设计的显示功能比较简单,对要显示的温度做了一个简单处理,调用GUI_Show12ASCII()函数显示,其他的一些信息的显示也是通过此函数实现的。 这也是本次设计中的不足之处,显示功能过于简单。 4调试分析 该设计硬件电路连接组装好以后,便可进入系统调试,其主要任务是排除存在硬件故障,并完善其硬件的结构,运行所设计的程序,排除程序存在错误,并优化程序结构,使系统达到期望的性能。 4.1硬件调试 嵌入式系统的硬件和软件调试应是相互进行的,但通常是先排除明显的硬件故障: 1.开路、短路: 由于焊接技术导致的开路、短路等故障。 解决方法: 对照原理图用万用表检测,补焊即可。 2.元器的件损坏: 由于对所使用的元器件不熟悉及制焊接过程中操作不当致使器件损坏。 解决方法: 仔细阅读元器件的应用环境,仔细焊接。 3.电源故障: 上电后造成元器件损坏、无法正常的供电,电路不能正的常工作。 电源故障包括: 电压值不符合设计要求,电源引出线与插座不对应,各档电源之间短路等。 解决方法: 电源必须单独的调试好以后才能加到系统各个部件中。 4.2软件测试 设计软件部分出问题的现象: 1.以断点或连续方式运行时,目标没有按规定的功能进行操作或什么结果也没有,是由于程序转移到某处死循环所造成的。 解决方法: 这类错误的原因是程序中跳转的地址计算错误、堆栈的溢出、工作寄存器的冲突等,检查各处逻辑,更改之。 2.对中断不相应。 CPU不响应中断的现象是连续运行时不执行中断任务程序的规定操作,当断点设在中断入口或中断服务程序中时碰不到断点。 解决方法: 更改中断控制寄存器的设置。 3.结果不准确确。 系统基本上可以正常操作,但控制会有误动作或者输出结果不正确。 这种错误大多是由于算法错误引起的。 错误原因没有查明,没有解决方法。 4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STM32F103 恒温 系统 设计