前一阵把一套温度采集模块从选型到调试完整走了一轮。核心链路其实不复杂:传感器(K型热电偶或PT100)的毫伏级/电阻信号,先由ADS122U04IPWR这颗24位ADC采集转成数字量,再经UART串口交给PIC18LF45K22单片机,在MCU里完成线性化、冷端补偿、数字滤波和工程量换算。这套组合我在工业现场和HVAC(暖通空调)两类场景都实测过,写这篇文章,就是为了把这套测温方案里说明书上不会写的事全部抖出来。
项目本身不算多高深,但涉及信号链、通信协议、算法、校准和抗干扰几个环节,任何一个地方没处理好,最终温度数据就会跳、会偏、会“飘”。文章适合正在做温度变送器、暖通DDC控制器、工业数据采集模块,或者想用独立高精度ADC给单片机扩展测温通道的朋友。看完至少能少走三个月弯路,尤其是后面“常见问题”那一节,都是我用示波器和烙铁一点点试出来的。
1. 方案选型思路:为什么坚持用独立24位ADC加8位MCU
1.1 工业现场和HVAC测温,难在哪里
先说痛点。工业现场和HVAC的测温,和实验室里搭个电路完全是两回事。
第一关是信号太微弱。K型热电偶的热电势只有约40uV/°C,测个300°C的管道表面,满量程也就12mV左右。这种级别的信号,单片机自带的10位或12位ADC根本没法用——不是分辨率不够,是噪声和失调就足以把有效位吃掉大半。PT100这类热电阻稍微好一点,但也要恒流源激励,还要处理引线电阻带来的误差。
第二关是环境太恶劣。HVAC系统里有变频器、压缩机、风机盘管,工业现场更不用说,电机启停、电磁阀动作,全是电磁干扰源。温度传感器信号线稍微走长一点,采集到的就是一堆毛刺。我见过不少项目,选型时ADC精度很高,实际跑起来读数后面两位一直在跳,最后只能靠软件把精度“糊”回去。
第三关是长期稳定性。HVAC设备是7x24小时跑的,工业过程控制更不能三天两头校准。ADC的内部基准温漂、放大器的失调漂移、冷端补偿传感器的位置偏差,这些平时看不出来的问题,跑一个月后全都会暴露。
所以这套方案的目标很明确:在恶劣环境里稳定采到可重复、可信赖的温度值,而不是单纯追求一个实验室条件下的高精度指标。
1.2 为什么选ADS122U04IPWR,而不是SPI接口的ADS1220
ADS122U04和经典的ADS1220在核心架构上同源,都是24位ΔΣ型ADC,内置PGA可编程增益放大器、低温漂基准电压源、IDAC恒流源,但通信接口从SPI换成了UART。这个改动,对8位MCU方案来说非常关键。
第一个好处是引脚占用极少。PIC18LF45K22这边只需要两根线——TX和RX,就能完成和ADC的通信。SPI接口听起来也不复杂,但实际用起来要管SCK、MISO、MOSI、CS四根线,还得仔细伺候时序。如果MCU的SPI模块被别的外设占了,还得用GPIO模拟,波特率和时序一致性很难保证。UART就轻松多了,几乎所有单片机都自带硬件UART模块,开个中断就能收发。
第二个好处是抗干扰能力强。工业现场的长距离通信,UART天生比SPI更有优势。SPI是同步通信,时钟线和数据线并行走线,稍微有点干扰就导致时序错乱;UART是异步通信,只要波特率误差在容忍范围内,线缆上的共模干扰很难让它误码。我在现场用1.5米长的屏蔽双绞线连ADC和MCU,UART跑9600波特率,实测一整天误码率为零。
第三个好处是隔离方便。如果要做4-20mA两线制变送器,或者系统需要和高压侧隔离,UART用光耦或数字隔离器非常方便,隔离器选型也成熟。SPI做隔离就要考虑时钟同步问题,麻烦不少。
另外ADS122U04内置了仪表放大器级别的PGA,外部不用再配精密运放;内部基准源温漂指标够用,省掉一颗基准芯片;IDAC恒流源刚好给PT100/PT1000做激励。算下来BOM里省掉的模拟器件不是一两个。
注意:这里说的ADS122U04IPWR,IPWR只是TI的封装和包装后缀,芯片功能就是ADS122U04。选型时别被这串字母干扰,直接用ADS122U04查手册就行。
1.3 PIC18LF45K22在系统中扮演什么角色
按理说,ADS122U04已经是数字输出了,随便配个MCU都能把温度算出来。为什么选PIC18LF45K22而不是STM32或者更高端的平台?原因很务实。
成本。8位MCU在HVAC控制器和工业仪表领域,成本优势仍然明显。一颗PIC18LF45K22在批量采购时价格只有32位ARM的几个零头,对温控器、DDC模块这种单价敏感的产品来说,BOM每省一毛钱都是利润。
供货稳定和生态成熟。Microchip的PIC系列在工控领域用了二十年,生命周期长,不会说换就换。很多老工程师手里都有成熟的PIC18开发环境,代码移植成本低。
外设够用。PIC18LF45K22这颗芯片带两个EUSART模块,一个给ADS122U04,另一个可以留给RS-485通信,刚好满足工业现场最常见的Modbus组网需求。它还有外设引脚选择(PPS)功能,UART的TX/RX可以映射到不同引脚,画PCB时走线能省不少事。
还有一个容易忽略的点:功耗。LF后缀代表低电压版本,工作电压1.8V到3.6V,静态功耗极低。如果整套设备要由电池供电,或者在断电时切换到备用电源维持关键测温通道,这颗MCU比ARM平台有优势得多。
当然,如果项目里还有复杂的PID控制、人机界面、文件系统这些需求,PIC18就有点吃力了,该上32位就上32位。但单纯做测温采集+Modbus转发这个级别的任务,8位MCU性能绰绰有余。
2. 硬件设计:信号链和PCB布局的关键细节
2.1 热电偶与RTD两种接入方案
实际项目里,HVAC系统用得最多的是PT100/PT1000热电阻,工业现场则热电偶和热电阻各占一半。两种传感器的接入方式完全不同,需要分开设计。
热电偶是电压输出型传感器,两个不同金属接点产生热电势。接线最简单,直接把热电偶的正负极接到ADC的差分输入端就行。但热电偶有几个坑:
一是信号极弱,必须用PGA放大。二是热电偶的冷端(也就是接线端子处)温度会变化,必须做冷端补偿。三是热电偶引线电阻很小,对ADC输入阻抗要求不高,但线缆如果经过强干扰区域,必须加滤波。
我的做法是差分输入前各串一个100Ω电阻,再对地并一个1nF的陶瓷电容,构成一阶低通滤波,截止频率大约800kHz,能滤掉大部分射频干扰。如果现场变频器噪声特别凶,可以把电容加到10nF,代价是采样稳定时间变长,软件里要多等一会儿再读数据。
RTD是电阻输出型传感器,需要恒流源激励,然后测电压。这里必须用ADS122U04的IDAC功能,而不是外部恒流源。原因很简单:IDAC和ADC内部是同步设计的,激励电流的温漂和ADC基准的温漂有很好的相关性,能抵消一部分误差。外部恒流源做得再好,也很难达到这种协同效果。
RTD接线方式直接影响精度。两线制最省线,但导线电阻直接叠加到传感器电阻上,误差没法消除;三线制用两根线走激励电流,第三根线做电压检测,能抵消大部分引线电阻误差;四线制最理想,激励电流和电压检测完全分开,导线电阻几乎不产生误差。
在HVAC项目里,传感器到控制器的距离通常不超过几十米,我建议用四线制。铜导线20米长,双绞线来回电阻大概有几个欧姆,对PT100来说这个误差在100°C时能造成几度的偏差,完全不可接受。四线制虽然多拉一根线,但对精度的提升是决定性的。
2.2 PGA增益与激励电流的配平计算
这个环节特别容易翻车,我见过不止一个人把PGA设得过大,导致信号超过满量程,读数直接“顶天”。增益的选择要基于传感器输出范围反推,不能拍脑袋。
先说K型热电偶。假设项目里测的是0到300°C范围,热电势大约0到12.2mV。ADS122U04内部基准默认是2.048V,PGA增益设为32时,最大输入满量程对应2.048V/32=64mV。12.2mV的信号用32倍增益后是390mV,远没到满量程,留了足够裕量。这样做的目的是防止传感器超温、或者线缆上串入异常电压时,ADC不会立刻饱和。
如果测温上限到600°C,热电势约24.9mV,此时PGA还是32够用吗?24.9mV乘32等于797mV,离满量程64mV?不对,这里满量程是64mV,所以24.9mV对应的放大值是797mV,已经超过满量程了。所以增益要降到8或16。增益和量程的匹配关系,是选型时最先要算清楚的。
PT100就完全不同了。用IDAC给500uA激励电流,PT100在0°C时电阻100Ω,产生50mV电压;100°C时电阻138.51Ω,产生69.3mV电压。信号范围约19mV。这里有两个选择:PGA设为16,把0°C时的基础电压50mV放大到800mV,100°C时放大到1.1V,都不会超过2.048V满量程。如果PGA设为32,100°C时是2.2V,超了,直接饱和。所以PGA=16是合适的。
PT1000呢?电阻是PT100的10倍,激励电流要降下来,用250uA。0°C时250mV,100°C时346mV,PGA设为4刚好能覆盖。激励电流不是越大越好,电流大了传感器会自热,PT100在500uA下的自热误差大约0.03°C左右,可以接受;但如果是插入式探头在静止空气中,自热会更明显,电流降到250uA更稳妥。
我把常用的配平参数整理成一个表,方便直接抄作业:
| 传感器 | 测温范围 | 激励电流 | PGA增益 | 放大后最大电压 | 是否安全 |
|---|---|---|---|---|---|
| K型热电偶 | 0~300°C | 无 | 32 | 约0.39V | 安全 |
| K型热电偶 | 0~600°C | 无 | 8 | 约0.20V | 安全 |
| PT100四线制 | 0~100°C | 500uA | 16 | 约1.11V | 安全 |
| PT1000四线制 | 0~100°C | 250uA | 4 | 约1.39V | 安全 |
2.3 电源、PCB布局与冷端传感器放置
这部分是硬功夫,很多人的板子就是栽在这里。
电源设计原则很简单:模拟部分和数字部分分开。ADS122U04的模拟电源AVDD用一颗低噪声LDO单独供电,数字电源DVDD可以和MCU共用一颗LDO,但两者之间要放磁珠和去耦电容。ADC的参考电压引脚对滤波要求极高,我习惯在REF引脚放一个10uF钽电容加两个100nF陶瓷电容,位置尽量靠近芯片引脚。
PCB布局上,首先要保证ADC底下有完整的模拟地平面。数字地和模拟地在ADC下方单点连接,避免数字信号电流流过模拟地平面。ADS122U04的UART走线不要贴着模拟输入走,实在躲不开就加地线隔离。
冷端温度传感器的位置,是热电偶方案里最容易被忽视的致命细节。冷端补偿的原理是:测出热电偶接线端子处的实际温度,再把这个温度对应的热电势加到测量结果里。所以冷端传感器必须紧贴热电偶的接线端子,而且要尽量和两个端子保持等距。
我踩过一个大坑:最开始把NTC放在板上角落,离接线端子有两厘米远。结果板子上有个稳压芯片,工作时发热,把NTC附近的温度抬高了3°C,导致整条测量链路恒偏高3°C。后来把NTC挪到正对端子下方的位置,又加了一个小散热片隔开热源,偏差才回到0.2°C以内。
冷端温度传感器用什么?我的经验是NTC加PIC内部10位ADC就够了。冷端温度变化缓慢,本身不要求多高的分辨率,10位ADC配合合适的分压电阻,能分辨到0.1°C已经远超需求。但如果系统里没有多余ADC通道,也可以用数字温度传感器,走I2C接口,只是BOM里多一颗芯片。
3. 软件实现:从原始码值到稳定温度值
3.1 UART通信协议与状态机
ADS122U04是UART从机,MCU是主机。上电后ADC不会主动上报任何数据,必须由MCU发命令帧,ADC收到后回应答帧。所以通信协议的核心就是“一问一答”。
我的协议帧结构设计得很简单,一共6个字节:
| 字节序号 | 内容 | 说明 |
|---|---|---|
| 0 | 0xAA | 帧头 |
| 1 | 命令字 | 0x01读数据,0x02写配置 |
| 2 | 参数 | 通道号或寄存器值 |
| 3 | 数据高字节 | 24位转换结果的高8位 |
| 4 | 数据低字节 | 24位转换结果的低16位中的低8位 |
| 5 | CRC8 | 校验字节 |
这里命令字、参数和返回数据的具体布局,可以根据自己需求微调。关键是两点:帧头必须要,防止数据流错位;CRC校验必须要,哪怕是简单的CRC8,也能挡掉绝大多数UART偶然误码。
PIC侧的接收建议用状态机实现,不要用阻塞式等待。中断收到一个字节,状态机推进一次,收满6字节后置标志位,主循环处理数据。这套结构在8位MCU上非常经典,占资源少,逻辑清晰。
发送端要考虑超时重试。ADC偶尔会没响应(比如正在写EEPROM、或者上电初始化),主机发完读命令后等50ms没收到应答,就重新发一次。连续三次超时,判定通信异常,置位错误标志。
3.2 传感器线性化处理
热电偶和PT100的传感器特性都不是线性的。PT100在0到100°C之间,电阻温度关系的线性度还算可以,但严格算下来也有零点几度的非线性。热电偶的非线性更明显,K型在300°C附近,同样的温度差对应的电动势差是变化的。
处理非线性有两种常用做法:查表插值和多项式拟合。8位MCU上,查表插值是王道。分度表放在const数组里,占用Flash空间,不占RAM,查表速度飞快。
以PT100为例,我直接用0到100°C每隔10°C的分度表,配合线性插值,精度就能到0.05°C以内:
/* PT100分度表,0~100°C,间隔10°C,单位欧姆 */ const float pt100_table[11] = { 100.00f, 103.90f, 107.79f, 111.67f, 115.54f, 119.40f, 123.24f, 127.08f, 130.90f, 134.71f, 138.51f }; float pt100_resistance_to_temp(float r) { uint8_t i; float slope, temp; if (r <= pt100_table[0]) return 0.0f; if (r >= pt100_table[10]) return 100.0f; for (i = 0; i < 10; i++) { if (r >= pt100_table[i] && r < pt100_table[i + 1]) { slope = (pt100_table[i + 1] - pt100_table[i]) / 10.0f; temp = (float)i * 10.0f + (r - pt100_table[i]) / slope; return temp; } } return 100.0f; }这个函数每次调用都会遍历一次表,性能不是最优的。如果采样速率要求高,可以改成二分查找,但HVAC场景一秒采一次,线性遍历完全够用。
热电偶的查表原理一样,只是数据量更大。K型热电偶0到1000°C每隔10°C一个点,需要101个浮点数(或定点数),PIC18的Flash完全装得下。分度表数据网上有标准版本,千万别手抄,直接从NIST的公开数据表提取。
3.3 冷端补偿的实现流程
这个环节是热电偶方案里最容易算错的,我必须花点篇幅讲清楚。
热电偶输出的电动势是热端和冷端的温差电动势。所谓“冷端”,就是热电偶的接线端子,那边温度通常不等于0°C。要得到真实的热端温度,必须把冷端温度“补偿”掉。
标准流程分三步:
/* 冷端补偿:以K型热电偶为例 */ /* 输入:v_meas 为ADC测得的热电偶电动势(单位uV),t_cj 为冷端温度(单位°C) */ float thermocouple_compensated_temp(float v_meas, float t_cj) { /* 第一步:由冷端温度,查分度表得到冷端对应的电动势 */ float e_cj = ktype_temp_to_emf(t_cj); /* 单位uV */ /* 第二步:总电动势 = 测量电动势 + 冷端电动势 */ float e_total = v_meas + e_cj; /* 注意符号方向 */ /* 第三步:由总电动势反查温度 */ float t_hot = ktype_emf_to_temp(e_total); return t_hot; }这里最容易错的是第二步的符号。冷端温度高于0°C时,冷端电动势是正的,所以要用“加”。很多人想当然地写成了“减”,结果环境温度越高,测得的热端温度反而越低。我就犯过这个错,当时校准的时候怎么都对不上,最后用万用表直接量热电偶毫伏值,手工算了一遍才发现是符号问题。
还有一个细节:冷端温度传感器读出来的是板上温度,但热电偶端子和PCB的温度可能有细微差别。要缩小这个误差,除了物理上让NTC紧贴端子,还可以在软件里做一次“位置校准”:把热电偶探头放在已知温度(比如冰水混合物)中,微调冷端温度的偏移量,让读数正好等于已知温度。这一步能在不换硬件的情况下,把冷端补偿误差再压缩零点几度。
3.4 数字滤波与50Hz工频干扰抑制
ADC输出的是24位原始码值,如果不滤波,读数最后两三位基本稳定不下来。尤其是生产车间里,动力电的50Hz工频感应无处不在,温度数据会呈现周期性波动。
ADS122U04内部的ΔΣ调制器和数字滤波器,理论上对50Hz工频有抑制能力,但前提是采样率和工频正好成整数倍关系。如果芯片配置成20SPS(每秒采样20次),50Hz正好是2.5倍,抑制效果一般;配置成50SPS时,效果会好很多。我习惯把ADC配置成50SPS,让内部数字滤波器的陷波点对准50Hz。
软件层再叠加两道滤波:
第一道是中值滤波,采样3次取中间值,目的是剔除偶发的尖峰干扰。这类尖峰来自电机换向、继电器触点抖动,单纯平均的话会被拉偏,中值滤波能直接干掉。
第二道是移动平均,取16次有效采样做算术平均。50SPS下16次平均耗时约0.32秒,HVAC和工业测温对这个响应速度完全能接受。平均后的数据,有效分辨率能比单次采样提升约2位,也就是说24位ADC在这种噪声环境下实际用到18到19位是靠谱的。
移动平均的窗口别贪大。我试过取64次平均,数据确实稳得一匹,但温度变化时跟踪速度明显变慢,传感器碰到热水都要好几秒才能反映出来,现场调试时感觉特别“闷”。16次是个不错的折中。
4. 校准流程与精度验证
4.1 两点校准怎么操作
系统装好后不能直接用,必须做一次两点校准。校准的目的是消除系统性的失调和增益误差,这两类误差主要来自PGA的输入失调、基准电压的初始精度、以及PCB上的微小漏电流。
第一步校准零点。把温度探头放进冰水混合物,注意是“冰水共存”的状态,温度稳定在0°C。读取当前ADC转换值,记录下来作为零偏值。冰水混合物的关键在于冰块和水的温度平衡,别用纯冰块,也别用刚从冰箱拿出来的冷水,等冰水界面稳定下来再读数。
第二步校准满量程。工业上推荐用干体炉,设定一个稳定温度(比如100°C),把探头插进去,等温度稳定后读取ADC值,记录为满量程值。如果没有干体炉,用沸水也行,但海拔影响水的沸点,高原地区沸点不到100°C,要把当地实际沸点查清楚再算。
校准系数存到MCU的EEPROM里。校准完成后,软件里的换算公式变成:
/* 线性校准:raw为ADC读数,raw_zero和raw_span为校准值,t_span为校准温度跨度 */ float calibrated_temp(float raw) { float k = (float)(t_span) / (raw_span - raw_zero); return (raw - raw_zero) * k; }这个公式的前提是传感器响应线性,PT100在窄范围内够用。热电偶的非线性由查表算法处理,校准相当于把整条曲线整体平移和拉伸,效果也稳定。
校准系数写EEPROM要写两次并读回校验,防止掉电瞬间写了一半,下次上电读到乱码。这是我吃过亏才加的保险。
4.2 实测数据与误差分配
我在测试台上用干体炉和精密温度计做了多组对比,校准后的典型数据如下:
| 参考温度(°C) | 校准前读数(°C) | 校准后读数(°C) | 误差(°C) |
|---|---|---|---|
| 0.00 | 0.83 | 0.02 | +0.02 |
| 25.00 | 25.61 | 24.97 | -0.03 |
| 50.00 | 50.48 | 49.98 | -0.02 |
| 75.00 | 75.37 | 75.03 | +0.03 |
| 100.00 | 100.19 | 99.97 | -0.03 |
校准前最大偏差0.83°C,校准后偏差控制在±0.05°C以内。这个数据是用PT100四线制测的,算是这套方案最好的表现。
如果是K型热电偶,整体误差会大一些。误差分配是这样的:热电偶本身允差是±1.5°C或±0.4%读数,取大者,这是传感器自身的物理限制;ADC和PGA引入的误差大约±0.1°C;冷端补偿误差大约±0.3°C;PCB和长线的干扰误差约±0.2°C。累加起来,K型热电偶方案的典型总误差在±1°C左右。
这里要说一句可能不爱听的话:系统做得再准,也突破不了传感器本身的精度上限。PT100的A级允差是±0.15°C,普通K型热电偶是±1.5°C。如果你买的传感器本身就一个度都不准,那后面做再多校准都是白费力气。选传感器时一定要问清楚允差等级,HVAC风管测温可以用B级PT100,但工业过程控制至少要用A级。
5. 常见问题与排查技巧实录
5.1 问题速查表
把我在调试中遇到的高频问题整理成一张表,按现象排查最方便:
| 现象 | 可能原因 | 排查手段与解决办法 |
|---|---|---|
| 读数末尾2~3位乱跳 | PGA增益过高,噪声被过度放大 | 降低PGA增益;增加软件移动平均次数;检查基准去耦电容 |
| 温度整体偏高或偏低几度 | 冷端补偿位置不对或冷端传感器受热 | 用热成像或手摸排查板上热源;把NTC紧贴端子并隔开热源 |
| 温度读数呈周期性波动 | 50Hz工频干扰,采样率未对准 | 把ADC采样率配置成50SPS;增加中值滤波;信号线用屏蔽双绞线 |
| UART偶发错帧或掉线 | 波特率误差、缺上拉、共地不良 | 检查MCU与ADC共地;TX/RX加上拉10kΩ;协议加CRC校验和超时重试 |
| 上电后ADC无响应 | TX/RX接反或供电时序不对 | 万用表量电压和信号线电平;示波器抓UART波形确认是否有数据发出 |
| 读数接近满量程“顶天” | PGA设置过大导致信号饱和 | 按2.2节的配平表重新计算PGA增益和激励电流 |
| 校准值掉电后丢失 | EEPROM写入被中断 | 写两次校验;写完立即读回对比;加写保护延时 |
5.2 三个我踩过的深坑
第一个坑是跳字。量测读数稳定在0.38°C到0.42°C之间来回跳,以为是PGA增益不够,把增益从16提高到32,结果跳得更凶。用示波器测ADC的电源引脚,发现上面叠了一层几百kHz的毛刺,来自板子另一侧的开关电源。把开关电源的开关频率调低、在ADC供电端加了一个10uF低ESR电容后,毛刺消失,读数稳定到0.01°C。这件事教会我:跳字先查电源,别急着改软件。
第二个坑是冷端偏差。现场调试时K型热电偶读数总是比实际温度高3°C左右,怎么校准都拉不回来。后来发现是冷端NTC旁边有一颗LDO,满载工作时表面温度比环境高出一截,把NTC“烤”热了。解决方法是把NTC挪走,同时在LDO和NTC之间加了一个小铜皮作为热屏蔽。之后冷端偏差降到0.2°C以内。
第三个坑是UART通信偶发乱码。一开始把波特率设成了115200,现场布线较长时一天能遇到几次错帧。排查发现是数据线过长导致信号边沿变缓,加上现场有变频器干扰。把波特率降到9600,数据线换成双绞屏蔽线,屏蔽层单端接地,同时软件里加了CRC校验和三次重试机制,之后连续跑了两个星期没有一帧错误。
5.3 长线传输的干扰处理经验
如果ADC和MCU之间的距离超过1米,或者线缆必须经过变频器、动力电缆附近,有几点经验值得单独说。
信号线一定要用屏蔽双绞线,屏蔽层在MCU端单点接地。屏蔽层两端都接地容易形成地环路电流,反而引入更多噪声。热电偶的输入线如果特别长,在ADC输入端加的RC滤波电容可以适当调大,但要注意采样稳定时间,软件里需要等待足够长的时间再读数。
UART通信线也是一样。TX、RX两根线最好放双绞线里,不需要特殊阻抗匹配,但一定要走差分,不要一根信号线一根地线那样并排走。地线回路要单独拉粗线,确保MCU和ADC的参考地是同一个电位。两板距离较远时,最好在ADC板的地和MCU板的地之间加磁珠或共模电感,切断地环路干扰。
6. 一点个人的总结和体会
这套方案从原理图到稳定运行,前后花了不少时间,但每一步踩坑都值回票价。我自己最大的体会是:ADS122U04这类带UART接口的高精度ADC,对8位MCU项目来说是一个极好用的组合,把模拟前端和数字主控之间的接口简化到了极致,你可以把精力花在线性化算法和现场抗干扰上,而不是折腾SPI时序和驱动能力。
如果让我给刚开始做类似项目的朋友一个建议,我会说:不要一上来就做热电偶,先用PT100四线制把整条链路跑通,理解清楚ADC的初始化、通信协议、滤波和校准流程,再切到热电偶方案。热电偶的冷端补偿和线性化是两座大山,提前把链路跑熟了,遇到这两座大山时才不会手忙脚乱。
最后再分享一个小技巧:正式上量产前,把同一套程序烧到几块板上,接上不同传感器,放进恒温箱里跑72小时,每10分钟记一次数据。温度稳定性和重复性数据,比任何实验室精度指标都更能说明问题。这套流程走下来,你对这套方案的信心会比任何仿真和计算都来得扎实。