2 环境光照强度监测的应用开发_第1页
2 环境光照强度监测的应用开发_第2页
2 环境光照强度监测的应用开发_第3页
2 环境光照强度监测的应用开发_第4页
2 环境光照强度监测的应用开发_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

项目4环境参数监测与显示系统的设计与实现12案例引导本项目主要讲解温湿度传感器、光照强度传感器和OLED显示模块、TFT-LCD显示屏、电子秤的工作原理及应用技术,介绍STM32F4系列微控制器的I2C、SPI、FSMC外设的使用细节。读者通过实施本项目的4个任务,应掌握以下内容。(1)常用的环境参数监测传感器的编程应用方法。(2)常见的通信接口的编程配置方法。(3)能完成有显示需求的应用程序开发。光照强度测量任务描述1任务目标(1)掌握常用的光照强度检测传感器的工作原理。(2)掌握STM32F407的I2C总线的工作原理。(3)会编写环境光照强度监测的应用程序。任务4.2环境光照强度监测的应用开发32本任务要求设计一个应用程序,以实现将采集到的环境参数上报PC端,进行持久化存储,并对后续的数据分析提供方便。具体要求如下。系统每隔1小时采集一次环境参数,并在数据前加入时间戳(即采集的日期与时间)后,存入一种存储介质中。为方便教学,我们把任务简化,先不需要采集的日期与时间,也不存到Flash存储器,只需要把采集到的光照强度[单位:勒克斯lx]上报PC端即可。任务内容光照强度测量4任务分析任务4.2环境光照强度监测的应用开发

本任务要求设计一个应用程序,以实现对环境光照强度的监测。传感器硬件使用ROHM半导体公司的BH1750光照强度传感器模块,该模块的实物如下图所示,子图(a)为传感器模块正面,子图(b)为传感器模块背面。BH1750光照强度传感器模块与MCU的硬件接线表BH1750光照强度传感器模块实物图I2C总线规范;BH1750光照强度传感器的特性;环境光照强度监测应用程序的编写方法。光照强度测量5任务分析任务4.2环境光照强度监测的应用开发环境参数测量基于STM32F407的HAL库的环境光照强度BH1750检测的应用开发可按以下步骤进行。硬件准备(1)使用STM32F407开发板和BH1750光照强度传感器进行连接。(2)设置STM32F407的时钟,并初始化I2C总线用于与BH1750通信。2)根据BH1750的规格书,编写初始化函数以配置BH1750的工作模式和采样速率。(1)实现开始测量函数,向BH1750发送命令以启动光照强度的测量。(2)编写读取数据函数,通过I2C总线从BH1750读取测量到的光照强度值。3)应用程序开发(1)初始化STM32F407的HAL库,并设置相应的GPIO和I2C引脚。(2)调用BH1750驱动程序的初始化函数进行初始化。(3)设计主循环。调用开始测量函数启动光照强度的测量。调用读取数据函数获取测量到的光照强度值。对光照强度进行处理和判断,如比较是否超过某个预设阈值。根据需要执行相应的操作,如控制外部设备的亮度或触发警报等。4)优化设计6任务分析任务4.2环境光照强度监测的应用开发本任务涉及的必备知识点如下。BH1750光照强度传感器的基本工作原理和性能指标。BH1750光照强度传感器的传输时序。STM32F407的I2C的基本原理。光照强度测量7知识链接任务4.2环境光照强度监测的应用开发BH1750光照强度传感器认识BH1750BH1750FVI是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电路可以根据收集的光线强度数据,利用它的高分辨率可以探测较大范围的光强度变化。ROHM半导体公司的BH1750光照强度传感器模块的实物如图4-12所示。光照强度测量8知识链接任务4.2环境光照强度监测的应用开发BH1750光照强度传感器2)BH1750光照强度传感器模块与STM32F407微控制器的硬件连接BH1750传感器引脚与STM32F407微控制器的硬件连接如表4-3所示。表4-3BH1750与STM32F407微控制器的连接序号传感器模块引脚说明连接MCU端1VCC电源输入3.3~5V2GND接地GND3SCLI2C总线的时钟线微控制器I2C总线的SCL(本任务连接PB6)4SDAI2C总线的数据线微控制器I2C总线的SDA(本任务连接PB7)5ADDRBH1750的地址线:‘1’对应的10111000(0xB8);‘0’对应的01000110(0x46)本任务中接地光照强度测量9知识链接任务4.2环境光照强度监测的应用开发BH1750光照强度传感器3)BH1750传感器的工作原理及特点BH1750传感器有接近视觉灵敏度的光谱灵敏度特性,它支持I2C总线接口,支持1.8V逻辑输入接口。传感器有两种可选的I2Cslave地址,无需其他外部件。光源依赖性弱,受红外线影响很小。传感器通过降低功率功能,实现低电流化。通过50Hz/60Hz除光噪音功能实现稳定的测定,最小误差变动在±20%。BH1750的电气特性如表4-4所示。参数最小值典型值最大值单位供电电流-120190μA关机电流-0.011.0μA峰值灵敏度波长-560-nm测量精度(传感器输出/实际光照度)0.961.21.44倍环境全黑(0lx)时传感器输出值003lxH-Resolution模式分辨率-1-lxL-Resolution模式分辨率-4-lx高分辨率的测量时间-120180ms低分辨率的测量时间-1624ms表4-4BH1750的电气特性光照强度测量10知识链接任务4.2环境光照强度监测的应用开发BH1750光照强度传感器4)BH1750的测量流程BH1750的测量流程如图4-13所示。模块上电后的初始状态为断电模式(PowerDown),需要发送“上电指令”,传感器切换为上电模式(PowerOn),此时可发送不同的测试指令(MeasurementCommand)使传感器完成诸如“单次测量”(OneTimerMeasurement)或“连续测量”(ContinuousMeasurement)等操作,图4-13中的虚线代表我们用I2C写入的指令码(OpeCode),实线是芯片电路自动切换状态过程。光照强度测量11知识链接任务4.2环境光照强度监测的应用开发光照强度测量BH1750光照强度传感器5)BH1750的控制指令集BH1750的主要控制指令及其说明如表4-5所示。表4-5BH1750的控制指令集指令指令码说明断电(PowerDown)0000_0000(0x00)非激活状态通电(PowerOn)0000_0001(0x01)等待测量指令状态复位(Reset)0000_0111(0x07)恢复数据寄存器的值(断电模式下不可用)连续高分辨率模式(ContinuouslyH-ResolutionMode)0001_0000(0x10)分辨率1lx,典型测量时间120ms连续低分辨率模式(ContinuouslyL-ResolutionMode)0001_0001(0x11)分辨率0.5lx,典型测量时间120ms单次高分辨率模式10010_0000(0x20)测量后自动切换为断电模式单次高分辨率模式20010_0001(0x21)测量后自动切换为断电模式单次低分辨率模式0010_0011(0x23)测量后自动切换为断电模式12知识链接光照强度测量I2C总线规范1.I2C总线概述I2C(Inter-IntegratedCircuitBus)总线由Philips公司推出,在微电子通信控制领域得到广泛应用。I2C总线是串行同步通信的一种类型,它具有双向、两线、多主控的特点,并具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。I2C总线的连接方式13知识链接光照强度测量I2C总线规范1.I2C总线概述I2C总线相关的术语14知识链接光照强度测量I2C总线规范2.I2C通信的起始条件和停止条件在I2C通信的过程中,起始条件和停止条件是两种特殊的电平状态,如图中的“STARTcondition”和“STOPcondition”所示。起始条件和停止条件使用普通的I/O口模拟起始信号voidIIC_start(void){/*SCL为高电平期间,SDA从高电平往低电平跳变*/IIC_SDA(1

); IIC_SCL(1);iic_delay(

);IIC_SDA(0

); iic_delay(

);IIC_SCL(0

); iic_delay(

);/*钳住总线,准备发送/接收数据*/}(使用普通的I/O口模拟停止信号):voidiic_stop(void){/*SCL为高电平期间,SDA从低电平往高电平跳变*/IIC_SDA(0

); iic_delay(

); IIC_SCL(1

); iic_delay(

);IIC_SDA(1

);

/*发送总线停止信号*/ iic_delay(

);}15知识链接光照强度测量I2C总线规范3.I2C总线的寻址和数据传输方向的表示I2C总线上的每个器件都有一个独立的地址,主机发起通信时,通过SDA线发送设备地址(slaveaddress,7bit

or10bit)进行从机的寻址。器件地址后面的一个数据位(第8位或第10位)用于表示数据的传输方向,我们一般称之为数据方向位(R/

W)。数据方向位为“1”时,主机由从机中读取数据;数据方向位为“0”时,主机向从机写入数据。从机地址和数据传输方向的表示16知识链接光照强度测量I2C总线规范4.I2C通信的数据有效性I2C通信的数据有效性17知识链接光照强度测量I2C总线规范5.I2C通信的响应I2C通信的响应响应包括应答信号(ACK)和非应答信号(NACK)两种。检测应答信号,编码如下:uint8_tiic_wait_ack(void)/*return1:fail0:succeed*/{ IIC_SDA(1);

/*主机释放SDA线*/ iic_delay(

); IIC_SCL(1);

/*从机返回ACK*/

iic_delay(

);

if(

IIC_READ_SDA)/*SCL高电平读取SDA状态*/ { iic_stop();

/*SDA高电平表示从机NACK*/

return1; } IIC_SCL(0);/*SCL低电平表示结束ACK检查*/ iic_delay(

);

return

0;}186.I2C总线的数据传输时序与格式完整的数据传输时序图知识链接光照强度测量I2C总线规范196.I2C总线的数据传输时序与格式主机写数据到从机的格式知识链接光照强度测量I2C总线规范206.I2C总线的数据传输时序与格式主机自从机中读数据知识链接光照强度测量I2C总线规范读取1字节数据,编码如下:uint8_tiic_read_byte(uint8_tack){/*1:ack0:nack*/ uint8_treceive=0; for(uint8_tt=0;t<8;t++) {/*高位先输出,先收到的数据位要左移*/ receive<<=1; IIC_SCL(1

); iic_delay(

);

if(

IIC_READ_SDA)receive++; IIC_SCL(0

); iic_delay(

); }

if(

!ack)iic_nack();

elseiic_ack();

return

receive;

}216.I2C总线的数据传输时序与格式主机与从机通信的复合数据格式知识链接光照强度测量I2C总线规范22知识链接光照强度测量STM32F4的I2C简介STM32的I2C外设可用作通信的主机及从机,支持100kbit/s和400kbit/s的速率,支持7位、10位设备地址,支持DMA数据传输,并具有数据校验功能。通信引脚表4-7STM32F4xx的I2C引脚引脚I2C编号I2C1I2C2I2C3SCLPB6/PB10PH4/PF1/PB10PH7/PA8SDAPB7/PB9PH5/PF0/PB11PH8/PC9I2C的所有硬件架构都是根据图4-16中左侧的SCL线和SDA线展开的。STM32芯片有多个I2C外设,它们的I2C通信信号引出到不同的GPIO引脚上,使用时必须配置好这些指定的引脚,如表4-7所示23知识链接光照强度测量STM32F4的I2C简介时钟控制逻辑SCL线的时钟信号由I2C接口根据时钟控制寄存器(CCR)控制,控制的参数主要为时钟频率。配置I2C的CCR寄存器可修改通信速率相关的参数。可选择I2C通信的“标准/快速”模式,这两个模式分别I2C对应100/400kbit/s的通信速率。在快速模式下可选择SCL时钟的占空比,可选Tlow/Thigh=2或Tlow/Thigh=16/9模式,其实这两个模式的比例差别并不大,若不是要求非常严格,这里随便选就可以了。CCR寄存器中还有一个12位的配置因子CCR,它与I2C外设的输入时钟源共同作用,产生SCL时钟。我们的PCLK1=42MHz,想要配置400kbit/s的速率,经过计算得到CCR的值为35。24知识链接光照强度测量STM32F4的I2C简介数据控制逻辑I2C的SDA信号主要连接到数据移位寄存器上,数据移位寄存器的数据来源及目标是数据寄存器(DR)、地址寄存器(OAR)、数据包错误校验寄存器(PEC)以及SDA数据线。当向外发送数据的时候,数据移位寄存器以“数据寄存器”为数据源,把数据一位一位地通过SDA信号线发送出去;当从外部接收数据的时候,数据移位寄存器把SDA信号线采样到的数据一位一位地存储到“数据寄存器”中。若使能了数据校验,接收到的数据会经过PEC(数据包错误校验)运算,运算结果存储在“PEC寄存器”中。当STM32的I2C工作在从机模式的时候,接收到设备地址信号时,数据移位寄存器会把接收到的地址与STM32的自身的“I2C地址寄存器”的值作比较,以便响应主机的寻址。STM32的自身I2C地址可通过修改“自身地址寄存器”,支持同时使用两个I2C设备地址,两个地址分别存储在OAR1和OAR2中。25知识链接光照强度测量STM32F4的I2C简介整体控制逻辑整体控制逻辑负责协调整个I2C外设,控制逻辑的工作模式根据我们配置的“控制寄存器(CR1/CR2)”的参数而改变。在外设工作时,控制逻辑会根据外设的工作状态修改“状态寄存器(SR1和SR2)”,只要读取这些寄存器相关的寄存器位,就可以了解I2C的工作状态了。除此之外,控制逻辑还根据要求,负责控制产生I2C中断信号、DMA请求及各种I2C的通信信号(起始信号、停止信号、响应信号等)。26知识链接光照强度测量STM32F4的I2C简介通信过程使用I2C外设通信时,在通信的不同阶段它会对“状态寄存器(SR1及SR2)”的不同数据位写入参数,我们通过读取这些寄存器标志来了解通信状态。(1)主发送器主发送器发送流程及事件说明如下。控制产生起始信号(S),当发生起始信号后,它产生事件“EV5”,并会对SR1寄存器的SB位置1,表示起始信号已经发送。紧接着发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”及“EV8”,这时SR1寄存器的ADDR位及TXE位被置1,ADDR为1表示地址已经发送,TXE为1表示数据寄存器为空。以上步骤正常执行并对ADDR位清零后,我们往I2C的数据寄存器DR写入要发送的数据,这时TXE位会被重置0,表示数据寄存器非空,I2C外设通过SDA信号线一位一位把数据发送出去后,又会产生“EV8”事件,即TXE位被置1,重复这个过程,就可以发送多个字节数据了。当数据发送完成后,控制I2C设备产生一个停止信号(P),这个时候会产生“EV8_2”事件,SR1的TXE位及BTF位都被置1,表示通信结束。假如我们使能了I2C中断,以上所有事件产生时,都会产生I2C中断信号,进入同一个中断服务函数,到I2C中断服务程序后,再通过检查寄存器位来了解是哪一个事件。27知识链接光照强度测量STM32F4的I2C简介(2)主接收器再来分析主接收器通信过程,即作为I2C通信的主机端时,从外部接收数据的过程,如图4-18所示主接收器接收流程及事件说明如下。同主发送流程,起始信号(S)是由主机端产生的,控制发生起始信号后,它产生事件“EV5”,并会对SR1寄存器的SB位置1,表示起始信号已经发送。紧接着发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”,这时SR1寄存器的ADDR位被置1,表示地址已经发送。从机端接收到地址后,开始向主机端发送数据。当主机接收到这些数据后,会产生“EV7”事件,SR1寄存器的RXNE被置1,表示接收数据寄存器非空,我们读取该寄存器后,可对数据寄存器清空,以便接收下一次数据。此时我们可以控制I2C发送应答信号(ACK)或非应答信号(NACK),若应答,则重复以上步骤接收数据,若非应答,则停止传输。④发送非应答信号后,产生停止信号(P),结束传输。在发送和接收过程中,有的事件不只是标志了我们上面提到的状态位,还可能同时标志主机状态之类的状态位,而且读了之后还需要清除标志位,比较复杂。我们可使用STM32的HAL库函数来直接检测这些事件的复合标志,降低编程难度。28知识链接光照强度测量STM32F4的I2C简介I2C初始化结构体解析typedef

struct{uint32_tClockSpeed;/*设置SCL时钟频率,此值要低于400000*/uint32_tDutyCycle;/*指定时钟占空比,可选Tlow/Thigh=2/1及16/9模式*/uint32_tOwnAddress1;/*指定自身的I2C设备地址1,可以是7bit或者10bit*/uint32_tAddressingMode;/*指定地址的长度模式,可以是7bit模式或者10bit模式*/uint32_tDualAddressMode;/*设置双地址模式*/uint32_tOwnAddress2;/*指定自身的I2C设备地址2,只能是7bit*/uint32_tGeneralCallMode;/*指定广播呼叫模式*/uint32_tNoStretchMode;/*指定禁止时钟延长模式*/}I2C_InitTypeDef;STM32的HAL库提供了I2C初始化结构体及初始化函数来配置I2C外设。初始化结构体及函数定义在库文件stm32f4xx_hal_IIC.h及stm32f4xx_hal_IIC.c中。29任务实施光照强度测量任务实施前必须准备好表4-8所列的设备/资源。表4-8设备/资源清单表序号设备/资源数量是否准备到位(√)1STM32F407ZET6最小系统1

2BH17501

3杜邦线5

4BH1750软件包(模拟I2C时序)1

方案1使用GPIOPB6、PB7模拟I2C时序,实现BH1750光照数据的获取。30任务实施光照强度测量创建基础工程按图4-19所示的顺序配置I2C1。gy30.h文件代码如下:31任务实施光照强度测量添加代码包在MDK-ARM文件夹同级目录新建文件夹“bh1750”,将代码包中的gy30.h、gy30.c文件输入并保存在该目录下。32任务实施光照强度测量添加代码包gy30.c文件代码如下:33任务实施光照强度测量3.编写应用层代码(1)在main.c文件对应位置输入如程序清单4-3所示的代码。34实验结果光照强度测量3.编写应用层代码(2)在usart1.c文件中添加USART1的串口重定向代码,具体代码参见任务4.1.2节。编译程序,下载程序到核心板,将bh1750模组的VCC接核心板3.3V,GND接GND,SCL接PB.6,SDA接PB.7,ADDR接地,系统上电。PC端打开串口调试助手,设置好串口。打开串口,可看到如图4-20的实验结果。用手遮挡BH1750模块,光照强度变小,移开手,光照数据变大。35任务实施光照强度测量方案2使用STM32F407的硬件I2C,实现BH1750光照数据的获取复制方案1的基础工程文件到hard_iic文件夹,使用KeilMDK打开main.c文件,在对应位置输入如程序清单4-4所示代码。36实验结果光照强度测量编译程序,下载程序到核心板,BH1750模块与核心板连接同方案1,打开串口调试助手,观察到的结果如图4-21所示。用手机手电筒照亮模块,采样到的光照强度数值变得很大,基本符合题目要求。37函数分析光照强度测量程序中用到了以下两个关键函数。HAL_I2C_Master_Transmit()。函数名HAL_I2C_Master_Transmit()函数原型HAL_I2C_Master_Transmit(I2C_HandleTypeDef*hi2c,uint16_tDevAddress,uint8_t*pData,uint16_tSize,uint32_tTimeout)功能描述在阻塞模式下,主器

温馨提示

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

评论

0/150

提交评论