概述
攀藤 PMS 系列传感器
攀藤 PMS 系列传感器是基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而换算成为质量浓度,并以通用数字接口形式输出。PMS 传感器可嵌入各种与空气中悬浮颗粒物浓度相关的仪器仪表或环境改善设备,为其提供及时准确的浓度数据,比如小米的空气净化器。
PMS 系列包括很多款传感器,具体选型可以查看 http://www.plantower.com 页面。
为了方便在 MCU 产品上应用 PMS 系列传感器,笔者基于 RT-Thread 物联网操作系统制作了一个软件包 pmsxx。该软件包兼容多款 PMS 传感器,支持 MCU 串口配置为中断或 DMA 接收模式,支持线程初始化,支持使用 device 接口进行读写、控制操作。
GitHub 地址:https://github.com/luhuadong/rtt-pmsxx
硬件连接
攀藤 PMS 系列传感器提供 TTL 电平串口与主机通信,开发者可以通过 USB 转串口模块连接 PMS 传感器的 RX 和 TX 引脚,使用 PC 端的串口调试工具进行调试。默认波特率为 9600 bps,无校验位,1 位停止位。
不同型号的传感器的接口略微不同,以 PMS9003M 为例,是一个带锁槽的 8 pin 接口,间距 1.27 mm。
管脚定义如下:
管脚序号 | 功能标号 | 描述 |
---|---|---|
PIN1 | VCC | 电源正(+5V) |
PIN2 | GND | 电源负 |
PIN3 | SET | 设置管脚(TTL 电平 3.3V),高电平或悬空为正常工作状态,低电平为休眠状态 |
PIN4 | RXD | 串口接收管脚(TTL 电平 3.3V) |
PIN5 | TXD | 串口发送管脚(TTL 电平 3.3V) |
PIN6 | RESET | 模块复位信号(TTL 电平 3.3V),低复位 |
PIN7 | NC | |
PIN8 | NC |
PMS 传感器与 MCU 的典型电路连接示意图如下:
本测试只需连接 VCC、GND、RXD、TXD 即可。
传输协议
pmsxx 软件包目前支持基础型和增强型两类 PMS 传感器。
- 基础型(Basic):传输协议总长度 32 字节,检测的数据包括标准(CF=1)颗粒物浓度和大气环境的颗粒物浓度(PM1.0、PM2.5、PM10),以及 0.1 升空气中直径分别在 0.3μm、0.5μm、1.0μm、2.5μm、5.0μm、10μm 以上的颗粒物个数。常见的传感器模块包括 PMS3003、PMS5003、PMS7003、PMS9003M、PMSA003 等等。
- 增强型(Enhanced):传输协议总长度 40 字节,检测的数据在基础型之上增加了甲醛浓度、温度、湿度 3 组数据。常见的传感器模块如 PMS5003ST。
基础型 PMSxx 传感器传输协议如下:
软件包使用
添加软件包
如果使用 Env 工具,在添加软件包前需要先执行 pkgs --upgrade
更新软件包索引。以 STM32L4R5 Nucleo BSP 为例,在项目工程目录执行 menuconfig
打开配置页面,pmsxx 软件包的具体路径如下:
RT-Thread online packages --->
peripheral libraries and drivers --->
[*] sensors drivers --->
[*] PMSxx: Plantower pms serial PM2.5 sensor driver.
pmsxx 软件包位于 sensor drivers 内,已对接 sensor 设备驱动框架,因此 pmsxx 可为上层应用提供标准的 device 操作接口。pmsxx 软件包选项配置如下:
这里使用 STM32L4R5 Nucleo 板上 Arduino 接口的 D0(RX)和 D1(TX),对应为 uart3 串口。因此还需要配置 uart3 并开启 DMA 接收功能。
OK,保存配置并退出。执行 pkgs --update
更新/拉取软件包。
pmsxx 配置项
--- PMSxx: Plantower pms serial PM2.5 sensor driver.
Select pms sensor type (Basic) --->
(X) Basic
( ) Enhanced
(2000) The waiting time after send command (ms)
[ ] Enable initialize by thread
[ ] Enable serial device DMA RX
[ ] Debug command and response
[ ] Show commands
[ ] Show response data
[ ] Dump raw response data
[ ] Show ruler for raw response data
[ ] Enable pmsxx sample
(uart3) Select uart device name
选项说明:
- PMS 传感器类型
- 基础型(包括 PMS1003/PMS3003/PMS5003/PMS7003/PMS9003/PMSA003 等)
- 增强型(比如 PMS5003ST)
- 串口发送命令等待时间(并非所有模式设置命令都有响应,建议设置此参数,避免设置失败)
- 使能初始化线程(该软件包会将 pms 传感器设置为被动模式,使能该选项可以消除等待时间的影响)
- 使能串口 DMA 功能(开启该选项时请确保所使用的串口支持 DMA,并且已开启相关配置)
- 调试命令和响应
- 当设置传感器模式时,在 msh 终端显示该命令内容
- 当接收到响应数据时,在 msh 终端显示该响应内容
- 当接收到响应数据时,以原始数据的形式显示
- 显示标尺,以方便识别原始数据
- 使能 pmsxx 示例代码
- 设置示例的串口设备名称(默认为 uart3)
测试
当硬件和软件准备就绪,就可以编译工程,并将固件下载到 MCU 上。打开 msh 终端,由于开启了 pmsxx 的测试示例和命令/响应调试输出,因此会自动注册传感器设备,并打印出一些信息,比如 MCU 发送给传感器的命令。
+-----------------------------------------------------+
| HEAD1 | HEAD2 | CMD | DATAH | DATAL | LRCH | LRCL |
-----------------------------------------------------
| 42 | 4d | e2 | 00 | 00 | 01 | 71 |
+-----------------------------------------------------+
以及传感器发送给 MCU 的数据。
_________________________________________________________________________________
01 02 03 04 05 06 07 08 09 10 11 12 ...... 20 21 22 23 24 25 26 27 28 29 30 31 32
---------------------------------------------------------------------------------
42 4d 00 1c 00 03 00 04 00 07 00 04 ...... f9 00 1b 00 06 00 03 00 03 9a 00 02 a2
PMS 传感器上电默认进入主动输出模式,为了方便使用,pmsxx 软件包将其初始化为被动模式。初始化成功,执行 list_device
命令可以查看该设备。
msh >list_device
device type ref count
-------- -------------------- ----------
dust_pms Sensor Device 0
由于 PMS 传感器包含多种检测数据,pms 注册为 dust 设备,使用 rt_device_read
接口读取的是通常比较关心的 PM2.5(大气环境)值。如果想要获取所有数据,可以使用 rt_device_control
接口。
示例代码提供了两个测试命令:
- pms_read_sample :主动式获取传感器数据,返回的是 PM2.5 值(大气环境);
- pms_dump_sample :主动式获取传感器数据,返回所有响应数据。
以下是使用 PMS9003M 传感器,执行 pms_dump_sample 命令的运行效果:
以下是使用 PMS5003ST 传感器,执行 pms_dump_sample 命令的运行效果:(需要切换为 Enhanced 类型)
以上测试均是通过 sensor 设备驱动框架进行。另外,pmsxx 软件包示例还提供了自定义接口测试命令 cat_pmsxx_passive 和 cat_pmsxx_active,分别用于被动式和主动式测试。小伙伴们可以试一下,那我们下次再见咯~