第1章:核心器件选型——体温计的大脑、感官与心脏
做医疗体温计,说白了就是三件事:选对大脑(MCU)、选对感官(温度传感器)、选对心脏(电源管理)。这三样东西没选好,后面软件写得再漂亮也是白搭。我这些年见过太多项目,硬件选型拍脑袋,结果量产时各种翻车。
今天咱们就一个一个来拆解。嗯,先从主控MCU说起。
1.1 主控MCU选型:为什么我偏爱STM32L0系列
医疗体温计对MCU的要求其实很明确:低功耗、高精度ADC、小封装。你想想看,体温计要放嘴里或者腋下,电池就那么一丁点,还得保证测量精度在±0.1℃以内。
我个人习惯首选STM32L0系列。为什么?三个理由:
- 功耗真的低:跑在32kHz时,电流才几个微安。我记得有个项目,用CR2032电池,一天测8次,愣是撑了两年。
- 内置12位ADC:体温计测温,NTC热敏电阻的分压信号直接进ADC,省掉外部运放。我在项目中试过,精度完全够用。
- 封装小巧:TSSOP20或者QFN32,板子能做得跟指甲盖一样大。
核心选型参数速查表
| 参数 | STM32L031 | STM32L051 | STM32L071 |
|---|---|---|---|
| Flash | 32KB | 64KB | 192KB |
| RAM | 8KB | 8KB | 20KB |
| ADC位数 | 12位 | 12位 | 12位 |
| Stop模式电流 | 0.4μA | 0.4μA | 0.4μA |
| 封装 | TSSOP20 | QFN32 | LQFP64 |
这里有个坑,我得提醒你。STM32L0的ADC有个特点——它内部有个参考电压VREFINT,精度1.2V左右。但温度变化时它会漂。我曾经在项目中没做校准,结果冬天和夏天的测量值差了0.3℃。后来加了软件补偿才搞定。
我的小技巧:每次上电后,先读VREFINT的值,再用它反推实际VDD。这样ADC的参考电压就准了。代码就几行,但效果立竿见影。
1.2 温度传感器选型:NTC vs 数字传感器
这是体温计设计里最纠结的地方。两种方案各有拥趸,我来说说真实感受。
方案一:NTC热敏电阻
NTC这东西,说白了就是一个电阻,温度变了阻值跟着变。优点很明显:便宜、响应快、精度能做到很高。我见过最夸张的,用25℃时100kΩ的NTC,配合高精度分压电阻,在35℃~42℃范围内能做到±0.05℃。
但缺点也让人头疼:
- 非线性严重:阻值和温度不是直线关系,得用Steinhart-Hart方程去算。公式长这样:
// Steinhart-Hart 方程
// T = 1 / (A + B*ln(R) + C*(ln(R))^3)
// 其中A、B、C是NTC的标定系数
float calc_temperature(float R) {
float lnR = log(R);
float T = 1.0f / (A + B * lnR + C * lnR * lnR * lnR);
return T - 273.15f; // 转成摄氏度
}
- 需要外部电路:至少一个分压电阻,有时还得加滤波电容。板子面积就这么被吃掉了。
- 自热效应:电流流过NTC会发热,影响测量。我一般把激励电流控制在100μA以下。
方案二:数字温度传感器
数字传感器就省心多了。像TI的TMP117、Maxim的MAX30205,I2C接口直接读温度,精度标称±0.1℃。我刚开始做体温计时特别喜欢用,因为软件简单啊,几行代码就搞定。
// TMP117 读取温度示例
uint8_t tmp117_read_temp(float *temp) {
uint8_t buf[2];
if (HAL_I2C_Master_Receive(&hi2c1, TMP117_ADDR, buf, 2, 100) != HAL_OK) {
return 1; // 读取失败
}
int16_t raw = (buf[0] << 8) | buf[1];
*temp = raw * 0.0078125f; // 分辨率 1/128 ℃
return 0;
}
但数字传感器也有它的毛病:
- 贵:一颗TMP117要十几块,NTC加电阻才几毛钱。
- 响应慢:内部有数字滤波,温度突变时得等几百毫秒才能稳定。
- 功耗偏高:连续转换时电流几百微安,对电池不友好。
我的建议:
- 做高端医疗级体温计(比如医院用的),用数字传感器,省心、合规容易过。
- 做消费级产品(比如家用电子体温计),用NTC,成本低、功耗低。
- 如果非要我选,我个人偏向NTC。因为调好了精度完全不输数字传感器,而且功耗能压到极致。
1.3 电源管理芯片选型
体温计的电源管理,核心就一个字:省。电池就那么点能量,得精打细算。
我一般把电源架构分成三部分:
- 电池输入:CR2032或者LR41,电压范围2.0V~3.6V。
- LDO稳压:给MCU和传感器供电,要求静态电流极低。
- 负载开关:控制传感器和外围电路的供电,不用时就彻底断电。
这里我推荐几款用过的芯片:
| 芯片型号 | 类型 | 静态电流 | 输出电压 | 特点 |
|---|---|---|---|---|
| TPS7A02 | LDO | 25nA | 1.2V~3.3V | 超低静态,适合电池供电 |
| XC6206 | LDO | 1μA | 3.0V/3.3V | 便宜,但静态稍高 |
| MAX1614 | 负载开关 | 0.1μA | — | 控制传感器供电 |
注意! 我曾经在项目中犯过一个低级错误:LDO的输入输出电容没按datasheet选。结果上电瞬间电压过冲,直接把传感器烧了。后来老老实实按手册来,再没出过问题。所以,电容的容值和耐压一定要留余量。
还有个细节容易被忽略——电池的等效内阻。CR2032在低温时内阻会飙升到几十欧姆。如果体温计在冬天使用,瞬间电流一大,电压就掉下去了。我一般会在电池和LDO之间加个10μF的钽电容,用来缓冲。
省电小窍门:MCU休眠时,把LDO也关掉。用MCU的GPIO直接控制LDO的使能脚。这样整个系统在休眠时的电流能降到1μA以下。我有个项目就是这么干的,电池寿命直接翻倍。
好了,核心器件选型就聊到这儿。下一章咱们讲硬件电路设计,到时候会把这些芯片怎么搭起来、PCB布局要注意什么,一一说清楚。
公众号:蓝海资料掘金营,微信deep3321