灰尘GP2Y10F传感器时序详解

GP2Y10是日本夏普公司开发的一款光学灰尘浓度检测传感器,在检测非常细的颗粒,如香烟烟雾,是特别有效的,并且是常用的空气净化器系统。

电源电压:5-7V
工作温度:-10-65摄氏度
消耗电流:20mA大
小粒子检出值:0.8微米

灵敏度:0.5V/(0.1mg/m3)

检测原理: 灰尘传感器中心有个洞可以让空气自由流过,定向发射LED光,通过检测经过空气中灰尘折射过后的光线来判断灰尘的含量。通过输出电压的脉冲模式可以区分烟雾和房屋灰尘。管脚分布如下:


其中的LED端可以接入stm32一管脚(这里设置为PB1),OUT端可以接入stm32的一管脚(这里设置为PA0),OUT端输出模拟信号,LED端用来给传感器发送脉冲信号。

LED端的输入条件如下【在其数据手册中可以看到点击打开链接脉冲周期为10±1,脉冲宽度为0.32±0.02


脉冲驱动波形如下:


OUT端输出模拟信号波形如下:采样的时间为0.28,其波形将输入STM32的ADC进行处理


在实际应用中,我们主要是对其采集;

对于PB1,PA0的初始化程序为:

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);  
  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;           
GPIO_Init(GPIOB, &GPIO_InitStructure);
GP2Y_High;

对于GP2Y的采集程序:这里采用的是ADC的通道0采集模拟信号

float GetGP2Y(void)
{
    u32 AD_PM;  ]
    double pm; 
    GP2Y_Low;
    delay_us(280);
    AD_PM = Get_Adc(ADC_Channel_0);//PA0
    delay_us(40);
    GP2Y_High;
    delay_us(9680);
    pm = 0.17*AD_PM-0.1; //转换公式
    printf("%f\n",pm);
    return pm;

}

为了得到的数据更加精确,这里求其平均值,程序如下:

u16 Get_GP2Y_Average(u8 times)
{
    u32 pm_val=0;
    u8 t;
    for(t=0;t<times;t++)
{
    pm_val+=GetGP2Y();
    delay_ms(5);
}

    return pm_val/times;

参考程序下载【点击打开链接

猜你喜欢

转载自blog.csdn.net/qq_21990661/article/details/81050413