版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LOGO基于lora技术的地库智能照明系统设计项目二一帆风顺的人生,谁都可以说自己是优秀的船主。只有风暴来临的时候才能分辨谁优谁劣。目录Contents了解lora技术任务一开发环境搭建任务二地库智能照明系统原理图设计任务三智能照明系统程序设计任务四任务1了解lora技术引导案例基于lora技术的节能管理系统唯传科技基于lora技术的低碳节能管理系统,能够实时掌握能源和损耗数据,有效侦测浪费情况的发生,提升能源利用率;基于传感器集中收集的海量数据,实现智能分析与控制,促进节能增效;整合各个系统的数据资源,并以数据为支撑,实现节能增效、高效管理。2.1.1LoRa概念LoRa是LongRange的简称,作为LPWAN(低功耗广域网)通信技术之一,是美国升特(Semtech)公司采用和推广的一种基于扩频调制技术(ChirpSpreadSpectrum)的超远距离无线传输方案。这一方案改变了以往关于传输距离与功耗的折中考虑方式,为用户提供一种简单的能实现远距离、长电池寿命、大容量的系统,进而扩展传感网络。目前,LoRa主要在全球免费频段运行,包括433、868、915MHz等。2.1.2LoRaWANLoRaWAN由LoRa联盟开发,该联盟于2015年上半年由思科(Cisco)、IBM和升特(Semtech)等多家厂商共同发起创立,拥有500多个成员,其中包括行业应用方案商、终端芯片方案商、基站方案商、云平台方案商、网络安全方案商以及电信运营商等。LoRa联盟制定了LoRaWAN标准规范,主要完成MAC层规范以及对物理层相关参数的约定。LoRa联盟官方白皮书《whatisLoRaWAN》中指出:LoRaWAN是为LoRa远距离通信网络设计的一套通讯协议和系统架构。2.1.2LoRaWANLoRa联盟对LoRaWAN的官方定义是:LoRaWAN规范是一种低功耗、广域(LPWA)网络协议,旨在将电池供电的“事物”无线连接到区域、国家或全球网络中的互联网,并针对关键的物联网(IoT)要求,例如双向通信、端到端安全、移动性和本地化服务。LoRaWAN设计了一套LoRaMAC协议,包括ClassA,B,C三个子选项,分别对应三种终端类型(低功耗,功耗响应折中,实时响应),适用于不同应用场景。2.1.2LoRaWANLoRaWAN协议层次图如图所示。2.1.3LoRa的网络架构LoRaWAN的网络实体分为四个部分:终端节点、网关、LoRaWAN服务器和应用服务器。◆EndNode:终端节点一般是各类传感器,进行数据采集,开关控制等。◆Gateway:LoRa网关,对收集到的节点数据进行封装转发。◆NetworkServer:网络服务器主要负责上下行数据包的完整性校验。◆ApplicationServer:应用服务器主要负责OTAA设备的入网激活,应用数据的加解密。◆CustomerServer:用户服务器从AS中接收来自节点的数据,进行业务逻辑处理,通过AS提供的API接口向节点发送数据。2.1.3LoRa的网络架构LoRa联盟官方白皮书中的网络架构图2.1.4LoRa的特点1.广覆盖能力Lora技术在城区环境下信号传播距离为3Km,农村空旷区域能达到30Km,信号穿墙能力能够达到穿越12堵墙2.极低功耗对于LoRa燃气表,2小时发包一次,采用SF9模式时,4节5号电池可以使用7.5年。3.低成本大致计算,LoRa终端芯片成本7元、模组成本35元,基站成本小于7000元。综合计算,LoRa技术的TCO成本大概是公网的1/10左右。2.1.4LoRa的特点4.大连接能力LoRa网关芯片支持多路多SF并发接收,目前1301单芯片可以并发接收8路信号。例如,在单网关8个信道上行,终端每小时发一个包,无下行,包长30字节情况下,单网关上行的最大容量为8万个终端。5.扩频抗干扰能力LoRa信号采用扩频技术发送,具有极强的抗干扰能力,信号比噪音弱100倍时也能检出。6.自适应速率技术LoRa网络可以基于信号接收强度自动调整发射功率和扩频因子,控制信号传播质量。2.1.5LoRa技术要点一般说来,传输速率、工作频段和网络拓扑结构是影响传感网络特性的三个主要参数。传输速率的选择将影响系统的传输距离和电池寿命;工作频段的选择要折中考虑频段和系统的设计目标;而在FSK系统中,网络拓扑结构的选择是由传输距离要求和系统需要的节点数目来决定的。LoRa融合了数字扩频、数字信号处理和前向纠错编码技术,拥有前所未有的性能。此前,只有那些高等级的工业无线电通信会融合这些技术,而随着LoRa的引入,嵌入式无线通信领域的局面发生了彻底的改变。2.1.6LoRa与常见无线通信技术的区别目前,常见的无线通信技术包括3G/4G/5G、NB-IoT、LoRa、WiFi、蓝牙、ZigBee等,每种无线技术都只能适应特定通信场景,需要配合使用才能构建高效率、低成本的网络。以现代化的军事组织类比,其单兵武器都是配合使用,才能达到最佳火力配制。讨论 LoRa技术适用于哪些应用场景?任务2lora开发环境搭建引导案例基于LoRa技术的地库智能照明系统某大型商业综合体的地下车库存在照明效率低、能耗高、维护困难等问题。为了改善这些问题,该商业综合体决定采用基于LoRa技术的地库智能照明系统。其解决方案为:在车库内安装光照传感器和红外传感器,实时采集车库内的光照强度和车辆及人员活动情况。通过LoRa节点将传感器数据发送给控制模块。控制模块根据接收到的数据,自动调节灯具的开关、亮度和色温,以提供舒适、安全的照明环境。为实现以上方案,需选择合适硬件模块,如用于编写和调试控制程序的开发板、LoRa模块、红外传感器、光照传感器等。并且需要搭建好开发环境,如MDK5、ISP串口烧写程序等。2.2.1KEILMDK5安装 KEILMDK5是一款专为微控制器应用而设计的一个适用于各种基于ArmCortex-M的微控制器器件的完整软件开发环境,该软件不仅易学易用,而且功能强大,能够满足大多数嵌入式应用开发。在被ARM公司收购后,推出了MDKARM版本,专注于为ARM系列芯片编程提供一个集成的C/C++开发环境,并提供一系列工具来帮助开发者编译、调试代码。2.2.1KEILMDK5安装 KEILMDK5具有汇编器、链接器和高度优化的运行库的ArmC/C++编译器,这些库专为优化代码大小和性能而量身定制,这样能更好的满足使用需求。KEILMDK5安装步骤如下:1.左键双击KEILMDK5安装程序,安装程序如图所示。2.2.1KEILMDK5安装 2.在弹出的WelcometoKeilMDK-ARM对话框中点击Next按钮,如图所示。2.2.1KEILMDK5安装 3.在LicenseAgreement对话框中点击勾选复选框,再点击Next按钮,如图所示。2.2.1KEILMDK5安装 4.在FolderSelection对话框中点击Browse按钮选择安装路径,再点击Next按钮,如图所示。2.2.1KEILMDK5安装 5.在CustomerInformation对话框中填写相关用户信息,再点击Next按钮,如图所示。2.2.1KEILMDK5安装 6.如图2-10所示等待安装完成,并点击Finish,结束安装,如图所示。2.2.1KEILMDK5安装 7.左键双击STM32F1支持包,STM32F1支持包如下图所示。2.2.1KEILMDK5安装 8.在弹出的WelcometoKeilPackUnzip对话框中点击Next按钮,如下图所示。2.2.1KEILMDK5安装 9.等待安装完成,点击Finish,结束安装,如下图所示。2.2.2创建基于STM32固件库的工程模板 1.认识STM32固件库STM32有数百个寄存器,对于初学者来说,若想很快的掌握每个寄存器的用法,并能正确使用,是非常困难的。因此,意法半导体公司(ST公司)为了方便用户开发程序,提供了一套丰富的STM32固件库。STM32固件库可将寄存器的底层操作都封装起来,提供一整套接口(API)供开发者调用。在大多数场合下,开发人员不需要知道操作的是哪个寄存器,只需要知道调用哪些函数即可。2.2.2创建基于STM32固件库的工程模板 STM32固件库是根据CMSIS标准设计的,CMSIS分为如下3个基本功能层:核内外设访问层:Arm公司提供的访问,定义处理器内部寄存器地址以及功能函数;中间件访问层:定义访问中间件的通用API,是由Arm公司提供的;外设访问层:定义硬件寄存器的地址以及外设的访问函数。2.2.2创建基于STM32固件库的工程模板 另外,CMSIS还对各个外设驱动文件的文件名字规范化、函数的名字规范化等一系列规定。例如GPIO_ResetBits函数,这个函数名字也不能随便定义,是要遵循CMSIS规范的。又如,在我们使用STM32芯片时,首先要进行系统初始化,CMSIS就规定系统初始化函数名必须为SystemInit,所以各个芯片公司写自己的库函数时,就必须用SystemInit对系统进行初始化。2.2.2创建基于STM32固件库的工程模板 2.安装STM32固件库首先登录ST公司官网,下载STM32固件库,本书使用的是3.6版本的固件库。然后将STM32F10x_StdPeriph_Lib_V3.6.0压缩包进行解压,解压后的目录下包含了STM32固件库的全部文件,如右图所示。STM32固件库主要有Libraries和Project关键子目录。其中Libraries子目录有CMSIS和STM32F10x_StdPeriph_Driver子目录,这2个子目录包含了固件库核心的所有子文件夹和文件,主要包含大量的头文件、源文件和系统文件,是开发必须使用的。CMSIS子目录存放的是启动文件;STM32F10x_StdPeriph_Driver子目录存放的是STM32固件库源码文件,inc子目录存放的是stm32f10x_xxx.h头文件,src子目录存放的是stm32f10x_xxx.c固件库源码文件。2.2.2创建基于STM32固件库的工程模板 Project子目录里面有STM32F10x_StdPeriph_Examples和STM32F10x_StdPeriph_Template子目录。STM32F10x_StdPeriph_Examples子目录存放的是ST官方提供的固件实例源码,包含了几乎所有STM32F10x外设的使用详细源代码;STM32F10x_StdPeriph_Template子目录存放的是工程模板。接下来着重介绍一下STM32固件库Libraries子目录下的几个重要文件。2.2.2创建基于STM32固件库的工程模板 (1)core_cm3.c和core_cm3.h这2个文件位于\Libraries\CMSIS\CM3\CoreSupport子目录下面,分别是内核访问层的源文件和头文件,提供进入M3内核接口。是由Arm公司提供的CMSIS核心文件,对所有CM3内核的芯片都一样,永远都不需要修改这个文件。(2)STM32F10x子目录中的3个文件system_stm32f10x.c、system_stm32f10x.h以及stm32f10x.h文件,是外设访问层的源文件和头文件。2.2.2创建基于STM32固件库的工程模板 system_stm32f10x.c文件和对应的system_stm32f10x.h头文件是设置系统以及总线时钟。这里面有一个非常重要的SystemInit()函数,这个函数在系统启动时都会调用,用来设置系统的整个时钟系统。这也就是不需要用户去配置时钟,程序就能运行的原因。stm32f10x.h头文件相当重要,主要包含了STM32F10x系列所有外设寄存器的定义、位定义、中断向量表、存储空间的地址映射等。打开这个文件就可以看到,里面有非常多的结构体以及宏定义。2.2.2创建基于STM32固件库的工程模板 (3)启动文件在STM32F10x子目录下面还有一个startup子目录,这个子目录里面放8个启动文件,是以startup开头的“.s”文件。不同容量(容量是指FLASH的大小)的芯片,其启动文件也不一样。在stm32f103系列芯片中,主要使用其中3个启动文件:startup_stm32f10x_ld.s:小容量产品,FLASH容量16KB-32KB;startup_stm32f10x_md.s:中等容量产品,FLASH容量64KB-128KB;startup_stm32f10x_hd.s:大容量产品,FLASH容量256KB-512KB。2.2.2创建基于STM32固件库的工程模板 若采用STM32F103R6芯片,其容量FLASH是32K,是属于小容量产品,可选择startup_stm32f10x_ld.s启动文件。那么,启动文件到底有什么作用呢?启动文件主要是进行堆栈之类的初始化、中断向量表以及中断函数定义,还要引导进入main函数。2.2.2创建基于STM32固件库的工程模板 (4)STM32F10x_StdPeriph_Template子目录中的3个关键文件STM32F10x_StdPeriph_Template子目录下有3个关键文件:stm32f10x_it.c、stm32f10x_it.h和stm32f10x_conf.h。stm32f10x_it.c和stm32f10x_it.h是外设中断函数文件,是用来编写中断服务函数,用户可以相应的加入自己的中断程序代码。stm32f10x_conf.h是固件库配置文件,有很多#include,在建立工程时,可以注释掉一些不用的外设头文件,来选择固件库所使用的外设。2.2.2创建基于STM32固件库的工程模板 3.新建工程模板目录在这里,主要是建立基于V3.5版本固件库的工程模板目录。(1)新建一个“STM32_Project”工程模板目录,该目录作为基于STM32固件库的工程模板目录。(2)在“STM32_Project”目录下,新建USER、CORE以及STM32F10x_FWLib三个子目录,如下图所示。2.2.2创建基于STM32固件库的工程模板 STM32_Project工程模板目录2.2.2创建基于STM32固件库的工程模板 lCORE用来存放核心文件和启动文件;lSTM32F10x_FWLib用来存放ST官方提供的库函数源码文件;lUSER除了用来放工程文件外,还用来存放主函数文件main.c、以及system_stm32f10x.c、STM32F10x.s等文件。(3)把“Libraries\STM32F10x_StdPeriph_Driver”下面的src和inc子目录复制到子目录STM32F10x_FWLib下面。其中,src存放的是固件库的“.c”文件,inc存放的是其对应的“.h”文件。每个外设都对应一个“.c”文件和一个“.h”头文件。(4)把固件库里相关的启动文件复制到CORE里面。把“Libraries\CMSIS\CM3\CoreSupport”下面的core_cm3.c和core_cm3.h文件复制到CORE下面;把“……\CM3\DeviceSupport\ST\STM32F10x\startup\Arm”下面的startup_stm32f10x_ld.s文件复制到CORE下面。startup_stm32f10x_ld.s(小容量);startup_stm32f10x_md.s(中容量);startup_stm32f10x_hd.s(大容量)的启动文件。2.2.2创建基于STM32固件库的工程模板 3.新建工程模板目录在这里,主要是建立基于V3.5版本固件库的工程模板目录。(1)新建一个“STM32_Project”工程模板目录,该目录作为基于STM32固件库的工程模板目录。(2)在“STM32_Project”目录下,新建USER、CORE以及STM32F10x_FWLib三个子目录,如下图所示。2.2.2创建基于STM32固件库的工程模板 (5)把固件库里相关的文件复制到USER里面。把“Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x”下面的3个文件stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,复制到我们的子目录USER下面。把“Project\STM32F10x_StdPeriph_Template”下面的3个文件stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h复制到子目录USER下面。通过以上5个步骤,我们就可以把需要的官方固件库相关文件,复制到了工程目录模板“STM32_Project”下面。在以后的任务中,我们就可以直接复制工程模板目录,然后修改需要的名字即可。2.2.2创建基于STM32固件库的工程模板 4.新建KeilμVision4工程模板(1)新建工程运行KeilμVision5,进入Keil5集成开发环境。单击Project->NewuVisionProject,然后把工程文件保存到“STM32_Project工程模板”下面,工程名为“STM32_Project”,如右图所示。2.2.2创建基于STM32固件库的工程模板 在弹出选择芯片的对话框中,选择STMicroelectronics下面的STM32F103R6芯片,如下图所示。2.2.2创建基于STM32固件库的工程模板 (2)新建组并添加文件新建一个主文件main.c,并保存在USER目录下。通过“ManageComponents”或快捷图标
,打开“Components”;修改“ProjectTargets”栏下的名称为“STM32_Project”;先删除“Groups(中间栏)”栏下的“SourceGroup1”,然后通过单击新建按钮
(也可以通过双击下面的空白处实现),新建USER、CORE和STM32F10x_FWLib三个组,如下图所示。2.2.2创建基于STM32固件库的工程模板 2.2.2创建基于STM32固件库的工程模板 向USER、CORE和STM32F10x_FWLib组里添加我们需要的文件。先选中STM32F10x_FWLib组,通过AddFiles按钮,把工程目录的STM32F10x_FWLib/src子目录里面的所有文件都添加到“Files列表”栏下,如下图所示。2.2.2创建基于STM32固件库的工程模板 用同样的方法,添加CORE子目录里面的core_cm3.c和startup_stm32f10x_ld.s文件到CORE组里。添加USER目录里面的main.c、stm32f10x_it.c和system_stm32f10x.c文件到USER组里。说明:把所有外设的库文件都添加进来了,为后面使用方便,不用每次添加,这样做的坏处就是工程太大,编译起来速度慢。若只用了GPIO,可以只添加stm32f10x_gpio.c,其他的可以不用添加。2.2.2创建基于STM32固件库的工程模板 5.工程配置与编译(1)单击工具栏的
按钮,弹出“工程配置”对话框。选择C/C++选项,添加所要编译文件的路径,此步骤非常重要,否则编译会出现错误。单击IncludePaths最右边的方块按钮,弹出“FolderSetup”对话框,把STM32F10x_FWLib\inc、CORE和USER三个子目录都添加进去,此操作是设置编译器的头文件包含路径。2.2.2创建基于STM32固件库的工程模板 设置编译器的头文件包含路径如下图所示。2.2.2创建基于STM32固件库的工程模板 在这里还需要在C/C++选项卡配置界面中,把“STM32F10X_LD,USE_STDPERIPH_DRIVER”填写到Define输入框里,如下图所示。2.2.2创建基于STM32固件库的工程模板 这一步是为了配置一个全局的宏定义变量,因为固件库中的库函数在配置和选择外设时,是通过宏定义来选择的;如果不配置宏定义变量,工程编译将会出错。如果使用的是中容量芯片,则将STM32F10X_LD修改为STM32F10X_MD;若使用大容量芯片,则修改为STM32F10X_HD。(2)单击工具栏的
按钮,弹出“工程配置”对话框。选择C/C++选项,选择Output选项,先选中“GreateHEXFile”选项;再单击“SelectFolderforObjects…”按钮,在弹出的对话框中选中“OBJ”子目录,单击“OK”按钮。以后工程编译的HEX文件以及垃圾文件就会放到“OBJ”子目录里面,保持了工程简洁不乱。(3)完成工程配置后,需要对工程进行编译。单击工具栏的Rebuild编译按钮,对工程进行编译。若编译发生错误,要进行分析检查,直到编译正确。说明:第一次编译时,需Rebuild编译。Rebuild是不管工程的文件有没有编译过,都会对工程中的所有文件重新进行编译生成可执行文件,因此时间较长。若只编译工程中上次修改的文件时,只需Build编译即可。2.2.2创建基于STM32固件库的工程模板 设置编译器的头文件包含路径如下图所示。2.2.2创建基于STM32固件库的工程模板 任务3地库智能照明系统原理图设计引导案例基于LoRa技术的地库智能照明系统电路设计地库智能照明系统采用先进的传感技术和智能控制策略,实现对地下车库照明设备的智能化管理。该系统通过光敏传感器、人体红外传感器等多种传感器获取环境信息,并结合MCU(微控制器)的最小系统电路进行数据处理,最终通过驱动电路控制LED灯的亮度,实现节能、舒适、安全的照明效果。其系统电路包括:1.光照检测电路2.人体检测电路3.MCU最小系统电路4.驱动电路5.电源电路本设计中,在硬件选型过程中综合考虑多个因素,以确保系统的可靠性、稳定性和经济性,以下为关键硬件选型:1.LoRa通信模块考虑模块的通信距离、功耗、数据传输速率和可靠性,选择符合LoRaWAN标准的通信模块,确保与其他LoRa设备的兼容性,根据系统的实际需求,选择深圳大夏龙雀科技有限公司的DX-LR01模块。2.中央控制器考虑控制器的输入输出接口数量、类型和功能,确保满足系统需求;考虑控制器的可扩展性和灵活性,以便后续系统升级和扩展;选择性能稳定、处理能力强的STM32F107芯片作为中央控制器。2.3.1硬件选型 本设计中,在硬件选型过程中综合考虑多个因素,以确保系统的可靠性、稳定性和经济性,以下为关键硬件选型:1.LoRa通信模块考虑模块的通信距离、功耗、数据传输速率和可靠性,选择符合LoRaWAN标准的通信模块,确保与其他LoRa设备的兼容性,根据系统的实际需求,选择深圳大夏龙雀科技有限公司的DX-LR01模块。2.中央控制器考虑控制器的输入输出接口数量、类型和功能,确保满足系统需求;考虑控制器的可扩展性和灵活性,以便后续系统升级和扩展;选择性能稳定、处理能力强的STM32F107芯片作为中央控制器。2.3.1硬件选型 3.光敏电阻考虑传感器的测量精度和稳定性,确保能够准确反映地下车库的光照条件,选择具有高灵敏度、宽测量范围和快速响应时间的5528光敏电阻作为光照检测电路核心元件。4.红外传感器考虑传感器的检测范围、灵敏度、响应时间和抗干扰能力,根据实际需求和预算,选择适合的红外传感器、雷达传感器或其他类型的人体活动传感器,如HC-SR501热释红外传感器、RCWL-0513微波雷达感应探测器等。2.3.1硬件选型 2.3.2原理图设计 1.中央控制器模块中央控制器选用STM32F107VCT6芯片。STM32F107VCT6是STMicroelectronics公司生产的STM32F1系列微控制器(MCU)中的一员。STM32F1系列芯片基于ARMCortex-M3内核,具有高性能、低成本和低功耗的特点。STM32F107提供了相对较高的Flash和RAM容量,以及丰富的外设接口,适合于各种嵌入式应用。中央控制器模块主要功能为:采集人体移动信号、光照强调信号,接收来自LoRa通信模块的数据,并根据预设的逻辑算法进行决策,控制LED驱动电路,可采用PWM技术实现LED灯的亮度调节。中央控制器模块包含STM32F107VCT6最小系统电路,led指示灯及按键电路,外部接口电路。2.3.2原理图设计 中央控制器模块包含STM32F107VCT6最小系统电路:2.3.2原理图设计 led指示灯及按键电路:2.3.2原理图设计 外部接口电路:2.3.2原理图设计 2.LoRa通信模块LoRa通信模块采用深圳大夏龙雀科技有限公司的DX-LR01模组,集成LoRa无线通信技术,可以通过串口将传感器数据发送到中央控制器。DX-LR01是一款低功耗LoRa模组,是深圳大夏龙雀科技有限公司为智能无线数据传输而打造,采用国产ASR6601SOC芯片,芯片内部集成了SUb1GHz的射频收发机、ArmChinaSTAR-MC1微处理器。2.3.2原理图设计 DX-LR01特点如下:
ArmChinaSTAR-MC1架构32位ARMSTAR内核,最高主频48MHz高功率PA,超大输出功率:+22dBm最大接收灵敏度:-138dBm支持UART,I2C,I2S,LPUART,SSP,QSPI等接口工作电压:3V-3.7V(典型值:3.3V)支持工作频率范围:150-960MHZ空旷可视距离可到8km(仅供参考,实际距离以实测为准)城市距离可到3.8km(仅供参考,实际距离以实测为准)2.3.2原理图设计 LORA通信模块,包含DX-LR01模块,复位电路,天线接口,电源指示灯电路,其电路如下图所示。2.3.2原理图设计 3.光敏传感器电路光敏传感器电路利用光敏电阻(光感电阻)作为光照检测元件,将光照强度转换为电阻值变化。电阻值变化通过适当的电路转换为电压信号,供后续电路或MCU读取。电路包含5528光敏电阻,LM393模块(双电压比较器集成电路),开关指示灯电路,如下图所示。其中DO接口为开关量输出,AO接口为模拟量输出。2.3.2原理图设计 4.人体活动检测电路人体活动检测电路使用热释红外传感器及微波雷达传感器检测人体活动。热释红外传感器中的被动式热释电红外探头以探测人体辐射为目标,人体发射的10UM左右的红外线通过菲湿尔滤光片增强后聚集到红外感应源上,从而产生电信号。微波雷达感应器探头是以探测活动的人或物体为目标,利用电磁波的多普勒原理,通过反射波的变化检测有运动物体逼近或远离,然后把这种变化转换成电信号输出。2.3.2原理图设计 人体感应电路包含HC-SR505人体红外检测电路、RCWL-0513微波雷达检测电路。
人体感应电路HC-SR505人体红外模块RCWL-0513微波雷达模块任务4智能照明系统程序设计引导案例基于LoRa技术的地库智能照明系统方案地库作为建筑的重要组成部分,其照明系统对于保障行车安全、提供清晰可见的停车环境至关重要。然而,传统的地库照明系统往往存在能耗高、控制不灵活、维护困难等问题。为了解决这些问题,某公司设计了一套基于LoRa技术的地库智能照明系统如下:1.系统架构该系统采用LoRa技术作为无线通信基础,实现地库内照明设备的智能化控制。通过光线传感器、人体红外传感器等实时监测地库内的光照强度和人员活动情况;并且利用LoRa网络将感知层的数据传输至应用层;应用层则负责数据的处理、分析和控制指令的生成。引导案例基于LoRa技术的地库智能照明系统方案2.软件设计(1)嵌入式程序设计:针对智能照明设备和传感器,编写嵌入式程序,实现数据采集、处理和控制指令的接收与执行。(2)移动应用设计:开发一款移动应用,供工作人员使用,用于实时查看地库内的照明状态、接收报警信息、发送控制指令等。管理员可以通过移动应用软件远程控制地库内的照明设备,如调节亮度、改变色温等。同时,系统还可以实时监测设备的运行状态,并发送报警信息至管理员的移动设备或电脑终端,以便及时处理设备故障。2.4.1知识准备1.认识STM32的IO口(1)STM32的IO口的8种模式STM32的IO口相比51单片机而言要复杂得多,所以使用起来也困难很多。STM32的IO口可以由软件配置成如下8种模式:浮空输入:IN_FLOATING。输入什么信号就是什么信号,对于浮空输入要保证有明确的输入信号。上拉输入:IPU。没有输入信号的时候默认输入高电平(含IO内部上拉电阻。下拉输入:IPD。有输入信号的时候默认输入低电平(含IO内部下拉电阻)。模拟输入:AIN。应用ADC模拟输入,或者低功耗下省电。2.4.1知识准备开漏输出:Out_OD。IO输出0接GND;IO输出1,悬空;需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,所以IO口也可以由外部电路改变为低电平或不变。推挽输出:Out_PP。IO输出0接GND,IO输出1接VCC。复用功能的推挽式输出:AF_PP。片内外设功能(如I2C的SCL,SDA)。复用功能的开漏输出:AF_OD。片内外设功能(如TX1,MOSI)。每个IO口都可自由编程,单IO口寄存器必须要按32位字访问。2.4.1知识准备(2)STM32的IO端口寄存器STM32常用的IO端口寄存器有以下6个:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;1个16位的复位寄存器BRR;2.4.1知识准备IO端口低配置寄存器CRL是控制着每个IO端口(A~G)的低8位IO端口的模式和输出速率。每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE,配置表如表所示。2.4.1知识准备IO端口低配置寄存器CRL描述如图所示:2.4.1知识准备例如:设置GPIOA的1位为上拉输入,2位为推挽输出,输出速率为50MHz。采用寄存器设置,代码如下:GPIOA->CRL&=0XFFFFF00F;//清掉这1、2位原来的设置,不影响其他位的设置GPIOA->CRL|=0X00000380;//PA1上拉/下拉输入,PA2推挽输出、速率为50MHzGPIOA->ODR=1<<1; //设置PA2输出1通过这3个语句,设置了PA1为上拉输入,PA2为推挽输出、速率为50MHz。2.4.1知识准备2.STM32的GPIO初始化和输入输出库函数(1)RCC_APB2PeriphClockCmd()函数RCC_APB2PeriphClockCmd()函数功能为使能GPIOx对应的外设时钟。例如,使能GPIOB和GPIOC时钟程序如下:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);其中,RCC_APB2Periph_GPIOB和RCC_APB2Periph_GPIOC是在stm32f10x_rcc.h头文件中定义的。RCC_APB2PeriphClockCmd()函数是在固件库的stm32f10x_rcc.c文件中定义的。2.4.1知识准备2.STM32的GPIO初始化和输入输出库函数(2)GPIO_Init()函数GPIO_Init()函数功能为初始化(配置)GPIO的模式和速度,也就是设置相应GPIO的CRL和CRH寄存器值。函数原型是:voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);GPIOx是GPIO_TypeDef类型指针变量,用于确定是哪一个GPIO,GPIOx取值为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF和GPIOG。GPIO_InitStruct是GPIO_InitTypeDef类型指针变量,用于确定GPIOx的对应引脚以及该引脚的模式和输出最大速度。2.4.1知识准备2.STM32的GPIO初始化和输入输出库函数(3)GPIO_ReadInputData()和GPIO_ReadInputDataBit()函数GPIO_ReadInputData()函数功能为读取指定IO口16个引脚的输入值,也是读取IDR寄存器的值。例如,读取GPIOB口输入值为:temp=GPIO_ReadInputData(GPIOB);GPIO_ReadInputDataBit()函数功能为读取指定IO口的对应引脚值,也就是读取IDR寄存器的值。例如,读取GPIOA.6(既PA6)引脚值如下:GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6);2.4.1知识准备2.STM32的GPIO初始化和输入输出库函数(4)GPIO_ReadOutputDataBit()和GPIO_ReadOutputData()函数GPIO_ReadOutputDataBit()函数是读取指定IO口某个引脚的输出值,也就是读取寄存器ODR相应位的值。例如,读取GPIOC.3引脚输出值为:GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3);GPIO_ReadOutputData()函数是读取指定IO口16个引脚的输出值,也就是读取寄存器ODR的值。例如,读取GPIOC口所有引脚输出值为:GPIO_ReadOutputData(GPIOC);2.4.1知识准备2.STM32的GPIO初始化和输入输出库函数(5)GPIO_SetBits()和GPIO_ResetBits()函数GPIO_SetBits()和GPIO_ResetBits()是用来设置取指定IO口的引脚输出高电平和低电平的,也就是设置寄存器BSRR、BRR的值。例如,GPIOB.8引脚输出高电平:GPIO_SetBits(GPIOB,GPIO_Pin_8);又如,GPIOB.9引脚输出低电平:GPIO_ReSetBits(GPIOB,GPIO_Pin_9);2.4.1知识准备2.STM32的GPIO初始化和输入输出库函数(6)GPIO_WriteBit()和GPIO_Write()函数GPIO_WriteBit()函数是向指定IO口的引脚写0或者写1,也就是向寄存器ODR相应位的写0或者写1。例如,向PC8写1:GPIO_WriteBit(GPIOC,GPIO_Pin_8,1);GPIO_Write()函数是向指定IO口写数据,也就是是向寄存器ODR写数据例如,向GPIOE口写0xFFFE:GPIO_Write(GPIOE,0xFFFE);2.4.1知识准备3.认识STM32的模数转换STM32拥有1~3个ADC,这些ADC可以独立使用,也可以使用双重模式(提高采样率)。STM32F103系列最少有2个ADC,如STM32F103VCT6有3个ADC、STM32F103RBT6有2个ADC。STM32的ADC是12位逐次逼近型的模拟数字转换器。ADC有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。2.4.1知识准备3.认识STM32的模数转换(1)STM32的ADC结构STM32把ADC的转换分为规则通道组和注入通道组2个通道组,规则通道组最多包含16个通道,注入通道组最多包含4个通道。规则通道组和注入通道组之间有什么关系呢?规则通道相当于我们正常运行的程序,注入通道相当于中断。在正常执行程序(规则通道)的时候,中断(注入通道)是可以打断正常执行的程序。既注入通道的转换可以打断规则通道的转换,在注入通道被转换完成之后,规则通道才得以继续转换。在程序初始化中要设置好规则通道组和注入通道组。2.4.1知识准备3.认识STM32的模数转换(2)ADC相关的库函数与ADC相关的库函数,主要在stm32f10x_adc.c文件和stm32f10x_adc.h文件中。1)开启PA口时钟和ADC1时钟,设置PA1为模拟输入。STM32F103VCT6的ADC通道0在PA1上,要先使能PORTA时钟和ADC1时钟,然后设置PA1为模拟输入。库函数实现的方法如下:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_Init(GPIOA,&GPIO_InitStructure); //PA1作为模拟输入引脚2.4.1知识准备3.认识STM32的模数转换(2)ADC相关的库函数2)复位ADC1,并设置分频因子。ADC1复位函数ADC_DeInit(),复位ADC1代码如下:ADC_DeInit(ADC1);设置ADC分频因子函数RCC_ADCCLKConfig(),设置AD
C分频因子为6,可获得72MHz/6=12MHz,代码如下:RCC_ADCCLKConfig(RCC_PCLK2_Div6);2.4.1知识准备3.认识STM32的模数转换(2)ADC相关的库函数3)初始化ADC1参数,设置ADC1的工作模式以及规则序列的相关信息。初始化ADC1函数ADC_Init(),可以根据指定的参数,初始化外设ADCx的寄存器。初始化ADC1的代码如下:ADC_Init(ADC1,&ADC_InitStructure);2.4.1知识准备3.认识STM32的模数转换(2)ADC相关的库函数4)使能AD转换器和校准设置使能ADC1代码如下:ADC_Cmd(ADC1,ENABLE);使能复位校准ADC1代码如下:ADC_ResetCalibration(ADC1);等待复位校准结束代码如下:while(ADC_GetResetCalibrationStatus(ADC1));开启AD校准代码如下:ADC_StartCalibration(ADC1);等待校准结束代码如下:while(ADC_GetCalibrationStatus(ADC1));2.4.1知识准备3.认识STM32的模数转换(2)ADC相关的库函数5)读取ADC值ADC1的通道1采样时间是239.5周期,代码如下:ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);使能指定的ADC1的软件转换启动功能,代码如下:ADC_SoftwareStartConvCmd(ADC1,ENABLE);等待转换结束,代码如下:while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));读取ADC1规则组的转换结果,代码如下:temp=ADC_GetConversionValue(ADC1);2.4.1知识准备4.认识STM32的USART串口STM32拥有3路USART串口,串口资源丰富、功能强劲,其与传统的51单片机(或PC)的串口(UART)还有所区别。(1)USART串口USART(通用同步/异步串行收发器)是一种能够把二进制数据按位(bit)传送的通信方式。STM32的USART串口采用了一种灵活的方法,使用异步串行数据格式进行外部设备之间的全双工数据交换。利用分数波特率发生器提供宽范围的波特率选择,并支持局部互连网LIN、智能卡协议和IrDASIRENDEC规范,还具有用于多缓冲器配置的DMA方式,可以实现高速数据通信。2.4.1知识准备4.认识STM32的USART串口(2)USART串口硬件连接USART串口是通过RX(接收数据串行输入)、TX(发送数据输出)和地3个引脚与其他设备连接在一起的。USART1串口的TX和RX引脚使用的是PA9和PA10;USART2串口的TX和RX引脚使用的是PA2和PA3;USART3串口的TX和RX引脚使用的是PB10和PB11;这些引脚默认的功能都是GPIO,在作为串口使用时,就要用到这些引脚的复用功能,在使用其的复用功能前,必须对复用的端口进行设置。2.4.1知识准备4.认识STM32的USART串口(3)STM32串口的相关库函数1)使能USART串口的时钟USART1串口是挂载在APB2(高速外设)的外设,USART2和USART3串口是挂载在APB1(低速外设)的外设。例如,使能USART1串口时钟的代码如下:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);再如,使能USART2串口时钟的代码如下:RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);2.4.1知识准备4.认识STM32的USART串口(3)STM32串口的相关库函数2)设置GPIO复用端口USART1的TX和RX引脚使用的是PA9和PA10,USART2使用的是PA2和PA3,USART3使用的是PB10和PB11,这些引脚默认的功能都是GPIO。TX用来发送数据,设置成复用功能的推挽输出(AF_PP);RX用来接收数据,设置成浮空输入(IN_FLOATING)。下面以USART1串口为例,GPIO复用功能设置步骤如下:使能GPIOA的时钟;PA9(TXD)设置成复用功能的推挽输出(AF_PP);PA10(RXD)设置成浮空输入(IN_FLOATING)。2.4.1知识准备4.认识STM32的USART串口(3)STM32串口的相关库函数3)串口复位串口复位是在USART_DeInit()函数中完成,例如复位USART2串口的代码如下:USART_DeInit(USART2); //复位串口24)初始化和使能串口初始化主要是配置串口的波特率、校验位、停止位和时钟等基本功能,是通过USART_Init()函数来实现的。串口使能是通过函数USART_Cmd()来实现的。例如USART2串口使能代码如下:USART_Cmd(USART2,ENABLE);2.4.1知识准备4.认识STM32的USART串口(3)STM32串口的相关库函数5)开启串口响应中断串口接收到数据时(RXNE读数据寄存器非空),产生中断。例如开启USART1串口接收到数据中断的代码是:USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启中断,接收到数据中断串口在发送数据结束时(TC发送完成),产生中断。例如开启USART1串口发送完数据中断的代码如下:USART_ITConfig(USART1,USART_IT_TC,ENABLE);2.4.1知识准备5.STM32的PWM输出相关库函数PWM相关的函数设置,是在库函数文件stm32f10x_tim.h和stm32f10x_tim.c文件中。(1)开启TIM1时钟以及复用功能时钟,配置PE8和PE13为复用输出。库函数使能TIM1时钟的方法如下:RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//使能定时器1时钟库函数设置AFIO时钟的方法如下:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//复用时钟使能复用推挽输出的设置代码,代码如下:GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出2.4.1知识准备5.STM32的PWM输出相关库函数(2)使用TIM_TimeBaseInit()函数,初始化TIM1,设置TIM1的ARR和PSC。在开启了TIM1的时钟之后,还要设置ARR和PSC两个寄存器的值来控制输出PWM的周期,通过库函数的TIM_TimeBaseInit()函数来实现,设置代码如下:TIM_TimeBaseStructure.TIM_Period=arr;//设置自动重装载值TIM_TimeBaseStructure.TIM_Prescaler=psc;//设置预分频值TIM_TimeBaseStructure.TIM_ClockDivision=0;//设置时钟分割:TDTS=Tck_timTIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//根据指定的参数初始化TIM12.4.1知识准备5.STM32的PWM输出相关库函数(3)通过TIM_OC1Init()和TIM_OC3Init()函数,来设置TIM1_CH1N和TIM1_CH3的PWM模式,使能TIM1的CH1N和CH3输出。设置TIM1_CH1N为PWM模式1:TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//TIM输出比较极性高TIM_OC1Init(TIM1,&TIM_OCInitStructure);//指定的参数初始化外设TIM的OC12.4.1知识准备5.STM32的PWM输出相关库函数(4)使用TIM_Cmd()函数使能TIM1,使用TIM_SetCompare1()函数和TIM_SetCompare3()函数修改TIM1_CCR1和TIM1_CCR3控制占空比。使能TIM1在完成以上设置后,还需要使能TIM1,代码如下:TIM_Cmd(TIM1,ENABLE);//使能TIM12.4.1知识准备5.STM32的PWM输出相关库函数(5)修改TIM1_CCR1和TIM1_CCR3控制占空比在库函数中,修改TIM1_CCR1和TIM1_CCR3占空比的函数是:voidTIM_SetCompare1(TIM_TypeDef*TIMx,uint16_tCompare1);voidTIM_SetCompare3(TIM_TypeDef*TIMx,uint16_tCompare3);通过以上库函数的配置,就可以通过TIM1的CH1N和CH3输出PWM了。2.4.2人体红外检测驱动程序 人体红外检测由人体红外检测模块和微波雷达检测模块协同工作,人体红外检测模块检测到有人进入其感应范围则OUT引脚输出高电平,人离开感应范围则自动延时关闭高电平,输出低电平;微波雷达检测模块检测到有人或物体在其感应范围内移动则MOS引脚输出低电平,人或物体离开感应范围则自动延时关闭低电平,输出引脚悬空。2.4.2人体红外检测驱动程序 1.新建组和添加文件到STM32_Project工程模板将任务二中新建的“STM32_Project工程模板”文件夹复制一份出来,并重命名为“基于LORA的地库智能照明系统程序”。在文件夹中新建SYS子目录,打开工程并新建SYS组(注:添加SYS文件夹路径,操作步骤详看任务二)。2.4.2人体红外检测驱动程序 2.编写人体红外检测程序在SYS子目录下新建Infrared.h头文件和Infrared.c文件。1)编写Infrared.h头文件在Infrared.h头文件中,主要声明红外检测初始化函数、红外检测判断函数。代码见书58页。2)编写Infrared.c头文件在Infrared.c头文件中,主要编写红外检测初始化函数、红外检测判断函数。代码见书59页。2.4.3光敏传感器检测驱动程序 光敏电阻模块对环境光线最敏感,一般用来检测周围环境的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川攀枝花学院直接考核招聘博士专职辅导员7人考试参考题库及答案详解
- 2026辽宁省自然资源事务服务中心招聘高层次和急需紧缺人才2人考试参考题库及答案详解
- 2026福建厦门市集美区教师进修学校附属柏涛实验学校 非在编(顶岗)教师招聘6人笔试备考试题及答案详解
- 2026河北衡水武邑职教中心·劳动技工学校教师招聘31人考试参考题库及答案详解
- 2026中国消费级无人机市场饱和度与专业级应用拓展报告
- 2026圣卢西亚旅游业市场供需分析及投资评估规划分析研究报告
- 2026中国医药行业市场现状发展分析及投资评估研究报告
- 秘书处年度工作总结报告
- 2026食品加工机械行业市场供需调整分析预测评估发展研究探讨报告
- 2026汽车零部件制造业市场发展分析及技术趋势研判与投资拓展战略研究报告
- 避孕防护知识培训课件
- 2026版一本英语听力训练100篇-3年级
- 《关于优化服务规范监管扎实推进既有住宅加装电梯的通知》
- GJB3206B-2022技术状态管理
- 2025至2030中国家电行业深度发展研究与企业投资战略规划报告
- 我国中老年人群慢性肺部疾病患病率及相关因素分析-基于CHARLS数据库
- 三年级上册英语单词表【1-6单元】
- 课件-隧道施工安全培训
- 脑干出血治疗指南
- 丰乳肥臀在线阅读
- 心境情感障碍的护理查房
评论
0/150
提交评论