1. 项目背景与核心需求
在嵌入式传感器应用中,热敏电阻、光敏电阻和红外反射传感器是最基础的三种模拟量检测元件。它们的共同特点是输出信号均为连续变化的电压值,需要通过ADC(模数转换器)转换为数字量才能被MCU处理。STM32的HAL库提供了完整的ADC驱动框架,但多通道轮询采集在实际工程中仍存在几个关键痛点:
- 通道切换时机:轮询模式下如何确保各通道采样间隔一致
- 参考电压稳定性:外部环境变化对ADC精度的影响
- 传感器非线性补偿:热敏电阻的Steinhart-Hart方程处理
- 多任务资源竞争:当系统同时运行其他功能时的采样稳定性
以典型的智能农业大棚场景为例,需要同时监测环境温度(热敏电阻)、光照强度(光敏电阻)和土壤湿度(红外反射式),这三个参数的变化周期不同但对控制决策同等重要。采用轮询方式可以避免DMA带来的内存管理复杂度,适合资源受限的STM32F1系列开发。
2. 硬件设计与传感器接口
2.1 传感器选型与电路设计
热敏电阻(NTC 10K):
- 采用B值3950的负温度系数热敏电阻
- 分压电路设计:10KΩ上拉电阻,供电电压3.3V
- 温度计算公式:1/T = 1/T0 + (1/B)*ln(R/R0)
c复制// 示例计算代码
float calc_temperature(float adc_value) {
float voltage = adc_value * 3.3f / 4095.0f;
float resistance = 10000.0f * voltage / (3.3f - voltage);
float steinhart = log(resistance / 10000.0f) / 3950.0f + 1.0f / 298.15f;
return (1.0f / steinhart) - 273.15f; // 转换为摄氏度
}
光敏电阻(GL5528):
- 亮电阻(10Lux):8-20KΩ
- 暗电阻:1MΩ以上
- 建议使用对数放大器预处理信号
红外反射传感器(TCRT5000):
- 检测距离0.2-1.5cm
- 输出特性:反射物越近电压越低
- 需注意环境光干扰问题
2.2 STM32引脚分配策略
以STM32F103C8T6为例推荐配置:
| 传感器类型 | ADC通道 | GPIO引脚 | 采样时间 |
|---|---|---|---|
| 热敏电阻 | ADC1_IN1 | PA1 | 239.5周期 |
| 光敏电阻 | ADC1_IN2 | PA2 | 2 |
