芯查查logo
  • 数据服务
    1. 新产品
    2. 物料选型
    3. 查替代
    4. 丝印反查
    5. 查品牌
    6. PCN/PDN
    7. 查方案
    8. 查代理
    9. 数据合作
  • SaaS/方案
      SaaS产品
    1. 供应链波动监控
    2. 半导体产业链地图
    3. BOM管理
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
  • 开通会员
基于STM32+TFT屏幕读取PM5003T颗粒物传感器
原创 精华 发布时间:2023/05/24 21:20
版块:
开源项目
简介:利用STM32F103ZE芯片,TFT液晶屏显示读取PM5003T颗粒物传感器的数据。

1:PM5003T颗粒物传感器产品介绍:

PMS5003T 是一款可以同时监测空气中颗粒物浓度及温湿度的二合一传感器。其中颗粒物浓度的监测基于激光散射原理,可连续采集并计算单位体积内空气中不 同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而换算成为质量浓度。传感器同时内嵌瑞士生产的温湿度一体检测芯片。颗粒物浓度数值及温度、湿度合并以通用数字接口形式输出。本传感器可嵌入各种与空气质量监测和改善相关的仪器设备,为其提供及时准确的环境参数。

工作原理:

本传感器采用激光散射原理。即令激光照射在空气中的悬浮颗粒物上产生散射, 同时在某一特定角度收集散射光,得到散射光强随时间变化的曲线。进而微处理 器利用基于米氏(MIE)理论的算法,得出颗粒物的等效粒径及单位体积内不同 粒径的颗粒物数量。

2:硬件接口定义:

输出结果:

1. 主要输出为单位体积内各浓度颗粒物质量以及个数,其中颗粒物个数的单位 体积为 0.1 升,质量浓度单位为:微克/立方米。

2. 输出分为主动输出和被动输出两种状态。传感器上电后默认状态为主动输出, 即传感器主动向主机发送串行数据,时间间隔为 200~800ms,空气中颗粒物 浓度越高,时间间隔越短。主动输出又分为两种模式:平稳模式和快速模式。 在空气中颗粒物浓度变化较小时,传感器输出为平稳模式,即每三次输出同样的一组数值,实际数据更新周期约为 2s。当空气中颗粒物浓度变化较大时, 传感器输出自动切换为快速模式,每次输出都是新的数值,实际数据更新周 期为 200~800ms。

3. 温湿度输出:输出吸入传感器内部的采样空气温度及湿度。

典型电路连接方式:

电路设计应注意:


1. PMS5003T 需要 5V 供电,这是因为风机需要 5V 驱动。但其他数据通讯和控 制管脚均需要 3.3V 作为高电平。因此与之连接通讯的主板 MCU 应为 3.3V 供 电。如果主板 MCU 为 5V 供电,则在通讯线(RXD、TXD)和控制线(SET、 RESET)上应当加入电平转换芯片或电路。

2. SET 和 RESET 内部有上拉电阻,如果不使用,则应悬空。

3. PIN7 和 PIN8 为程序内部调试用,应用电路中应使其悬空。

4. 应用休眠功能时应注意:休眠时风扇停止工作,而风扇重新启动需要至少 30秒的稳定时间,因此为获得准确的数据,休眠唤醒后传感器工作时间不应低于 30秒。

3:软件代码:

使用串口1,波特率:9600bps 检验位:无 停止位:1位

3.1串口1配置方式:

串口通讯配置步骤:

串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();

串口复位:USART_DeInit(); 这一步不是必须的

GPIO端口模式设置:GPIO_Init();

串口参数初始化:USART_Init();

开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)

     NVIC_Init();

     USART_ITConfig();

⑥使能串口:USART_Cmd();

⑦编写中断处理函数:USARTx_IRQHandler();

⑧串口数据收发:

void USART_SendData();//发送数据到串口,DR

uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据

⑨串口传输状态获取:

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

void uart_init(u32 bound)

{

//GPIO端口设置

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟

//USART1_TX   GPIOA.9

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9

//USART1_RX   GPIOA.10初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  

//Usart1 NVIC 配置

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //子优先级3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //IRQ通道使能

NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器

//USART 初始化设置

USART_InitStructure.USART_BaudRate = bound;//串口波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式

USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位

USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式

 USART_Init(USART1, &USART_InitStructure); //初始化串口1

 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断

 USART_Cmd(USART1, ENABLE);                    //使能串口1

}

3.2 数据接收函数:

void USART1_IRQHandler(void)                 //串口1中断服务程序

{

u8 Res;

#if SYSTEM_SUPPORT_OS   //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.

OSIntEnter();    

#endif

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)

 {

   Res =USART_ReceiveData(USART1); //读取接收到的数据

   

   if(u8UART3RecvStatus == 0)  

   {

   if(Res== 0x42)

   {

    USART_RX_STA = 0 ;

    USART_RX_BUF[USART_RX_STA] = Res ;

     u8UART3RecvStatus = 1;

   }  

  }

  else if(u8UART3RecvStatus == 1)  

  {

      if(Res== 0x4D)

   {

    u8UART3RecvStatus = 2  ;

    USART_RX_STA ++ ;

    USART_RX_BUF[USART_RX_STA] = Res ;

   }

   else

    u8UART3RecvStatus = 0  ;

  }

  else if (u8UART3RecvStatus == 2)

 {

     USART_RX_STA ++ ;

    USART_RX_BUF[USART_RX_STA] = Res ;

    if(USART_RX_STA >= 31)

    {

     USART_RX_STA = 0 ;      

     memcpy(Deal_USART_RX_BUF,&USART_RX_BUF[0],32);

     u8UART3RecvStatus = 0 ;

     DealData();

    }    

 }

}

3.3数据处理函数

void DealData(void)  

{

 uPm25 = Deal_USART_RX_BUF[12];

 uPm25 = (uPm25<<8)+Deal_USART_RX_BUF[13];

 uPm100 = Deal_USART_RX_BUF[14];

 uPm100 = (uPm100<<8)+Deal_USART_RX_BUF[15];

 

 uTemputer = Deal_USART_RX_BUF[24];

 uTemputer = (uTemputer<<8)+Deal_USART_RX_BUF[25];

 uHumidity = Deal_USART_RX_BUF[26];

 uHumidity = (uHumidity<<8)+Deal_USART_RX_BUF[27];  

}

由于模块使用PMS5003T 主动式传输协议,只需要在串口中断中接收固定的长度的数据进行函数处理即可。当前保证起始符一致在进入数据接收函数,并将USART_RX_BUF[LENG]拷贝到Deal_USART_RX_BUF[LENG]中进行数据处理。

但是这样存在弊端,当单片机未处理完接收到的数据时,此时又有数据发过来时,单片机是不进行处理的,防止数组溢出。对系统要求不高的可以使用该办法进行处理。

4:实物图片:

工程附件
PMS5003T颗粒物传感器中文说明书V2.2 .pdf
基于STM32+TFT屏幕读取PM5003T颗粒物传感器.doc
基于STM32+TFT屏幕读取PM5003T颗粒物传感器.rar
STM单片机
2023/05/24 21:20
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

热门评论

meiyao :DC电源芯片,有电感有二极管。找替代的吧
2024/08/02 09:55
游客登录通知

游客登录通知

0

游客登录通知
鸡兄 回复 meiyao :开关稳压贴片,找到相拟的了
2024/08/03 17:29

0

游客登录通知

游客登录通知
游客登录通知
勤劳的白开水 :电源管理芯片
2024/07/31 13:28
游客登录通知

游客登录通知

0

游客登录通知
小鳄鱼 :都打磨了, 那只能说可能是个电源管理芯片了, 具体是什么鬼知道
2024/07/31 10:32
游客登录通知

游客登录通知

0

游客登录通知
聪聪哥哥 :要是打磨过 就不要想了,人家不想要你知道,
2024/07/30 14:13
游客登录通知

游客登录通知

0

游客登录通知
灵光颐君 :这个有难度,也看不清楚,不能确认
2024/07/28 21:50
游客登录通知

游客登录通知

0

游客登录通知
神秘的实验室 :上面丝印型号是什么?图片看不清
2024/07/28 08:10
游客登录通知

游客登录通知

0

游客登录通知
最爱死神 :估计就是个电源芯片,dc转dc的那种
2024/07/27 17:11
游客登录通知

游客登录通知

0

游客登录通知
俊逸的音响 :有电感还有一排的两个电阻看着像dcdc芯片。
2024/07/27 13:52
游客登录通知

游客登录通知

0

游客登录通知
光亮的帅哥 :BMS充电芯片
2024/07/27 13:34
游客登录通知

游客登录通知

0

游客登录通知
负责的心锁 :像电源管理芯片
2024/07/27 12:10
游客登录通知

游客登录通知

0

游客登录通知

全部评论

meiyao :DC电源芯片,有电感有二极管。找替代的吧
2024/08/02 09:55
游客登录通知

游客登录通知

0

游客登录通知
鸡兄 回复 meiyao :开关稳压贴片,找到相拟的了
2024/08/03 17:29

0

游客登录通知

游客登录通知
游客登录通知
勤劳的白开水 :电源管理芯片
2024/07/31 13:28
游客登录通知

游客登录通知

0

游客登录通知
小鳄鱼 :都打磨了, 那只能说可能是个电源管理芯片了, 具体是什么鬼知道
2024/07/31 10:32
游客登录通知

游客登录通知

0

游客登录通知
聪聪哥哥 :要是打磨过 就不要想了,人家不想要你知道,
2024/07/30 14:13
游客登录通知

游客登录通知

0

游客登录通知
灵光颐君 :这个有难度,也看不清楚,不能确认
2024/07/28 21:50
游客登录通知

游客登录通知

0

游客登录通知
神秘的实验室 :上面丝印型号是什么?图片看不清
2024/07/28 08:10
游客登录通知

游客登录通知

0

游客登录通知
最爱死神 :估计就是个电源芯片,dc转dc的那种
2024/07/27 17:11
游客登录通知

游客登录通知

0

游客登录通知
俊逸的音响 :有电感还有一排的两个电阻看着像dcdc芯片。
2024/07/27 13:52
游客登录通知

游客登录通知

0

游客登录通知
光亮的帅哥 :BMS充电芯片
2024/07/27 13:34
游客登录通知

游客登录通知

0

游客登录通知
负责的心锁 :像电源管理芯片
2024/07/27 12:10
游客登录通知

游客登录通知

0

游客登录通知
上拉加载更多
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
发布者
聪聪哥哥
最新帖子
树莓派pico 2测评 - 初体验【工程师经验】+ 飞线【开源】zvs142857 2.1A,3A快充 充电宝迷你UC3842 开关电源优化全解析:攻克常见难题,提升性能飞腾CPU × DeepSeek大模型,双芯加持全系列稳跑
热门版块
查看更多
电子DIY
电子元器件
维修技术
抄图联盟
汽车电子工程师论坛
工业电子专区
新手入门指南
单片机/MCU论坛
PCB设计
开源项目

854

收藏

分享

微信扫码
分享给好友

评论