第四节:温度保护——NTC热敏电阻原理、ADC采样、温度阈值设定与迟滞控制
温度保护,说白了就是给按摩仪装一个「体温计」。
但这不是普通的体温计。它要实时监测电机、电池、甚至按摩头表面的温度。一旦温度超标,系统必须立刻响应——要么降功率,要么直接停机。
我做过好几个按摩仪项目,温度保护这块踩过的坑,比电机选型还多。今天咱们就把NTC热敏电阻、ADC采样、阈值设定和迟滞控制,一次性讲透。
4.1 NTC热敏电阻:温度感知的「皮肤」
NTC,全称Negative Temperature Coefficient,负温度系数。温度越高,电阻值越小。
你想想看,这正好跟普通电阻反过来。普通电阻温度高了阻值会变大,但NTC是反着来的。这个特性,让我们可以用一个简单的分压电路,把温度变化转换成电压变化。
核心公式:
R = R₀ × exp(B × (1/T - 1/T₀))
其中:
- R₀:25℃时的标称阻值(常见10kΩ、100kΩ)
- B:材料常数(通常3950K)
- T:当前绝对温度(K)
- T₀:298.15K(25℃)
我个人习惯用10kΩ、B=3950的NTC。为什么?因为市面上最便宜、最通用,采购方便。我在一个量产项目里用过一次100kΩ的,结果备货周期长了三周,差点耽误交期。
4.2 ADC采样:把电阻变成数字
NTC本身是电阻,MCU不认识电阻。它只认识电压。所以我们需要一个分压电路。
// 典型分压电路
// VCC —— R_fixed —— NTC —— GND
// |
// ADC_IN
固定电阻R_fixed怎么选?我建议选跟NTC在25℃时阻值接近的。比如NTC是10kΩ,R_fixed也选10kΩ。这样在25℃附近,分压点电压刚好是VCC的一半,ADC分辨率利用率最高。
嗯,这里要注意:ADC的参考电压一定要稳定。我见过有人直接用MCU的VDD做参考,结果电池电压波动,采样值跟着飘,温度保护误动作。后来我改用内部基准或者外部基准,问题就解决了。
避坑指南:
我曾经在一个项目中,ADC采样频率设得太高(1kHz),结果每次采样都触发中断,CPU负载飙升。后来改成100Hz,每10ms采一次,完全够用。温度变化没那么快,别自己折腾自己。
4.3 温度阈值设定:不是拍脑袋定的
阈值设定,说白了就是「多热算热」。
按摩仪的温度保护,通常分两级:
| 保护级别 | 触发温度 | 动作 |
|---|---|---|
| 一级预警 | 55℃ | 降低功率,风扇加速 |
| 二级保护 | 65℃ | 立即停机,等待冷却 |
为什么是55℃和65℃?
我做过摸底测试:按摩头表面温度超过60℃,用户就会觉得烫。电机内部温度超过70℃,线圈绝缘层开始老化。所以一级预警设在55℃,留5℃余量;二级保护设在65℃,确保电机安全。
你想想看,如果阈值设得太低,比如45℃就报警,那冬天用按摩仪,刚开机就报警,用户肯定骂娘。设得太高,比如75℃才停机,电机可能已经冒烟了。
重要提醒:
阈值设定一定要考虑NTC的安装位置。如果NTC贴在电机外壳上,跟贴在按摩头表面,温度读数能差5-10℃。我建议在样机阶段,用热电偶实测几个关键点,校准后再定阈值。
4.4 迟滞控制:别让系统「抖」起来
迟滞控制,是温度保护里最容易忽略、但最要命的一环。
什么叫迟滞?就是温度上升和下降时,触发和恢复的阈值不一样。
举个例子:
- 温度升到65℃,触发二级保护,停机
- 温度降到64.9℃,恢复运行
- 结果刚恢复,温度又升到65℃,再次停机
这就成了「震荡」。按摩仪一会儿转一会儿停,用户体验极差,而且频繁启停对电机寿命也有影响。
迟滞控制怎么加?很简单:
// 迟滞控制示例
#define TEMP_HIGH_THRESHOLD 65 // 二级保护阈值
#define TEMP_HYSTERESIS 5 // 迟滞值
uint8_t temp_protection_state = 0; // 0:正常 1:保护中
void temperature_protection(float current_temp) {
if (temp_protection_state == 0) {
// 正常状态,检查是否超温
if (current_temp >= TEMP_HIGH_THRESHOLD) {
temp_protection_state = 1;
motor_stop();
}
} else {
// 保护状态,检查是否恢复
if (current_temp <= (TEMP_HIGH_THRESHOLD - TEMP_HYSTERESIS)) {
temp_protection_state = 0;
motor_start();
}
}
}
看到没?恢复阈值是65-5=60℃。温度必须降到60℃以下,才能重新启动。这5℃的迟滞,就避免了震荡。
我个人习惯迟滞值取3-5℃。太小了不管用,太大了恢复太慢。有一次我偷懒设了1℃,结果测试时发现系统在64.8℃到65.2℃之间来回跳,差点被测试工程师打死。
4.5 实战经验:滤波与校准
ADC采样值不可能完全稳定。电源噪声、电磁干扰、甚至手指触摸,都会让读数跳动。
我常用的滤波方法:
- 中值滤波:连续采5次,去掉最大最小,取中间3个的平均
- 一阶低通滤波:new_value = 0.7 × old_value + 0.3 × current_sample
另外,每个NTC都有个体差异。同一批货,阻值能差±1%。所以量产时,我建议做一次单点校准:在25℃环境下,读取ADC值,修正偏移量。
小技巧:
我习惯在固件里留一个校准参数,通过串口或蓝牙写入。这样产线校准不用改代码,直接发指令就行。省事,而且不容易出错。
4.6 总结一下
温度保护,说白了就四步:
- 用NTC感知温度,电阻变化
- 用分压电路+ADC,把电阻变成数字
- 设定合理的阈值,留足余量
- 加迟滞控制,防止震荡
嗯,这些看起来都不难。但真正做好,需要反复测试、校准、验证。我记得第一个按摩仪项目,温度保护这块改了四版固件才稳定。所以别急,慢慢来。
下一节,咱们聊聊电流保护——过流检测和短路保护。那个更刺激,因为一不小心就会冒烟。