资讯动态

STM32五路气敏传感器阵列电路详解:从HHC1000分压到AD8606跟随器和ADC采样

发布时间:2026/10/2 6:59:03 来源:尧图企业网站定制
一、前言我这张STM32气敏传感器PCB使用五颗HHC1000封装气敏传感器组成五路传感器阵列。每一颗传感器都有两类接口加热接口 HEAT_IN / HEAT_OUT 检测接口 3.3V / RS_OUT五颗传感器的检测部分相互独立分别输出五路电压五个加热丝则并联在一起由PA6控制。整条信号链可以概括为气敏传感器电阻Rs ↓ 和100K负载电阻分压 ↓ RS_OUT电压 ↓ RC滤波 ↓ AD8606电压跟随器 ↓ STM32 ADC输入PA1~PA5 ↓ ADC码值 ↓ 换算成电压、电阻和气体浓度二、五路传感器阵列的整体连接每一颗HHC1000的检测部分可以等效成一个随气体浓度变化的电阻Rs。以第一路为例3.3V | Rs | RS_OUT ───── ADC前端 | RL | GND其中Rs气敏传感器内部等效电阻RLPCB上的负载电阻RS_OUT分压输出电压3.3V检测电极的激励电压。当气体浓度变化时Rs发生变化RS_OUT电压也跟着变化。所以STM32测到的其实不是“气体浓度”而是气敏电阻Rs和100K负载电阻RL的分压电压然后通过软件反推出Rs再根据传感器特性曲线换算浓度。三、五颗传感器具体怎么接我的PCB中五颗传感器的检测端、负载电阻、AD8606和ADC通道对应关系如下通道传感器检测输出负载电阻运放STM32 ADCCH1PAD16R22 100KU9 AD8606PA1 / ADC1_IN1CH2PAD20R20 100KU3 AD8606PA2 / ADC1_IN2CH3PAD4R15 100KU2 AD8606PA3 / ADC1_IN3CH4PAD8R26 100KU11 AD8606PA4 / ADC1_IN4CH5PAD12R24 100KU10 AD8606PA5 / ADC1_IN5每个通道旁边还有一组并联预留焊位R16、R21、R23、R25、R27这些是和100K负载电阻并联的备用位置实际只焊一个电阻即可。当前工程中主要焊的是R15、R20、R22、R24、R26也就是每一路 RL 100KΩ四、检测电压的计算原理每一路都是电阻分压电路3.3V ── Rs ── RS_OUT ── RL ── GND根据分压公式V_RS_OUT 3.3V × RL / (Rs RL)因为RL 100KΩ所以V_RS_OUT 3.3V × 100K / (Rs 100K)由此可以反推出传感器电阻Rs RL × (3.3V - V_RS_OUT) / V_RS_OUT例如Rs变大RS_OUT电压降低Rs变小RS_OUT电压升高如果Rs接近0ΩRS_OUT接近3.3V如果Rs接近无穷大RS_OUT接近0V。实际气敏传感器的Rs通常在几十kΩ到几MΩ之间所以RS_OUT一般处在几百mV到几V之间。五、为什么每路都要加AD8606跟随器传感器分压点RS_OUT的内阻大约等于Rs // RL这个内阻可能比较高不能直接接到STM32的ADC。原因是STM32的ADC采样时会有一个采样保持电容瞬间从输入节点抽取电荷。如果信号源内阻太高ADC测量会偏小、跳变或者不稳定。所以每一路都加了一颗AD8606接成电压跟随器AD8606 3脚 IN 2脚 -IN 1脚 OUT 连接方式 1脚和2脚短接也就是RS_OUT → AD8606的IN AD8606的OUT → AD8606的-IN AD8606的OUT → STM32 ADC电压跟随器的作用是输入阻抗很高几乎不从RS_OUT取电流输出阻抗很低可以轻松驱动STM32 ADC输出电压约等于输入电压隔离传感器节点和ADC采样电路提高五路电压测量的稳定性和一致性。AD8606使用V 3.3V V- GND属于单电源、轨到轨输入输出运放适合STM32的0~3.3V ADC范围。六、每一路的完整信号链以CH1为例3.3V | Rs1 | PAD16 → RS_OUT1 | R22 100K | GND RS_OUT1 | C23/C24对地滤波 | U9 AD8606 IN | U9 AD8606 OUT | PA1 / ADC1_IN1其他四路完全相同CH2PAD20 → R20 100K → U3 AD8606 → PA2 CH3PAD4 → R15 100K → U2 AD8606 → PA3 CH4PAD8 → R26 100K → U11 AD8606 → PA4 CH5PAD12 → R24 100K → U10 AD8606 → PA5因此STM32采集到的是五路RS_OUT电压经过跟随器后的电压Vadc1 ≈ V_RS_OUT1 Vadc2 ≈ V_RS_OUT2 Vadc3 ≈ V_RS_OUT3 Vadc4 ≈ V_RS_OUT4 Vadc5 ≈ V_RS_OUT5七、RS_OUT处的RC滤波每一路RS_OUT到GND都预留了电容位置C19~C28它们和Rs // RL一起构成一个低通滤波器用来滤除高频噪声和加热PWM干扰。等效关系RS_OUT对地电阻 ≈ Rs // 100K截止频率大约为fc 1 / (2πRC)如果R 100KΩ C 10nF则fc ≈ 1 / (2π × 100K × 10nF) ≈ 159Hz如果C 100nF则fc ≈ 15.9Hz所以电容不能随便选电容越大噪声越小但响应越慢电容越小响应越快但抗干扰能力弱气敏传感器本身响应较慢因此通常可以选10nF~100nF最终值要结合传感器响应速度、加热PWM干扰和ADC稳定性来选择。注意滤波电容应该接在RS_OUT和GND之间不能接在运放输入和输出之间。接在输入输出之间会形成正反馈容易导致运放自激振荡。八、五路ADC与代码的对应关系STM32F103C8T6的ADC是12位ADC码值 V入 / VDDA × 4095如果VDDA约为3.3VV入 ADC码值 / 4095 × 3.3V五路ADC通道对应PA1 ADC1_IN1 PA2 ADC1_IN2 PA3 ADC1_IN3 PA4 ADC1_IN4 PA5 ADC1_IN5所以代码中ADC通道数组应写成static const uint8_t ADC_CH[5] { ADC_Channel_1, ADC_Channel_2, ADC_Channel_3, ADC_Channel_4, ADC_Channel_5 };不能写成PA0~PA4因为PA0没有接传感器接的是PA1~PA5。九、从电压反推气敏电阻和浓度1. 反推气敏电阻Rs RL × (Vc - V_RS_OUT) / V_RS_OUT其中RL 100KΩ Vc 3.3V V_RS_OUT 跟随器输出电压例如测到V_RS_OUT 1.0V则Rs 100K × (3.3 - 1.0) / 1.0 230KΩ2. 换算浓度MOX类气敏传感器通常使用Rs/R0曲线浓度 ppm ≈ a × (Rs / R0)^b其中R0洁净空气中的基准电阻a、b传感器厂家给出的曲线拟合系数不同气体、不同传感器需要单独标定。如果使用简单的线性标定也可以写成ppm (V - V0) × K但这只适合小范围近似不能代表整个传感器量程。十、五个加热丝的关系五颗传感器的加热丝不是独立的而是五颗传感器HEAT_IN全部并在一起 五颗传感器HEAT_OUT全部并在一起也就是HEAT_IN ──┬── 加热丝1 ──┬── HEAT_OUT ├── 加热丝2 ──┤ ├── 加热丝3 ──┤ ├── 加热丝4 ──┤ └── 加热丝5 ──┘所以五个加热丝是并联关系。这带来两个结果加热总电流是单颗加热丝的5倍左右如果其中一颗加热丝短路会影响整个加热阵列。加热阵列由PA6控制Q1再控制公共的HEAT_INPA6 → Q1栅极 Q1 → HEAT_IN HEAT_OUT → 电流采样/地检测部分和加热部分是相互独立的加热丝负责把传感器加热到工作温度3.3V/RS_OUT负责测量气敏电阻两者不能混在一起。十一、电路优点这套五路传感器阵列电路有几个明显优点五路检测完全独立每一路都有独立的100K负载电阻不会相互串扰每一路都有AD8606跟随器适合高内阻传感器检测电极使用3.3V供电和STM32 ADC参考电压一致具有一定比例抵消作用五路输出分别接到PA1~PA5方便用ADC1依次采集传感器分压结构简单容易计算Rs每路都预留了滤波电容位置方便后期调整噪声和响应速度。十二、需要注意和改进的地方1. 负载电阻要根据传感器量程选每路RL当前是100K。如果传感器在目标气体中的Rs范围大约为10K ~ 1M那么100K是一个比较居中、比较合理的选择。但如果实际Rs经常低于10KRS_OUT会接近3.3V容易饱和如果Rs经常高于1MRS_OUT会接近0V分辨率会下降。这时可以调整RL。2. 未使用的运放通道不要悬空AD8606是双运放每颗只用了其中一个通道另一个通道的5、6、7脚目前没有使用。建议把未使用通道接成跟随器IN → GND或3.3V/2 OUT → -IN不要把未使用运放输入悬空否则可能自激、振荡或引入噪声。3. 滤波电容要实测选择C19~C28要根据实际噪声和响应速度选择10nF ~ 100nF如果加热PWM干扰明显先用示波器观察RS_OUT再决定电容值。4. ADC采样要做平均和滤波建议每路连续采样多次去掉最大值和最小值再做平均值使用VREFINT校准VDDA不要在加热PWM开关瞬间采样。5. 浓度换算必须标定STM32读到的是电压不是ppm。正确的流程是ADC码值 → 计算RS_OUT电压 → 计算Rs → 结合R0和传感器曲线 → 计算ppm不同传感器、不同气体、不同温湿度都需要重新标定。十三、总结这张PCB的五路气敏传感器阵列可以概括为五颗传感器 ↓ 每颗传感器检测电阻Rs ↓ Rs与100K负载电阻分压 ↓ 得到五路RS_OUT电压 ↓ AD8606跟随器缓冲 ↓ STM32 PA1~PA5 ADC采集 ↓ 计算Rs ↓ 换算气体浓度五路检测信号分别对应CH1 → PA1 CH2 → PA2 CH3 → PA3 CH4 → PA4 CH5 → PA5核心公式是V_RS_OUT 3.3V × 100K / (Rs 100K) Rs 100K × (3.3V - V_RS_OUT) / V_RS_OUT而五个加热丝则是并联在一起由PA6通过MOSFET统一控制。所以整个传感器阵列的本质就是五路独立的电阻分压测量 五路AD8606缓冲 五路STM32 ADC采集加热部分则采用五路加热丝并联的公共加热结构。15:36

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑