多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

嵌入式HVAC双路温度监测:PJ85718DM与MK20DN128VFM5实战

嵌入式HVAC双路温度监测:PJ85718DM与MK20DN128VFM5实战 1. 从一颗温度传感器说起为什么本地与远程双路监测在嵌入式 HVAC 里绕不开做嵌入式 HVAC 控制板的人都有一个共识温度采样不准后面所有控制逻辑都是空中楼阁。不管是压缩机启停、风机调速还是电子膨胀阀开度调节全都建立在当前温度到底是多少这个基础判断上。问题在于HVAC 场景的温度监测从来不是单点的事——你既要知道控制板自己所在位置的温度本地温度也要知道被控区域或者远端出风口的温度远程温度。这两路温度如果只靠一颗传感器硬扛要么布线成本高得离谱要么采样精度被线路压降和噪声吃掉。我手头这个项目用的组合是 PJ85718DM 加 MK20DN128VFM5。前者是一颗远程温度传感器接口芯片后者是一颗带丰富外设的微控制器。这套搭配的核心思路很清晰MK20DN128VFM5 负责本地温度采集和整体控制逻辑PJ85718DM 负责把远端那颗测温器件的信号可靠地读回来两者通过片上外设完成数据交互。说白了就是让本地和远程各司其职再由主控统一做融合判断。这套方案适合谁看如果你正在做 HVAC 控制板、嵌入式温度采集模块或者任何需要同时监测板载温度和远端温度的场合这篇内容可以直接拿去参考。我会把选型逻辑、硬件连接、寄存器配置、采样时序、滤波处理、常见故障排查这些环节全部拆开讲尽量做到你照着做就能跑通。先给一个整体判断本地温度用 MCU 内部或板载传感器采胜在响应快、成本低、不受长线干扰远程温度用专用接口芯片配远端测温器件胜在布线灵活、抗干扰强、可以覆盖几米甚至十几米的距离。两者结合才是 HVAC 这种控制板在机房、测温点在风道场景的合理答案。2. PJ85718DM 与 MK20DN128VFM5 的分工逻辑谁采本地谁管远程2.1 为什么不让 MCU 一个人把两路都干了很多人第一反应是MK20DN128VFM5 本身就有 ADC我直接拉两根长线到远端测温器件上不就行了理论上可以实际做起来问题一堆。长线传输的是模拟小信号走几米之后线阻、分布电容、工频干扰、地电位差全来了。你 ADC 分辨率再高前端信号已经被污染采回来的值漂得没法用。更麻烦的是HVAC 设备里继电器、接触器、变频器一大堆电磁环境相当恶劣模拟长线基本等于给自己找罪受。PJ85718DM 这类远程温度接口芯片的价值就在这里它把远端测温器件的信号在本地做调理和数字化MCU 拿到的是相对干净的数字量或者经过缓冲的稳定信号不用直接面对长线模拟信号。这就好比你在嘈杂的车间里打电话与其扯着嗓子喊模拟长线不如两边各放一个对讲机接口芯片做信号调理传过来的声音清楚得多。2.2 本地温度通道的设计取舍本地温度这块MK20DN128VFM5 有几种做法。一是用 MCU 内部温度传感器优点是零成本、零布线缺点是精度一般通常只能到正负几度而且受芯片自身发热影响大。二是外挂一颗板载数字温度器件比如常见的 I2C 或 SPI 接口测温芯片精度能到零点几度响应也快。三是用热敏电阻加分压再进 ADC成本最低但需要做线性化和校准。在这个项目里本地温度我倾向于用板载数字温度器件走 I2C。原因很直接HVAC 控制板的本地温度通常用来做冷热补偿或者板级过温保护精度要求比远程温度还高一点因为它是控制算法的基准参考。MCU 内部传感器那点精度做保护阈值判断勉强够做精细控制就力不从心了。用 I2C 数字器件读数直接是摄氏度省掉 ADC 采样和换算软件上也清爽。2.3 远程温度通道的信号链路远程这边PJ85718DM 的角色是接口和调理。远端放一颗测温器件通过双绞线或者屏蔽线连回控制板PJ85718DM 负责激励、采样、线性化最后把结果交给 MK20DN128VFM5。这条链路里线材选择和接地方案比芯片本身还关键。我踩过的坑是一开始图省事用了普通排线结果远端读数每隔几秒就跳一下后来换成屏蔽双绞线屏蔽层单端接地跳动立刻消失。这个细节后面会专门展开讲。MK20DN128VFM5 和 PJ85718DM 之间的交互可以用 SPI 或者 I2C具体看接口芯片支持哪种。SPI 速度快、时序可控适合对采样实时性要求高的场合I2C 省引脚适合多器件挂载。这个项目里我选 SPI因为远程温度需要周期性高频采样SPI 的时钟速率和全双工特性更合适。3. 硬件连接与关键参数把两颗芯片正确接起来3.1 电源与去耦的细节MK20DN128VFM5 和 PJ85718DM 的供电要分开考虑。MCU 通常 3.3V接口芯片要看手册有的支持 3.3V 有的要 5V。如果两者电压域不同中间的电平匹配必须做否则轻则通信不稳重则烧引脚。我一般会在接口芯片电源脚旁边放一颗 0.1uF 陶瓷电容加一颗 10uF 钽电容前者滤高频后者稳低频。这个组合看起来老生常谈但实测下来省掉钽电容的那一版远程读数在继电器动作瞬间会有明显毛刺。去耦电容的摆放位置也有讲究。0.1uF 必须紧贴芯片电源引脚走线越短越好最好和地引脚形成最小回路。10uF 可以稍微远一点放在电源入口附近。很多人把电容放在板子另一头觉得反正连上了就行结果高频噪声照样窜进芯片。3.2 远程测温器件的接线方式远端测温器件到 PJ85718DM 的接线推荐用屏蔽双绞线。两根信号线绞在一起能有效抵消共模干扰屏蔽层只在控制板这一端接地远端悬空。为什么远端不接地因为两端接地会形成地环路地电位差产生的环流反而引入噪声。单端接地是这类长线信号处理的常规做法。线长方面双绞屏蔽线走十米以内一般没问题再长就要考虑加中继或者改用差分传输。线径不要太细0.2 平方毫米以上比较稳妥太细的线阻大激励电流流过会产生压降影响远端器件的工作点。3.3 SPI 通信的引脚分配与走线MK20DN128VFM5 和 PJ85718DM 之间的 SPI四根线SCLK、MOSI、MISO、CS。走线尽量短尽量等长尤其是 SCLK 和 MISO时钟和数据之间的偏斜会影响采样窗口。如果板上空间允许SCLK 和 MISO 之间可以走一根地线做隔离减少串扰。CS 片选线要注意上电默认电平。有些接口芯片 CS 浮空时会误触发所以 CS 最好加一个上拉电阻保证 MCU 还没初始化完成时芯片处于未选中状态。这个细节在调试阶段特别重要我就遇到过因为 CS 浮空导致接口芯片上电后乱发数据MCU 一读就死机的情况。信号MCU 侧接口芯片侧注意事项SCLKSPI 时钟输出时钟输入走线短避免与模拟线并行MOSI主出从入数据输入串联 22 欧姆电阻可抑制过冲MISO主入从出数据输出上拉或下拉按手册要求CS片选输出片选输入加上拉防浮空误触发电源3.3V按手册独立去耦0.1uF 紧贴引脚地数字地模拟地单点连接避免地环路4. 寄存器配置与采样时序让数据稳定读回来4.1 MK20DN128VFM5 的 SPI 初始化MK20DN128VFM5 的 SPI 配置核心是时钟极性和相位。PJ85718DM 手册里会写明它支持哪种模式通常是模式 0 或模式 3。模式选错读回来的数据全是错位的。我一般先用低速时钟跑通比如 1MHz确认数据正确后再往上提。HVAC 场景对采样速率要求没那么极端1MHz 到 4MHz 完全够用没必要为了快而牺牲稳定性。初始化顺序也有讲究先配置 GPIO 复用为 SPI 功能再配置 SPI 控制寄存器最后使能 SPI。顺序反了可能出现引脚状态未定义时 SPI 就已经开始工作产生误码。这个坑我在早期项目里踩过后来养成习惯所有外设初始化都按时钟使能、引脚复用、外设配置、外设使能四步走。4.2 PJ85718DM 的通道配置PJ85718DM 内部一般有多个通道可以接多个远端测温器件。配置时要明确用哪个通道、激励电流多大、采样周期多长、是否开启断线检测。激励电流的选择和远端器件有关电流太小信号弱电流太大自身发热影响精度。通常手册会推荐一个范围比如 100uA 到 1mA我一般取中间值兼顾信噪比和自热。采样周期要和 HVAC 的热惯性匹配。温度变化本来就慢没必要每秒采几百次。我通常设成 100ms 到 500ms 一次既跟得上温度变化又不给 MCU 增加无谓负担。如果做快速保护可以单独开一路高速采样但那是特例。4.3 采样时序的完整流程一次完整的远程温度采样流程是这样的MCU 拉低 CS发送通道选择命令等待接口芯片转换完成可以查询状态位或者用固定延时然后发送读命令把转换结果读回来最后拉高 CS。这个过程中转换等待时间必须留够手册里给的典型值要往上取别卡着最小值用温度、电压波动都会影响转换速度。读回来的原始数据通常是 ADC 码值需要按手册公式换算成温度。换算公式里一般有参考电压、增益、偏移这些参数这些参数要么是固定值要么需要校准。我强烈建议在量产前做一次两点校准用一个高精度温度源在低温和高温两个点各测一次算出实际的增益和偏移写进 MCU 的配置区。这样能把个体差异和批次差异都压下去。// 伪代码示例SPI 读取远程温度 uint16_t read_remote_temp(void) { uint16_t raw; uint16_t temp; CS_LOW(); spi_transfer(CMD_SELECT_CH0); // 选择通道 0 delay_ms(50); // 等待转换按手册留足余量 raw spi_transfer16(CMD_READ_RESULT); // 读转换结果 CS_HIGH(); // 换算假设手册给出 temp (raw * Vref / Gain - Offset) / Sensitivity temp convert_to_celsius(raw); return temp; }5. 本地与远程数据的融合处理滤波、校准与故障判断5.1 为什么原始数据不能直接用不管是本地还是远程采回来的原始温度值都带着噪声。本地数字器件好一点但也不是绝对干净远程经过长线噪声更明显。直接拿原始值去做控制执行机构会频繁抖动压缩机启停过于频繁寿命直接受影响。所以滤波这一步不能省。滤波方法有很多最简单的是算术平均采 N 次求平均。缺点是响应慢N 大了滞后明显。好一点的是滑动平均维护一个队列每次新数据进来挤掉最老的既平滑又不会太滞后。再讲究一点可以用一阶低通滤波公式是y y alpha * (x - y)alpha 越小越平滑但越滞后。HVAC 温度这种慢变量一阶低通配 alpha 在 0.1 到 0.3 之间实测效果很好。5.2 本地与远程的交叉校验两路温度放在一起还能做一件有价值的事交叉校验。正常情况下本地温度和远程温度的差值应该在一个合理范围内。如果差值突然超出预期说明某一路可能出问题了。比如远程线断了读数会跳到量程端点本地器件坏了读数可能卡死不变。通过监测两路温度的差值和变化率可以做出初步的故障判断。我一般会设两个阈值一个是差值阈值比如两路温差超过 15 度就报警另一个是变化率阈值比如单次采样变化超过 5 度就标记可疑。这两个条件同时满足基本可以确定有故障这时候系统可以切到安全模式比如停压缩机、开风机、报故障码。5.3 校准数据的存储与调用校准参数要存在非易失存储器里MK20DN128VFM5 内部一般有 Flash 或者 EEPROM 模拟区。存储时要注意写入前先擦除写入后做校验最好存两份互为备份防止写坏。读取时如果发现校验失败就回退到默认参数同时报一个校准丢失的警告。校准的时机也有讲究。出厂校准一次现场安装后如果条件允许最好再校一次因为现场的实际线长、环境温度和出厂测试台不一样。现场校准可以用一个已知温度点做单点偏移修正简单有效。6. 实测中遇到的坑与排查链路6.1 远程读数周期性跳变现象远程温度每隔几秒跳一下幅度一两度本地温度稳定。排查链路是这样的先看是不是电源问题用示波器看接口芯片电源脚发现继电器动作时有明显跌落加了大电容后改善但没根除。再查接线发现用的是普通排线换成屏蔽双绞线后跳动消失。根因是长线耦合了继电器动作产生的干扰。这个坑告诉我HVAC 板上的长线信号屏蔽和接地比什么都重要。6.2 SPI 通信偶发误码现象大部分时间读数正常偶尔读回一个明显错误的值。排查时先降 SPI 时钟误码率下降但没消除。后来用逻辑分析仪抓波形发现 MISO 上的数据在 CS 拉高瞬间有毛刺原因是 CS 和 SCLK 走线太近串扰导致。把两根线拉开距离中间加地线隔离问题解决。这个经验是SPI 走线别图省事该隔离就隔离。6.3 本地温度受 MCU 自热影响现象本地温度比实际环境温度高两三度而且随 MCU 负载变化。原因是用了 MCU 内部温度传感器芯片自身发热影响了读数。解决办法是改用板载独立温度器件远离 MCU 和电源等发热源。如果非要用内部传感器就要做负载补偿但补偿模型很难做准不如换器件省心。故障现象可能原因排查手段解决方案远程读数跳变长线干扰示波器看电源和信号屏蔽双绞线单端接地SPI 偶发误码走线串扰逻辑分析仪抓波形拉开走线加地隔离本地温度偏高MCU 自热对比环境温度改用独立温度器件读数卡死不变器件或线断测通断换器件修复线路加断线检测校准后仍偏差大校准点不当复查校准流程两点校准覆盖工作范围7. 这套方案还能怎么扩展把本地和远程温度监测跑通之后扩展方向其实不少。一是增加远程通道数PJ85718DM 如果支持多通道可以同时监测多个区域的温度做分区控制。二是把温度数据通过通信接口上传接入更上层的监控系统做集中管理。三是结合湿度、压力等其他传感器做焓值计算控制精度还能再上一个台阶。我在实际项目里的体会是温度监测这块硬件选型和布线决定了上限软件滤波和校准决定了实际效果。两者都做到位读数才能既准又稳。如果只重视一边要么硬件底子差怎么调都不行要么硬件很好但软件粗糙白白浪费了器件的性能。这套 PJ85718DM 加 MK20DN128VFM5 的组合硬件底子是够的剩下的就看你在配置和校准上花多少心思了。
返回列表