1. 传感器数据采集基础与STM32 HAL库适配
在嵌入式系统开发中,环境监测是一个经典应用场景。以STM32平台为例,通过HAL库驱动空气质量和烟雾传感器,需要理解从硬件信号到可用数据的完整转换链条。MQ系列传感器(如MQ-2烟雾传感器)通常采用电化学原理,其输出特性呈现非线性,这就需要对原始ADC读数进行合理的公式换算。
1.1 传感器工作原理与信号特征
MQ-2烟雾传感器的核心是一个SnO2半导体气敏材料。当接触到可燃气体时,其电导率会随气体浓度升高而非线性增加。传感器模块通常提供两种输出:
- 模拟电压输出(0-5V或0-3.3V)
- 数字阈值报警输出(高低电平)
对于精确测量,我们需要采集模拟输出。典型接线方式为:
- VCC接3.3V/5V
- GND接地
- AO接STM32的ADC输入引脚
- DO可接普通GPIO(用于阈值报警)
注意:部分模块需要外接负载电阻(RL),其阻值会影响传感器灵敏度,通常选用5KΩ左右。务必查阅具体模块手册确认。
1.2 STM32 HAL库ADC配置要点
使用STM32CubeMX配置ADC时,关键参数设置:
c复制// ADC初始化结构体典型配置
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV
