4、硬件电路设计:分压电路与ADC采样电路设计要点
好,咱们进入第四章。这一章讲的是硬件电路设计,具体来说就是分压电路和ADC采样电路。说实话,这部分是体温计硬件设计的核心之一。你算法写得再好,前端电路拉胯,数据一样没法看。我见过太多项目,软件工程师抱怨算法不准,结果一查,是硬件信噪比就没做对。
4.1 为什么需要分压电路?
体温计用的热敏电阻,阻值会随温度变化。但我们的单片机只能读电压,不能直接读电阻。所以得想办法把电阻变化转成电压变化。分压电路就是干这个的。
最简单的做法:一个固定电阻R_ref,串联一个热敏电阻R_therm。中间抽头接到ADC引脚。这样温度一变,R_therm变,分压点的电压也跟着变。ADC一读,就知道温度了。
嗯,这里有个关键点:R_ref的取值。选大了,分压曲线太平,分辨率不够。选小了,电流太大,自热效应会让你抓狂。我个人习惯,对于NTC热敏电阻(比如常见的10kΩ@25°C),R_ref取10kΩ到47kΩ之间比较合适。
经验公式:R_ref ≈ R_therm(37°C) 时,在人体温度区间(35°C-42°C)灵敏度最高。
为什么?你想想看,分压电路在R_ref = R_therm时,输出电压正好是VCC的一半。此时电阻变化引起的电压变化率最大。说白了,就是测量最灵敏的位置。
4.2 ADC采样电路设计要点
ADC采样,看着简单,坑不少。我一条条说。
4.2.1 参考电压的选择
ADC的参考电压直接决定了你的测量精度。如果你用VCC(比如3.3V)做参考,而VCC本身有纹波,那你的测量结果就会跟着抖。我曾经在一个项目中,电池供电,VCC从3.3V掉到3.0V,ADC读数直接漂了10个LSB。查了半天才发现是参考电压的问题。
所以我的建议是:
- 如果精度要求高,用外部基准电压源(比如TL431、REF3030)。
- 如果成本敏感,至少用LDO输出做参考,别直接用电池。
- MCU内部参考电压也可以,但要先校准。
4.2.2 采样时间与阻抗匹配
ADC采样不是瞬间完成的。它需要给内部的采样电容充电。如果信号源阻抗太高,充电时间不够,测量值就会偏小。
我记得有一次,一个同事说他的ADC读数总是偏低0.5°C。我一看电路,分压电阻用了100kΩ,而MCU的ADC采样时间设成了最短的1μs。这明显不够。采样电容一般是几pF到十几pF,RC时间常数算一下就知道,1μs根本充不满。
经验法则:信号源输出阻抗不要超过10kΩ。如果必须用大电阻,就加一个电压跟随器(运放缓冲)。或者把ADC采样时间设长一点,比如10μs以上。
4.2.3 抗混叠滤波
ADC采样前,最好加一个简单的RC低通滤波器。为什么?因为高频噪声会被采样过程混叠到低频段,变成你根本看不出来的干扰。体温信号本身变化很慢,截止频率设到10Hz-100Hz就够了。
典型电路:
R_therm -- R_filter(1kΩ) -- ADC引脚
|
C_filter(0.1μF)
|
GND
这个滤波器的截止频率是1/(2πRC) ≈ 1.6kHz。对于体温测量来说足够了。而且这个电容还能提供一点电荷,帮助ADC采样时快速充电。
4.3 实际电路设计中的避坑指南
这部分是我踩过的坑,你直接拿去用。
我曾经犯过的错:
- PCB走线太长:热敏电阻到ADC引脚的走线超过10cm,又没有屏蔽,结果50Hz工频干扰直接耦合进来。后来加了屏蔽地线才解决。
- 地线回路:分压电路的GND和ADC的GND不是同一个点,导致测量结果有偏移。记住,单点接地,星型连接。
- 自热效应:分压电流太大,热敏电阻自己发热,测出来的温度比实际高。我一般控制分压电流在100μA以下。
4.4 一个完整的分压+ADC电路示例
下面给一个实际可用的电路参数。假设我们用的是10kΩ NTC热敏电阻(B=3950),MCU是STM32,ADC是12位,参考电压3.3V。
| 元件 | 参数 | 说明 |
|---|---|---|
| R_ref | 10kΩ ±0.1% | 精密电阻,温度系数25ppm/°C |
| R_filter | 1kΩ | 限流+滤波 |
| C_filter | 0.1μF | X7R或C0G材质 |
| ADC采样时间 | 10μs | 确保采样电容充满 |
| ADC分辨率 | 12位 | 理论分辨率约0.03°C |
分压点电压计算公式:
V_adc = V_ref * R_therm / (R_therm + R_ref)
ADC读数:
ADC_value = V_adc / V_ref * 4096
嗯,这里要注意,R_therm是温度的函数。你得先查NTC的阻值-温度表,或者用Steinhart-Hart方程算。这部分后面章节会详细讲。
4.5 小结
分压电路和ADC采样,说白了就是要把温度这个物理量,准确无误地变成单片机能读的数字。每一步都有讲究:
- R_ref选对了,灵敏度才够。
- 参考电压稳了,精度才有保障。
- 采样时间够了,数据才真实。
- 滤波做好了,噪声才进不来。
这些细节,一个不注意,后面算法再怎么优化都救不回来。我当年就是吃了这个亏,后来每次画板子前,都先把这几条过一遍。你也养成这个习惯,能省很多事。