程序源码无删减
整个开发用到的所有资料如下:
开发软件MDK
JLINK驱动安装包及相关文件
stm32开发资料-stm32f103c8t6
PCtoLCD2002 取模软件
stm32配套的液晶屏资料以及相关程序
Stm32f103c8t6 UCOSII
各传感器的数据手册以及程序、BMP180、DHT11温度模块、HC-SR04 超声波模块、光敏电阻传感器、热敏传感器、无源蜂鸣器
基于STM32的室内环境监测系统
概述
采用STM32F103C8T6核心板作为系统控制单元,结合相关的传感器模块和软件资源完成以STM32F103C8T6为核心的室内环境监测系统。使用超声波传感器检测距离,通过LCD显示屏显示距离;通过温湿度传感器DHT11将检测到的实时室内温湿度数据发送给主控LCD显示,同时系统能够根据设定温度自动驱动加热模块进行升温,驱动风扇进行降温,达到自动控温的目的,也可手动进行升降温控制;使用光照传感器将采集的ADC数据进行分析周围光照强度,将光照的亮弱实时数据发送给主控LCD显示;通过产生PWM波来控制LED灯的点亮程度,从而在光照不足的情况下,任意切换LED灯显示模式。
本设计的研究内容:
硬件电路的绘制,设备连线的处理,STM32F103C8T6核心板 GPIO 端口的使用研究,通过程序流程编写,实现在设备运行过程中进行电机测试,显示队员信息,实现蜂鸣器报警,进行图像测试。同时使用光敏电阻感应光照强度,通过LCD显示屏的亮灭来表示光照强度;实现在设备运行过程中实时显示室内温湿度数据并实现自动升降温功能以及使用超声波测距模块检测异常温度目标的距离;实现在设备运行过程中手动控制LED的亮灭和点亮方式。
第2章 系统需求分析
2.1功能与性能需求分析
要求所设计的室内环境监测系统能够测量家庭室内的温度、湿度, 并在LCD上显示,并设定26-27℃为标准温度,当室内温度低于26℃时, 控制电机自动转动来进行升温操作(考虑到安全性等问题,用电机转动来表示升温,降温类似),当室内温度高于27℃时, 控制电机自动转动来进行降温操作,并用超声波测距模块检测异常温度目标的距离。要求所设计的室内环境监测系统能够测量家庭室内的光照强度, 当室内光强较大时,LCD屏亮屏并显示明亮字样,当室内光强较小时,LCD屏灭屏并显示黑暗字样。要求所设计的室内环境监测系统能够手动控制八个LED灯的亮灭和点亮方式。要求所设计的室内环境监测系统能够实现在设备运行过程中进行电机测试,显示队员信息,实现蜂鸣器报警,进行图像测试。
2.2 课题任务目标
根据室内环境监测系统设计任务需求完成从系统设计方案制定、传感器模块选择、硬件电路设计、各个模块布局、电路绘制、实物焊接和软件程序调试,基本程序及驱动程序设计等,微控制器选用32位的STM32F103C8T6核心板为微控制器。通过对STM32F103C8T6核心板GPIO端口的使用,运用UART串口通信实现蓝牙模块的通信功能;通过串行SPI总线通信完成对LCD显示屏的显示及触摸控制,能够实时的在LCD触摸屏上查看系统各个模块运行状态;选用STM32F103C8T6单片机作为测温湿度以及测距系统的核心,用DHT11温湿度传感器进行温湿度检测,将温湿度数据实时显示在屏幕上,并用程序逻辑实现通过控制电机实现自动升降温功能,用超声波测距模块检测异常温度目标的距离。系统能够根据设定温度自动驱动加热模块进行升温,驱动风扇进行降温,达到自动控温的目的,也可手动进行升降温控制。
第3章 系统硬件设计
3.1 主控制电路设计
STM32F103C8T6是专门为嵌入式应用而设计的一款高性能、低功耗的芯片,其采用Cortex-M3为其内核的架构。工作频率最高可达到72MHz,采用单周期乘法以及硬件除法以及通过采用Thumb-2高密度指令集,由于中断处理需要较高的实时,在系统存储方面内核降低了相关方面的要求;内核在处理速度上有着明显的优势,在Flash上,其拥有128KB的高容量存储空间。
芯片内拥有3个16位定时器,每个定时器可通过相关寄存器的配置轻松实现PWM功能,例如控制电机的占空比;实现捕获比较功能,实现例如测频;而有关电源管理、时钟方面设备拥有上电复位和掉电复位硬件电路,同时嵌入一个可编程电压探测器用于检测VDD来确保MCU处于安全运行状态。内部拥有嵌套矢量中断控制器(NVIC)用来处理43个中断通道;拥有3种低功耗模式其包括停止、休眠、待机。
图3.1 MCU主控制电路
3.2 时钟电路设计
时钟电路如图3所示,时钟电路由8MHz的石英晶振和两个电容并联组成,两端分别接STM32芯片的OSCIN和OSCOUT引脚,时钟电路为主控制器提供高速的时钟,8MHz的外部晶振经过STM32内部的倍频可实现72MHz的主时钟频率。
图3.2 时钟晶振电路
3.3复位电路设计
复位电路采用的是按键复位其的原理是单片机RST引脚接收到电平信号,只要保证电平的充放电时间大于2us,即可实现复位。复位电路由电容并联电阻构成,结合“电容电压不能突变”的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的R,C值来决定。在这个电路中,这里选用1k、10K的电阻和1000UF的电容。
图3.3 复位电路
3.4 多路传感器信号采集电路设计
传感器采集电路如图3.4.1和图3.4.2所示。NTC热敏温度传感器是一种在单总线通信协议下的温度传感器,目前由于其众多优点例如相当高的测量精度以及廉价等,是目前市场上比较流行的温度传感器,在生活中也随处可见。在其内部存在高速存储器RAM以及可擦写非易失EEPRAM,NTC热敏温度传感器可实现-55到+125温度测量,并且精度可达到0.5度左右,其独特的单总线技术使得与MCU的通信变得更加容易,方便技术人员的开发,其工作电压为3到5.5V。EEPRM中保存了温度寄存器和相应的结构寄存器,在单总线通信协议下,这种设计结构非常方便的实现数据的读取,不仅方便而且安全。相应的存储单元中的序列号是在生产商出场之前刻好的,其内部显示的一些序列号可以相似的理解位MAC地址。NTC热敏温度传感器的存储机制很大程度上实现了地址式的访问数据光,一根总线实现数据的访问集命令和数据指令为一体。其硬件电路如下图所示,中间的DQ引脚连接STM32,实现数据传输,但其必须严格遵守单总线通信协议才能准确的采集温度数据;DHT11温湿度传感器实时检测室内温湿度情况;超声波测距模块起到安全提醒作用;光敏传感器通过对室内光照强度的监控来配合微处理器实现对LCD屏的控制。
图3.4.1 光敏、超声波传感器电路
图3.4.2 蜂鸣器、温湿度传感器电路
3.5 系统硬件电路原理图设计
系统硬件原理图如图3.5.1和图3.5.2所示。
图3.5.1 系统硬件电路原理图设计
图3.5.2 系统硬件电路原理图设计
第4章 系统软件设计
4.1 主程序流程
主程序主要定时器的初始化。在主函数死循环中完成取消息任务,判断消息是否分拣处理好:是则继续取新的消息,否则说明消息没处理好,继续投递消息到消息队列的尾部去。图4.1给出了主程序流程图。由于查询或中断直接处理任务而影响了其他事件的服务。本次设计中引入了消息驱动机制,在 STM32单片机软件体系中,使用任务调度的方法。这种方法不仅有清晰的体系层次结构,而且有科学的写作风格,使今后的很多工作易于被升华和升级。通过建立动态连接库,中断源通过消息投递函数Postmessege()将消息投递到消息队列尾部之后转而去执行其他任务,不会将时间消耗在某一个任务上,中断函数处理迅速。具体的工作则是由主函数中消息循环中的拾取消息函数Getmessege()来获得新的消息,通过分拣函数 Dispatchmessege()来指向某一个具体的处理函数,再返回处理结果。其主程序在消息驱动上主要是对消息的判断以及实现定时器的配置,这样的结构能够提高时钟的利用,简化代码在中断中占用过多。
图4.1 系统程序流程图
4.2 中断服务函数
定时器2更新中断和比较中断共用定时器2的中断服务函数,更新中断是定时器2通过外部触发引脚 TIM2_ETR对外部被测信号进行计数,当计数到Oxffff时(因为定时器2主计数器是16位)发生溢出,产生更新中断。由于定时器2计数器只有16位,测量频率范围太窄,需要扩展成32位计数器。为了扩展计数器,这里设置了一个32位的扩展计数器FreqExtcounter,每当发生更新中断时,FreqExtcounter则加上0x1000。比较中断发生在定时器4输出溢出触发脉冲时,当溢出1Hz脉冲的上升沿时,比较中断产生,TIM2_ERT 的值锁存到TIM2_CCR1。捕捉标志位为1S时,当TIM2_CCR1为Oxffff且更新中断标志位为1时,则表明发生了更新中断,但未执行更新中断操作,FreqExtcounter没加上0x1000。当执行完 TIM2比较中断,再执行更新中断时会加上0x1000,因此这里频率Freqency等于FreqExtcounter。其他情况则是频率Freqency等于FreqExtcounter加上捕捉寄存器TIM2_CCR1的值再加上1。中断程序流程如图4.2所示。比较中断1S发生一次,发生时频率Freqency更新一次,更 新 后 将 频 率送到频率缓冲区,等待主函数通过 Getmessege()取得ISR(中断服务程序)发出的消息,送到Dispatchmessege()处理。
图4.2中断服务函数流程图
第5章 系统综合测试
图5.1 功能主界面
图5.2 图像显示测试
图5.3 队员信息显示测试
图5.4 光敏传感器测试
图5.5 温湿度传感器测试
图5.6 手动升降温测试
图5.7 超声波测试
图5.8 蜂鸣器测试
图5.9 电机测试
图5.10 LED测试