现在人们对大气环境及室内环境都比较关注。pm2.5在生活中也是常见的词汇。在有些产品中就要求检测pm2.5的数值。检测pm2.5的手段多种多样,在要求不高时我们通常可以采用激光模块。在这一篇中,我们将讨论hlpm025k3 pm2.5传感器驱动的设计与实现。
1、功能概述 hlpm025k3传感器采用激光散射原理。即令激光照射在空气中的悬浮颗粒物上产生散射,同时在某一特定角度收集散射光,得到散射光强随时间变化的曲线。通过稳定的气 体对流系统,使外界空气均匀的通过自主研发设计的风路,同时在风路中设有多个精密的光学传感器,可以精确的获得粒子的尺寸、速度和质量等信息,加以统计学原理,继而计算出总的粒子质量,从而实时的得到空气中所被关注的粒子的浓度,达到检测pm2.5以及pm10的目的。其基本原理如下图所示:
hlpm025k3传感器采用串行通讯,采用6脚通讯接口,其引脚定义如下图所示:
hlpm025k3传感器采用ttl串行通讯,采用9600的波特率,8为数据位,1为停止位,无校验的方式。hlpm025k3传感器通讯采取主动发送模式,0.8到1.2秒发送一次数据。其数据包含7个字节,具体格式如下:
其中,校验位=pm2.5(h)+pm2.5(l)+pm10(h)+pm10(l)
接收到的数据按公式计算后得到 pm2.5 和 pm10 的值。
pm2.5 = (pm2.5(h)×256 + pm2.5(l))×0.1;
pm10 = (pm2.5(h)×256 + pm2.5(l))×0.1;
2、驱动设计与实现 我们已经了解了hlpm025k3型pm2.5传感器的基本情况。在这一节中我们将设计并实现hlpm025k3型pm2.5传感器的驱动。
2.1、对象定义 在使用一个对象之前我们需要获得一个对象。同样的我们想要hlpm025k3 pm2.5传感器就需要先定义hlpm025k3 pm2.5传感器的对象。
2.1.1、对象的抽象 我们要得到hlpm025k3 pm2.5传感器对象,需要先分析其基本特性。一般来说,一个对象至少包含两方面的特性:属性与操作。接下来我们就来从这两个方面思考一下hlpm025k3 pm2.5传感器的对象。
先来考虑属性,作为属性肯定是用于标识或记录对象特征的东西。我们来考虑hlpm025k3 pm2.5传感器对象属性。我们将测量数据作为对象的属性,因为他们表示了对象当前的状态。
接着我们还需要考虑hlpm025k3 pm2.5传感器对象的操作问题。对象本身除了接受数据并没有什么需要操作的。我们使用队列来存储接收到的数据,所以入队出队过程可看作是其操作。
根据上述我们对hlpm025k3 pm2.5传感器的分析,我们可以定义hlpm025k3 pm2.5传感器的对象类型如下:
/*定义hlpm025k3对象类型*/typedef struct hlpmobject { float pm25; //pm2.5测量值 float pm100; //pm10测量值 struct dwinrxbuffer{ uint8_t queue[hlpmrxbufferlength]; //键值存储队列 uint8_t pread; //读队列指针 uint8_t pwrite; //写队列指针 uint16_t (*dequeue)(struct hlpmobject *hlpm,uint8_t *rxbuf); //出队操作 void (*enqueue)(struct hlpmobject *hlpm,uint8_t rdata); //入队操作 }rxbuffer; //定义接收缓存队列}hlpmobjecttype;2.1.2、对象初始化 我们知道,一个对象仅作声明是不能使用的,我们需要先对其进行初始化,所以这里我们来考虑hlpm025k3 pm2.5传感器对象的初始化函数。一般来说,初始化函数需要处理几个方面的问题。一是检查输入参数是否合理;二是为对象的属性赋初值;三是对对象作必要的初始化配置。据此我们设计hlpm025k3 pm2.5传感器对象的初始化函数如下:
/*hlpm对象初始化函数*/void hlpminitialization(hlpmobjecttype *hlpm){ if(hlpm==null) { return; } hlpm->pm25=0.0; hlpm->pm100=0.0; hlpm->rxbuffer.pread=0; hlpm->rxbuffer.pwrite=0; hlpm->rxbuffer.enqueue=bufferdataenqueue; hlpm->rxbuffer.dequeue=bufferdatadequeue;}2.2、对象操作 我们已经完成了hlpm025k3 pm2.5传感器对象类型的定义和对象初始化函数的设计。但我们的主要目标是获取对象的信息,接下来我们还要实现面向hlpm025k3 pm2.5传感器的各类操作。
由于hlpm025k3 pm2.5传感器对象是自主发送,所以我们需要做的就是接收消息并解析。
/*解析pm2.5和pm10的数据*/bool parsingpmdata(hlpmobjecttype *hlpm){ uint16_t length=0; uint8_t receiveddata[7]={0}; bool isvalid=false; length=hlpm->rxbuffer.dequeue(hlpm,receiveddata); if(length>0) { isvalid=checkdataisvalid(receiveddata); if(isvalid) { hlpm->pm25=synthesispmvalue(receiveddata+1); hlpm->pm100=synthesispmvalue(receiveddata+3); } } return isvalid;}3、驱动的使用 我们已经设计并实现了hlpm025k3 pm2.5传感器对象的驱动程序。接下来我们设计一个简单的应用来验证这一驱动程序是否可行。
3.1、声明并初始化对象 使用基于对象的操作我们需要先得到这个对象,所以我们先要使用前面定义的hlpm025k3 pm2.5传感器对象类型声明一个hlpm025k3 pm2.5传感器对象变量,具体操作格式如下:
hlpmobjecttype hlpm;
声明了这个对象变量并不能立即使用,我们还需要使用驱动中定义的初始化函数对这个变量进行初始化。这个初始化函数所需要的输入参数如下:
hlpmobjecttype *hlpm,hlpm025k3 pm2.5传感器对象
这个对象变量我们已经定义了,所以只需输入这个对象就好了。于是我们可以调用初始化函数如下:
hlpminitialization(&hlpm);
对于串口通讯,我们可以使用多种方式,我们在此使用中断来接收数据,具体实现如下:
//数据接收中断处理函数void hlpm_usart_receivedatahandle(void){ uint8_t res; // 接收寄存器为空,等待字节被对应的串口完全接收 if(__hal_uart_get_flag(&hlpmhuart,uart_flag_rxne)!=reset) { // 获取接收到的字节数 hal_uart_receive(&hlpmhuart,&res,1,1000); hlpm.rxbuffer.enqueue(&hlpm,res); __hal_uart_clear_flag(&hlpmhuart,uart_flag_rxne); }}3.2、基于对象进行操作 我们定义了对象变量并使用初始化函数给其作了初始化。接着我们就来考虑操作这一对象获取我们想要的数据。我们在驱动中已经将获取数据并转换为转换值的比例值,接下来我们使用这一驱动开发我们的应用实例。
/*数据获取*/void getdatafromhlpm025k3(void){ float pm25value; float pm10value; parsingpmdata(&hlpm); pm25value=hlpm.pm25; pm10value=hlpm.pm100;}4、应用总结 我们已经设计并实现了hlpm025k3 pm2.5传感器对象的驱动程序,并且设计了简单的验证程序。hlpm025k3 pm2.5传感器的操作本身比较简单,只需要通过串口获取数据就可以了。
驱动中采用了fifo队列存储接收到的hlpm025k3 pm2.5传感器数据,主要是考虑到被动接收的情况下,能够保证正确的解析数据。如果不使用也是没有问题的,本身不是hlpm025k3 pm2.5传感器对象所必需的。
基于混合信号FPGA的功率管理解决方案
NVIDIA全新架构将向新一代超级计算机发起冲击
数字D类音频功率放大器设计方案
NVIDIA RTX GPU助力打造城市新区绿化
中国移动打造湖北首家5G智慧医院
HLPM025K3 PM2.5传感器的驱动设计与实现
传感器的新应用有哪些?传感器产业发展的痛点
中兴通讯助力浙江移动完成5G消息平台建设
华为mate10/mate10pro还未发布就来真机开箱:这颜值你觉得多少钱合适?
三星银河A52在印度的发布指日可待
如何改变异步电动机的转速
三星公司认为仅有2%员工能胜任谷歌工作
各大手机厂商正成为5G普及变革的推动者
新兴市场拓展,崧盛股份迎机遇
高智能测土施肥仪的详细介绍
工业POE交换机:点亮灯光控制与建筑自动化的新时代
NB-IoT产业生态的探索将成为5G生态建设的有益借鉴
iQOO Neo 855竞速版首售,具有双Wi-Fi加速技术首发惊喜价2398元
AMEYA:瑞萨再添新成员!收购奥地利一半导体企业
半导体运营商的运营管控和质量要点