2、温度传感器基础:热敏电阻原理、热电偶原理、Marlin支持的传感器类型、传感器配置宏定义
温度传感器,说白了就是3D打印机的「体温计」。没有它,热端就是一颗定时炸弹,热床也只是一块冰冷的铝板。我刚开始玩Marlin时,最头疼的就是传感器配置——明明接好了线,温度读数却乱跳,甚至直接显示-14℃。后来才发现,是宏定义配错了型号。
这一章,咱们就把传感器这件事彻底讲透。
2.1 热敏电阻:最常用的温度探头
热敏电阻,英文叫Thermistor。Marlin里90%的机器都在用这东西。它便宜、响应快、精度也够用。
原理其实很简单:温度变了,电阻值跟着变。但要注意,热敏电阻是负温度系数(NTC)的——温度越高,电阻越小。嗯,这跟直觉刚好相反。
关键公式:Steinhart-Hart方程
Marlin内部用这个方程把电阻值换算成温度:
1/T = A + B·ln(R) + C·[ln(R)]³
其中T是开尔文温度,R是当前电阻,A、B、C是热敏电阻的特性系数。Marlin的查表法就是基于这个方程预计算的。
我在项目中遇到过一个问题:某批热敏电阻的B值偏差了2%,结果打印出来的零件尺寸全偏了。后来我学乖了,每次换新批次的热敏电阻,都会用万用表测一下室温下的阻值,跟规格书对一对。
2.2 热电偶:高温场景的硬汉
热敏电阻有个致命弱点——超过300℃就不太靠谱了。这时候,热电偶就派上用场了。
热电偶的原理基于塞贝克效应:两种不同金属的接点受热时,会产生微小的电压信号。温度越高,电压越大。你想想看,这玩意儿能测到1000℃以上,工业级热端和特殊材料打印全靠它。
注意:热电偶不是即插即用的
热电偶输出的电压信号非常微弱,只有几十微伏每摄氏度。必须搭配MAX31855或AD8495这类专用放大器,把信号放大后再送给主板的ADC引脚。我曾经直接跳过放大器,把热电偶接到主板上,结果读数一直在-273℃和+999℃之间疯狂跳变——那画面太美我不敢看。
2.3 Marlin支持的传感器类型
Marlin的传感器支持列表,说实话,是我见过最全的。从几毛钱的普通热敏电阻,到几百块的高精度PT100铂电阻,再到工业级热电偶,全都有。
我整理了一张表,把常用的列出来:
| 传感器类型 | 宏定义值 | 测温范围 | 典型应用 |
|---|---|---|---|
| EPCOS 100K B57560G104F | 1 | -40~300℃ | 热端、热床 |
| NTC 100K 3950 | 5 | -40~300℃ | 通用热端 |
| PT100 (MAX31865) | 20 | -200~850℃ | 高精度热床 |
| K型热电偶 (MAX31855) | 50 | -200~1350℃ | 高温热端 |
| AD595 K型热电偶 | 51 | -200~1350℃ | 工业级热端 |
为什么有这么多型号?说白了,不同厂商的热敏电阻,B值和标称阻值都不一样。Marlin为每种传感器都内置了查表数据,你只需要告诉它「我用的是哪种」,它就能准确换算温度。
2.4 传感器配置宏定义
在Marlin的Configuration.h里,传感器配置是最容易出错的地方。我见过有人把热床的传感器类型写成了热电偶,结果热床加热到50℃就报错停机。
核心宏定义就这几个:
// 热端传感器类型
#define TEMP_SENSOR_0 5 // 使用NTC 100K 3950
// 热床传感器类型
#define TEMP_SENSOR_BED 1 // 使用EPCOS 100K
// 第二个热端(如果有双头)
#define TEMP_SENSOR_1 0 // 0表示未安装
每个数字对应一种传感器型号。你可以在Marlin源码的temperature.cpp里找到完整的对照表。我个人习惯是,先把传感器型号记下来,然后去对照表里找对应的数字,最后再填到宏定义里。这样不容易出错。
避坑指南:
我曾经把TEMP_SENSOR_0和TEMP_SENSOR_BED写反了,结果热端温度一直上不去,热床却烧到了200℃。还好我人在旁边,及时断电。从那以后,我每次改配置都会用M105指令检查一下两个通道的温度读数是否合理。
2.5 传感器类型选择流程图
下面这张图,是我自己总结的传感器选型逻辑。每次做新机器,我都会走一遍这个流程:
这张图的核心逻辑就一句话:温度范围决定传感器类型,精度要求决定具体型号。普通玩家用NTC 100K就够了,玩高温材料的才需要上热电偶。
2.6 写在最后
传感器配置这件事,说难不难,说简单也不简单。我见过有人用错了传感器类型,打印出来的零件表面全是疙瘩——温度不准,材料流动性就不对。也见过有人把热敏电阻的线接反了,读数一直往下掉。
嗯,记住一点:M105是你最好的朋友。每次改完传感器配置,先发一条M105看看温度读数是否正常。如果室温下显示25℃左右,那就对了。如果显示-14℃或者999℃,赶紧检查接线和宏定义。