千家信息网

STM32平台下GP2Y1010AU0F灰尘传感器使用及源码是什么

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,今天就跟大家聊聊有关STM32平台下GP2Y1010AU0F灰尘传感器使用及源码是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。GP2Y1
千家信息网最后更新 2024年11月20日STM32平台下GP2Y1010AU0F灰尘传感器使用及源码是什么

今天就跟大家聊聊有关STM32平台下GP2Y1010AU0F灰尘传感器使用及源码是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

GP2Y1010AU0F传感器接线方式如下:

使用PA0接收模拟信号,PB1发送脉冲信号。

代码如下:

GP2Y.c

#include "GP2Y.h"#include "system.h"        u16 AD_PM;void GP2Yinit(void){ //定义变量    ADC_InitTypeDef A_InitStructure;    GPIO_InitTypeDef G_InitStructure;  //PA0    GPIO_InitTypeDef Gpio_InitStructure;//PB1    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE );   //使能ADC2通道时钟         RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M     //PA0 作为模拟通道输入引脚                            G_InitStructure.GPIO_Pin = GPIO_Pin_0;    G_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚    GPIO_Init(GPIOA, &G_InitStructure);       ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值       A_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式    A_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式    A_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式    A_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动    A_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐    A_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目    ADC_Init(ADC1, &A_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器            ADC_Cmd(ADC1, ENABLE);         //使能指定的ADC1    ADC_ResetCalibration(ADC1); //使能复位校准     while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束    ADC_StartCalibration(ADC1);  //开启AD校准    while(ADC_GetCalibrationStatus(ADC1));  //等待校准结束    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;}void GetGP2Y(void){        float 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);    }

GP2Y.h

  #ifndef __GP2Y_H#define __GP2Y_H#include "stm32f10x_lib.h"#define GP2Y_High GPIO_SetBits(GPIOB,GPIO_Pin_1);#define GP2Y_Low  GPIO_ResetBits(GPIOB,GPIO_Pin_1);void GP2Yinit(void);void GetGP2Y(void);#endif

PB1输出波形

获取到灰尘数值。

根据上图推算出公式:dustDensity = 0.17 * calcVoltage - 0.1。

看完上述内容,你们对STM32平台下GP2Y1010AU0F灰尘传感器使用及源码是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0