adc_sensor.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include "adc_sensor.h"
  2. #if (GP2Y1014AU_EN==1)
  3. #define PMLED_CTR_PIN P1_1 //p11 pm传感器的控制引脚
  4. #define PMLED_CTR_PORT P1DIR
  5. #define PMLED_CTR_NUM GPIO_1
  6. //引脚配置为输出;
  7. #define PMLED_CTR_OUT() { PMLED_CTR_PORT |= PMLED_CTR_NUM; asm("NOP"); }
  8. #define PMADC_PIN_NUM GPIO_6 //传感器adc输入端口 adc端口只有p0口才有 这里就是0-7参数
  9. #define PMADC_CHANNEL HAL_ADC_CHANNEL_6
  10. #define PMADC_INPUT_IN() { APCFG|=PMADC_PIN_NUM;asm("NOP");}
  11. void GP2Y1014AU_Init(void) //pm2.5 传感器
  12. {
  13. PMLED_CTR_OUT();
  14. PMADC_INPUT_IN();
  15. HalAdcInit();
  16. HalAdcSetReference(HAL_ADC_REF_AVDD);
  17. }
  18. uint16 get_gp2y1014au_value(void)
  19. {
  20. long Pm_Val=0;
  21. int Value=0;
  22. PMLED_CTR_PIN=0;
  23. system_delay_us(280);
  24. Pm_Val = HalAdcRead(PMADC_CHANNEL,HAL_ADC_RESOLUTION_14);//adc转换
  25. Pm_Val = (Pm_Val*3300)/8192;//转换成电压
  26. system_delay_us(40);//延时一会关闭传感器led
  27. PMLED_CTR_PIN=1;
  28. system_delay_us(9680);
  29. Pm_Val/=10;//转换成ug/m3
  30. Value=Pm_Val;
  31. Value-=30;//去掉0点漂移
  32. if(Value<0)
  33. {
  34. Value=0;
  35. }
  36. return Value;
  37. }
  38. #endif