从光敏电阻到麦克风:用单片机AD/DA和运放搞定传感器信号采集(附电路分析)

张开发
2026/4/20 2:11:43 15 分钟阅读

分享文章

从光敏电阻到麦克风:用单片机AD/DA和运放搞定传感器信号采集(附电路分析)
从光敏电阻到麦克风用单片机AD/DA和运放搞定传感器信号采集附电路分析当我们需要将现实世界中的光强、温度或声音信号转化为数字信号进行处理时传感器信号采集系统就成为了连接物理世界与数字世界的桥梁。本文将带你从零开始构建一个完整的传感器信号采集链路涵盖从传感器选型、信号调理电路设计到单片机AD转换的每个环节。无论你是想制作一个光照强度监测装置还是设计简单的音频采集系统这些核心技能都能让你事半功倍。1. 传感器信号采集系统架构一个完整的传感器信号采集系统通常包含三个关键环节传感器模块、信号调理电路和AD转换模块。光敏电阻、热敏电阻这类电阻型传感器的输出信号往往非常微弱且容易受到干扰这就需要我们设计合理的信号调理电路。典型的信号链路如下传感器 → 信号调理 → AD转换 → 单片机信号调理电路的主要作用包括阻抗匹配如电压跟随器信号放大比例放大器滤波消除高频噪声电平转换将信号调整到AD输入范围内以光敏电阻为例在10-100kΩ范围内变化时直接分压输出的电压可能只有0.1-1V的波动而大多数AD转换器的满量程输入为0-5V。这时就需要通过运放电路将信号放大到适合采样的范围。2. 关键硬件选型与电路设计2.1 传感器特性对比传感器类型典型阻值范围灵敏度响应时间适用场景光敏电阻10Ω-1MΩ中10-100ms光照检测热敏电阻1kΩ-100kΩ高1-10s温度监测驻极体麦克风输出mV级信号高1ms声音采集2.2 运算放大器电路设计运放是信号调理的核心元件以下是三种最常用的电路配置1. 电压跟随器阻抗匹配Vin ────┬───── │ │ └───┬─── Vout │ GND提示电压跟随器输入阻抗极高输出阻抗极低适合作为缓冲级隔离前后电路。2. 同相放大器信号放大R1 Vin ────^^^^───┬─── Vout R2 │ GND ────^^^^───┘放大倍数A 1 R2/R13. 反相放大器信号调理R1 Vin ────^^^^───┬─── ─── Vout R2 │ GND ────^^^^───┘放大倍数A -R2/R1实际设计麦克风前置放大器时通常会选择同相放大结构并加入高通滤波# 伪代码计算放大电路参数 def calculate_components(gain50, cutoff_freq20Hz): R1 1e3 # 1kΩ基础电阻 R2 (gain - 1) * R1 C 1/(2*3.14*R1*cutoff_freq) return R2, C3. AD转换实战配置3.1 ADC0809经典电路分析ADC0809是一款8位逐次逼近型AD转换器其典型应用电路包含以下几个关键部分参考电压电路通常采用TL431提供稳定的2.5V基准时钟电路外接RC振荡或使用单片机提供500kHz时钟输入通道选择通过ADDA、ADDB、ADDC三位地址选择8路输入控制信号START启动转换脉冲EOC转换结束标志OE输出使能连接STM32的典型接线方式ADC0809 STM32F103 VREF() → 3.3V IN0 → 传感器信号 ADDA/B/C → GPIO输出 START → GPIO输出 EOC → GPIO输入 D0-D7 → GPIO输入3.2 软件驱动实现以下是基于STM32 HAL库的ADC0809驱动代码片段#define ADC_PORT GPIOA #define START_PIN GPIO_PIN_0 #define EOC_PIN GPIO_PIN_1 uint8_t ADC0809_Read(uint8_t channel) { // 设置通道选择 HAL_GPIO_WritePin(ADC_PORT, ADDA_PIN, (channel0x1)?GPIO_PIN_SET:GPIO_PIN_RESET); HAL_GPIO_WritePin(ADC_PORT, ADDB_PIN, (channel0x2)?GPIO_PIN_SET:GPIO_PIN_RESET); HAL_GPIO_WritePin(ADC_PORT, ADDC_PIN, (channel0x4)?GPIO_PIN_SET:GPIO_PIN_RESET); // 启动转换 HAL_GPIO_WritePin(ADC_PORT, START_PIN, GPIO_PIN_SET); HAL_Delay(1); HAL_GPIO_WritePin(ADC_PORT, START_PIN, GPIO_PIN_RESET); // 等待转换完成 while(HAL_GPIO_ReadPin(ADC_PORT, EOC_PIN) GPIO_PIN_RESET); // 读取数据 return GPIO_ReadInputData(ADC_DATA_PORT) 0xFF; }4. 完整项目案例环境光强监测系统4.1 硬件组成传感部分GL5528光敏电阻10-200kΩ信号调理第一级电压跟随器LM358第二级同相放大器增益20R11k,R219kAD转换ADC08098位精度主控STM32F103C8T64.2 关键电路参数计算分压电路设计光敏电阻与10kΩ固定电阻分压光照强度与输出电压关系强光(100Lux)R≈10kΩ → Vout2.5V 弱光(10Lux)R≈100kΩ → Vout0.45V放大电路设计目标将0.5-2.5V信号放大到0-5V范围选择增益20的同相放大器实际输出电压Vout (1 R2/R1) * Vin 20 * VinAD采样值转换8位AD参考电压5V分辨率5V/256 ≈ 19.5mV照度计算公式def lux_calculate(adc_value): voltage adc_value * 19.5 # mV resistance 10000 * (5000 - voltage) / voltage # Ω return 10 ** ((log10(resistance) - 4.5) / -0.8) # Lux4.3 系统优化技巧噪声抑制在运放电源引脚加0.1μF去耦电容信号线采用屏蔽线或双绞线添加RC低通滤波fc100Hz校准方法两点校准法黑暗环境下记录AD值零点标准光源下记录AD值满量程线性插值公式float calibrate(uint8_t raw, uint8_t dark, uint8_t bright) { return (raw - dark) * 100.0 / (bright - dark); // 百分比 }软件滤波算法移动平均滤波窗口大小10中值滤波采样5次取中间值一阶滞后滤波#define ALPHA 0.2 float filtered_value last_value * (1-ALPHA) new_sample * ALPHA;在实际项目中我发现信号调理电路的稳定性很大程度上取决于电源质量。使用普通USB电源时光照读数可能会有±5%的波动而改用锂电池供电后波动降低到了±1%以内。另外将运放电路与数字电路分区布局也能显著降低数字噪声对模拟信号的干扰。

更多文章