当前位置:   article > 正文

【单片机】PMS5003,PM2.5传感器数据读取处理_pms5003是如何计算值的,怎样证明它测出pm2.5浓度的准确性

pms5003是如何计算值的,怎样证明它测出pm2.5浓度的准确性

传感器介绍

PMS5003是一款基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集
并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而
换算成为质量浓度,并以通用数字接口形式输出。本传感器可入各种与空气中
悬浮颗粒物浓度相关的仪器仪表或环境改善设备,为其提供及时准确的浓度数
据。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据处理

读取的数据:
在这里插入图片描述

解析pm2.5的代码

逻辑是:
1、初始化串口和定时器10ms中断
2、循环读取一帧数据到rev_pm25_bufferdata
3、在主函数解析数据rev_pm25_bufferdata
4、最终的pm2.5数值就是pm25_value

使用pm25_value 的数据即可。


#include "sys.h"
#include "delay.h"
#include "usart.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "led.h"
#include "timer.h"


char rev_pm25_bufferdata[50];
char rev_pm25_data_cnt = 0;
char rev_pm25_flag = 0;
char rev_pm25_timercnt = 0;
char rev_pm25_sucess = 0;
uint32_t pm25_value = 0;
uint32_t pm25_verify = 0;
unsigned char pm25_verify_cnt = 0;

int main(void) {

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    delay_init();
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

    delay_ms(500);
    uart_init(9600);

    TIM4_Int_Init(99, 7199);                                     /* 10Khz的计数频率,计数到50为10ms */
    TIM_Cmd(TIM4, ENABLE);                                        /* 使能TIMx  开始计时 */


    while (1) {

        delay_ms(5);

        if (rev_pm25_sucess == 1) {
            rev_pm25_sucess = 0;

            if ((rev_pm25_bufferdata[0] == 0x42) && (rev_pm25_bufferdata[1] == 0x4d)) {
                pm25_verify = 0;
                for (pm25_verify_cnt = 0; pm25_verify_cnt < 30; pm25_verify_cnt++) {
                    pm25_verify += rev_pm25_bufferdata[pm25_verify_cnt];
                }
                if (pm25_verify == (rev_pm25_bufferdata[30] * 256 + rev_pm25_bufferdata[31])) {
                    pm25_value = rev_pm25_bufferdata[6] * 256 + rev_pm25_bufferdata[7];
                }
            }
        }
    }
}


// 10ms
void TIM4_IRQHandler(void)                                    /* TIM4中断 */
{
    if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)  /* 检查TIM4更新中断发生与否 */
    {
        TIM_ClearITPendingBit(TIM4, TIM_IT_Update);   /* 清除TIM4更新中断标志 */
        //10ms一帧
        if (rev_pm25_flag == 1) {
            rev_pm25_timercnt++;
        }
        if (rev_pm25_timercnt >= 4) {
            rev_pm25_timercnt = 0;
            rev_pm25_flag = 0;
            //数据处理标志
            rev_pm25_sucess = 1;
        }

    }
}


//A9模块
void USART1_IRQHandler(void)                                                                  /* 串口1中断服务程序 */
{
    u8 receiveData;
    if (USART_GetITStatus(USART1, USART_IT_RXNE) !=
        RESET)                              /* 接收中断(接收到的数据必须是0x0d 0x0a结尾) */
    {
        receiveData = USART_ReceiveData(USART1);                                      /* 读取接收到的数据 */

        if (rev_pm25_flag == 0) {
            rev_pm25_data_cnt = 0;
            rev_pm25_bufferdata[rev_pm25_data_cnt++] = receiveData;
            rev_pm25_flag = 1;
        } else if (rev_pm25_flag == 1) {
            rev_pm25_bufferdata[rev_pm25_data_cnt++] = receiveData;
            if (rev_pm25_data_cnt >= 50) {
                rev_pm25_data_cnt = 0;
            }
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99

帮助、问询

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/711884
推荐阅读
相关标签
  

闽ICP备14008679号