同的HVAC遠(yuǎn)程溫度采集方案)
1. 項(xiàng)目要解決的核心問題本地溫度為什么不能當(dāng)遠(yuǎn)程溫度來用接到這個(gè)項(xiàng)目需求時(shí)客戶的要求只有一句話在嵌入式控制板上測(cè)本地溫度同時(shí)把遠(yuǎn)端探頭位置的溫度也測(cè)出來用于 HVAC 設(shè)備聯(lián)動(dòng)。聽起來簡單可一旦細(xì)化到“本地”和“遠(yuǎn)程”這兩個(gè)詞工程細(xì)節(jié)就完全不一樣了。距離、線纜、電磁干擾、傳感器供電、總線拓?fù)涿恳画h(huán)都可能讓溫度數(shù)據(jù)從“看著對(duì)”變成“根本沒法用”。這套方案的核心器件是 PJ85718DM 和 PIC18F85J10。PIC18F85J10 屬于高性能 8 位單片機(jī)引腳多、片上外設(shè)全適合作為整個(gè) HVAC 控制器的主控PJ85718DM 則作為前端溫度采集模塊負(fù)責(zé)規(guī)整本地傳感器和遠(yuǎn)程總線傳感器。把“采集溫度”這件事從前端到主控做成一條清晰通路后續(xù)的顯示、風(fēng)機(jī)控制、壓縮機(jī)啟停才有可靠的數(shù)據(jù)依據(jù)。為什么要特意區(qū)分本地和遠(yuǎn)程因?yàn)閮烧叩碾姎猸h(huán)境差別很大。本地傳感器貼著主板放線纜短、信號(hào)穩(wěn)直接用 I2C 或者 SPI 讀最快。遠(yuǎn)程傳感器可能部署在風(fēng)管、室外機(jī)、房間角落線長幾米甚至幾十米如果用普通 I2C 拉長線時(shí)序會(huì)被線纜電容拖垮通信錯(cuò)誤率猛增。這種場(chǎng)景必須換思路用帶收發(fā)驅(qū)動(dòng)、能容忍長線傳輸?shù)目偩€方式或者是帶遠(yuǎn)端地址的傳感器節(jié)點(diǎn)方案。PJ85718DM 的價(jià)值就是把這些差異封裝起來主控統(tǒng)一通過寄存器去操作底層協(xié)議的變化盡量被屏蔽。1.1 HVAC 場(chǎng)景里最常見的兩組溫度測(cè)點(diǎn)結(jié)合我實(shí)際做過的類似項(xiàng)目HVAC 設(shè)備的溫度測(cè)點(diǎn)大體可以分成兩組。第一組在主板附近比如控制板進(jìn)風(fēng)口溫度、電源模塊表面溫度、通訊模塊周圍溫度。這組測(cè)點(diǎn)離 MCU 很近幾厘米到幾十厘米適合用板載傳感器或者 I2C 總線上掛著的小封裝傳感器。第二組則分布在需要被控溫的真實(shí)環(huán)境里比如回風(fēng)溫度、送風(fēng)溫度、室外環(huán)境溫度、管道內(nèi)溫度它們通常位于設(shè)備殼體外側(cè)甚至單獨(dú)拉線到房間中間去。第一組測(cè)數(shù)據(jù)的目的多半是保護(hù)電子硬件防止板級(jí)過熱第二組才是真正的空調(diào)控制依據(jù)。在調(diào)試現(xiàn)場(chǎng)我發(fā)現(xiàn)很多新手只接了一路回風(fēng)溫度就把壓縮機(jī)控制寫死了結(jié)果送風(fēng)溫度沒檢測(cè)冬天熱風(fēng)直接把房間烤過頭。設(shè)計(jì)架構(gòu)時(shí)至少要預(yù)留兩路以上遠(yuǎn)程測(cè)點(diǎn)而且遠(yuǎn)程通道要具備擴(kuò)展能力方便后續(xù)增加探頭。用 PJ85718DM 做前端管理的好處是它天然自帶多通道采集邏輯把本地傳感器的輪詢和遠(yuǎn)程傳感器節(jié)點(diǎn)的地址管理放在一個(gè)模塊里主控不需要頻繁中斷去處理位時(shí)序。這樣在 HVAC 主循環(huán)里溫度刷新可以做到毫秒級(jí)穩(wěn)定不太影響其他控制任務(wù)。1.2 PIC18F85J10 和 PJ85718DM 各自承擔(dān)什么角色PIC18F85J10 這顆片子最大的優(yōu)勢(shì)是資源均衡。它有充足的外部引腳可以同時(shí)接 PJ85718DM 的數(shù)字接口、LCD 顯示、按鍵、風(fēng)機(jī)調(diào)速 PWM、繼電器控制預(yù)留 UART 口做通訊調(diào)試也不顯得擁擠。片上自帶多個(gè)定時(shí)器和硬件串行外設(shè)不需要全部用 GPIO 模擬時(shí)序。如果換成一顆小封裝單片機(jī)引腳規(guī)劃和中斷優(yōu)先級(jí)就會(huì)很痛苦HVAC 這種需要多種外設(shè)協(xié)同的場(chǎng)景很容易翻車。PJ85718DM 在我這里扮演的是“采集前端”的角色。它可以連接若干個(gè)本地?cái)?shù)字溫度傳感器同時(shí)管理一條遠(yuǎn)程傳感器總線把不同物理位置的傳感器統(tǒng)一編址。主控只需通過標(biāo)準(zhǔn)寄存器接口下發(fā)指令比如“讀取 2 號(hào)通道溫度”PJ85718DM 內(nèi)部就會(huì)完成啟動(dòng)轉(zhuǎn)換、等待讀數(shù)、錯(cuò)誤重試最后把結(jié)果放到數(shù)據(jù)寄存器里。主控利用 I2C 或 SPI 把數(shù)據(jù)取回來就行。這種“主控前端”的分工比讓主控直接操作一堆傳感器更穩(wěn)。主要原因在于主控的工作負(fù)擔(dān)不只是讀溫度還要跑 PID 算法、處理通訊協(xié)議、驅(qū)動(dòng)繼電器如果把傳感器時(shí)序細(xì)節(jié)都堆到主控里一旦線纜干擾導(dǎo)致時(shí)序重試主控實(shí)時(shí)性就會(huì)崩。PJ85718DM 擋在中間臟活累活它干了主控只拿到干凈的結(jié)果。2. 硬件鏈路搭建主控、PJ85718DM、傳感器三者怎么接2.1 系統(tǒng)拓?fù)浣Y(jié)構(gòu)整體鏈路設(shè)計(jì)上我分了三層。最底層是傳感器層包括板邊沿的本地傳感器和多處遠(yuǎn)程探頭中間層是 PJ85718DM負(fù)責(zé)采集和總線調(diào)度最頂層是 PIC18F85J10負(fù)責(zé)控制邏輯與人機(jī)交互。鏈路的物理連接大致是這樣PIC18F85J10 通過一組 SPI 或 I2C 與 PJ85718DM 連接這屬于主控與前端模塊之間的高速內(nèi)部總線。PJ85718DM 向下本地傳感器接入其 I2C 擴(kuò)展口遠(yuǎn)程傳感器則接到它的串行總線接口上。遠(yuǎn)程總線上可以掛多個(gè)地址不同的探頭具體數(shù)量由 PJ85718DM 的地址空間決定實(shí)際項(xiàng)目中我通常掛 4~8 個(gè)太多會(huì)增加輪詢周期降低實(shí)時(shí)性。有一點(diǎn)要明確PJ85718DM 承擔(dān)的是“采集并整理”PIC18F85J10 承擔(dān)的是“決策并使用”。溫度數(shù)據(jù)不是拿來顯示的而是用來風(fēng)機(jī)調(diào)速、壓縮機(jī)通斷、報(bào)警輸出的。因此軟件上必須把溫度讀取函數(shù)設(shè)計(jì)成同步阻塞還是異步輪詢要提前想清楚。我建議用輪詢方式因?yàn)椴杉芷诒旧碇挥袔资撩朐?HVAC 這種毫秒級(jí)控制場(chǎng)景里阻塞幾百微秒完全可接受狀態(tài)機(jī)反而能簡化。2.2 電源、上拉電阻與布線規(guī)范硬件布線是整個(gè)項(xiàng)目里看似不起眼、實(shí)際上最容易出問題的部分。PJ85718DM 和傳感器的供電我建議統(tǒng)一用 3.3V 穩(wěn)壓軌前提是傳感器本身支持 3.3V。遠(yuǎn)程探頭如果距離長則需要考慮線上壓降必要時(shí)用 5V 供電、信號(hào)接口加電平轉(zhuǎn)換。遠(yuǎn)程傳感器在現(xiàn)場(chǎng)經(jīng)常遇到的問題是供電不足導(dǎo)致轉(zhuǎn)換結(jié)果偏移不是傳感器壞了而是遠(yuǎn)端電壓跌到了傳感器的最低工作電壓以下??偩€電阻方面本地 I2C 接口上拉電阻我習(xí)慣選 4.7kΩ 到 10kΩ這要看掛載數(shù)量。但遠(yuǎn)程總線延長之后線纜電容會(huì)變大4.7kΩ 上拉帶來的上升沿可能不夠換成 1kΩ~2.2kΩ 通常會(huì)改善。不過上拉太小會(huì)增加靜態(tài)功耗長線反射和振鈴也可能出現(xiàn)需要示波器實(shí)測(cè)。我在自動(dòng)化測(cè)試平臺(tái)實(shí)測(cè)過15 米雙絞線、2.2kΩ 上拉、波特率 9600波形還比較干凈如果波特率拉到 38400 以上遠(yuǎn)端設(shè)備基本就很難穩(wěn)定同步。在 PCB 布局上建議把 PJ85718DM 靠近 PIC18F85J10 放置中間信號(hào)線不要太長避免高速 SPI 信號(hào)形成環(huán)形天線。傳感器走線遠(yuǎn)離繼電器和壓縮機(jī)驅(qū)動(dòng)電路尤其是感性負(fù)載切換時(shí)會(huì)產(chǎn)生高壓尖峰地線處理不好會(huì)把溫度數(shù)據(jù)干擾得跳來跳去。輸出級(jí)加 RC 吸收或者壓敏電阻傳感器走線加磁珠隔離這些措施對(duì) HVAC 現(xiàn)場(chǎng)設(shè)備來說不是可選項(xiàng)是必要項(xiàng)。2.3 關(guān)鍵引腳分配參考具體引腳分配上每個(gè)項(xiàng)目會(huì)有差異但大的思路是一致的。我提供一個(gè)實(shí)際用過的規(guī)劃作為參考PIC18F85J10 的 SPI 片選接給 PJ85718DM作為模塊的唯一控制入口另一組普通 GPIO 用于 PJ85718DM 的中斷輸出和復(fù)位控制。本地傳感器如果掛在 PJ85718DM 的 I2C 通道上這個(gè)通道僅限板內(nèi)不延伸出去遠(yuǎn)程總線則單獨(dú)占用一組帶收發(fā)器驅(qū)動(dòng)的 UART 或者專用 1-Wire 端口具體看傳感器類型。主控側(cè)的 PWM 通道預(yù)留至少兩路一路給風(fēng)機(jī)一路備用水泵或電加熱不要在后期才想起沒有多余 PWM。LCD 顯示可以用并行或 SPI 方式能省引腳就省引腳。所有預(yù)留的 UART 至少留一個(gè)給調(diào)試器用這在后期排查問題時(shí)能省大量時(shí)間。3. 軟件驅(qū)動(dòng)實(shí)現(xiàn)初始化、讀取、換算和出錯(cuò)重試3.1 PJ85718DM 寄存器操作流程PJ85718DM 對(duì)外的工作方式我按寄存器來理解上手會(huì)很快。模塊內(nèi)部主要有控制寄存器、狀態(tài)寄存器、數(shù)據(jù)寄存器、地址配置寄存器幾類。操作流程通常是這樣先通過 SPI 寫控制寄存器選擇要讀取的通道并啟動(dòng)溫度轉(zhuǎn)換然后輪詢狀態(tài)寄存器看轉(zhuǎn)換是否完成完成后讀取數(shù)據(jù)寄存器的高低位。如果是遠(yuǎn)程多通道節(jié)點(diǎn)還需要先寫通道地址再發(fā)出讀取命令等待節(jié)點(diǎn)返回結(jié)果。給一段我實(shí)際調(diào)試過的初始化代碼框架可以直接作為參考模板#define PJ_CS_PIN LATBbits.LATB2 #define PJ_SPI_CLK LATBbits.LATB1 #define PJ_SPI_SDO LATCbits.LATC6 void pj_write_reg(uint8_t addr, uint8_t val) { PJ_CS_PIN 0; spi_write_byte(PJ_CMD_WRITE | addr); spi_write_byte(val); PJ_CS_PIN 1; __delay_us(10); } uint8_t pj_read_reg(uint8_t addr) { uint8_t tmp; PJ_CS_PIN 0; spi_write_byte(PJ_CMD_READ | addr); tmp spi_read_byte(); PJ_CS_PIN 1; return tmp; }初始化階段我習(xí)慣先復(fù)位模塊然后讀取模塊 ID 寄存器確認(rèn)通信建立正常。這一步一定要做很多看似“傳感器讀數(shù)不對(duì)”的問題其實(shí)是主控和前端模塊之間的 SPI 時(shí)序都沒對(duì)齊地址和數(shù)據(jù)全都錯(cuò)位。讀模塊 ID 等于給整套通信鏈路做一個(gè)心跳檢查雖然浪費(fèi)幾個(gè)毫秒但能大大縮短硬件排錯(cuò)時(shí)間。讀取溫度的邏輯我封裝成了獨(dú)立函數(shù)返回原始值和處理后的溫度值。主控主循環(huán)里只管調(diào)用這個(gè)函數(shù)不用關(guān)心底層時(shí)序。每輪采集結(jié)束把數(shù)據(jù)放到公共變量區(qū)供顯示刷新和控制算法使用。3.2 溫度數(shù)據(jù)解碼與線性換算不同的溫度傳感器原始數(shù)據(jù)格式會(huì)不一樣。比較常見的是 12 位二進(jìn)制補(bǔ)碼單位為 0.0625°C高位字節(jié)在前低位字節(jié)在后的組織方式。真實(shí)溫度的計(jì)算公式是這樣實(shí)際溫度 (原始值 4) × 0.0625°C當(dāng)原始值為負(fù)數(shù)時(shí)需要按補(bǔ)碼先取反再加 1再換算。用代碼表示float temp_raw_to_celsius(int16_t raw) { float t (float)raw * 0.0625f; return t; }在 HVAC 控制里這個(gè) 0.0625°C 的精度基本夠用?,F(xiàn)場(chǎng)控制精度要求通常在 ±0.5°C 以內(nèi)畢竟空調(diào)系統(tǒng)本身的滯后效應(yīng)很大。如果對(duì)精度要求更高可以做兩點(diǎn)校準(zhǔn)。把傳感器放在冰水浴和沸水浴里記錄原始值然后建立線性校正公式把偏移和斜率修正到代碼里。批量生產(chǎn)時(shí)每個(gè)通道的校準(zhǔn)參數(shù)建議存儲(chǔ)在外部 EEPROM 或 PIC18F85J10 的數(shù)據(jù) EEPROM 里這樣換板不換探頭校準(zhǔn)值不丟。這里要說個(gè)容易被忽略的點(diǎn)溫度換算結(jié)果不要頻繁做浮點(diǎn)運(yùn)算。主循環(huán)每 100ms 讀一次溫度每次都做浮點(diǎn)換算雖然單個(gè)耗時(shí)不大但累積起來會(huì)影響其他實(shí)時(shí)任務(wù)。我的做法是先把原始值保存下來只在顯示和控制計(jì)算時(shí)再做一次換算中間過程盡量用整數(shù)運(yùn)算。3.3 數(shù)據(jù)校驗(yàn)與異常值剔除溫度和電流、電壓不同它的變化趨勢(shì)是緩慢的正常情況下相鄰兩次采樣之間的差值不會(huì)很大。利用這個(gè)特點(diǎn)可以做一個(gè)簡單的異常值剔除如果某次采樣值和上一次數(shù)值之差超過閾值比如 5°C先不要立刻采用而是連續(xù)再讀兩次兩次結(jié)果互相接近才采信否則上報(bào)傳感器故障。這種軟件濾波在 HVAC 現(xiàn)場(chǎng)特別管用。工業(yè)環(huán)境里變頻器、接觸器吸合瞬間會(huì)產(chǎn)生強(qiáng)烈的電磁干擾傳感器線如果恰好靠近動(dòng)力線ADC 轉(zhuǎn)換結(jié)果就可能出現(xiàn)毛刺。做過一次軟件濾波之后毛刺對(duì)控制邏輯的影響能降到很低。雖然 PJ85718DM 本身帶有一些數(shù)字濾波能力但雙保險(xiǎn)總歸沒壞處。遠(yuǎn)程探頭返回超時(shí)也是常見問題。PJ85718DM 在內(nèi)部會(huì)做重試但主控也應(yīng)當(dāng)在規(guī)定時(shí)間內(nèi)沒有得到結(jié)果時(shí)把該通道標(biāo)記為故障而不是一直死等。在 HVAC 設(shè)備中某個(gè)探頭掉了不能導(dǎo)致整機(jī)停機(jī)正確做法是轉(zhuǎn)用備用傳感器或固定輸出一個(gè)安全溫度值保證壓縮機(jī)不會(huì)因?yàn)槿睌?shù)據(jù)而誤判斷。4. HVAC 控制邏輯把溫度值變成執(zhí)行器動(dòng)作4.1 滯后比較實(shí)現(xiàn)風(fēng)機(jī)與壓縮機(jī)控制溫度采集只是手段控制動(dòng)作才是目的。HVAC 控制里最常用的一招是滯后比較也叫回差控制。假設(shè)制冷模式下回風(fēng)溫度目標(biāo)值是 25°C如果探頭測(cè)得 26°C 就啟動(dòng)壓縮機(jī)降到 24°C 才停止那這中間 2°C 的回差可以避免壓縮機(jī)頻繁啟停。直接用代碼判斷#define TARGET_COOL 25.0f #define HYSTERESIS 2.0f if (temp_room (TARGET_COOL HYSTERESIS / 2.0f)) { comp_on(); } else if (temp_room (TARGET_COOL - HYSTERESIS / 2.0f)) { comp_off(); }這類邏輯用文字描述很容易但放到真實(shí)設(shè)備里要結(jié)合多個(gè)溫度源。我認(rèn)為制冷模式至少要看回風(fēng)溫度和蒸發(fā)器管溫回風(fēng)溫度決定壓縮機(jī)是否運(yùn)行管溫用于防止蒸發(fā)器結(jié)霜。如果只靠單一探頭夏天高濕環(huán)境很容易把蒸發(fā)器凍住然后冷風(fēng)送不出去房間溫度根本降不下來。PJ85718DM 的多通道能力在這里就體現(xiàn)出來了一個(gè)模塊接多路探頭主控算法可以綜合判斷。風(fēng)機(jī)的轉(zhuǎn)速也可以根據(jù)溫差做無級(jí)調(diào)節(jié)。溫差大時(shí)風(fēng)機(jī)高速運(yùn)轉(zhuǎn)溫差接近目標(biāo)時(shí)降速既省電又安靜。具體的調(diào)速曲線我建議現(xiàn)場(chǎng)實(shí)測(cè)調(diào)整先把采集到的溫度通過串口打出來再對(duì)照設(shè)備實(shí)際風(fēng)速?zèng)Q定占空比映射。想一次性調(diào)出一個(gè)完美的 PID 參數(shù)很難從滯后控制和分段控制起步是更穩(wěn)妥的做法。4.2 遠(yuǎn)程探頭故障時(shí)的降級(jí)策略投運(yùn)一段時(shí)間后遠(yuǎn)程探頭損壞是必然事件不是會(huì)不會(huì)壞而是什么時(shí)候壞。每路遠(yuǎn)程通道在軟件中都應(yīng)當(dāng)有健康狀態(tài)標(biāo)志位。主控讀取失敗若干次后將故障探頭的溫度值替換成備用通道數(shù)值或者用最近一次有效值凍結(jié)。如果所有遠(yuǎn)程探頭同時(shí)故障HVAC 設(shè)備要進(jìn)入強(qiáng)制保護(hù)模式。壓縮機(jī)如果繼續(xù)工作而沒有溫度反饋可能導(dǎo)致蒸發(fā)器結(jié)霜或冷凝器壓力過高。實(shí)際項(xiàng)目中我見過因?yàn)樘筋^脫落壓縮機(jī)硬生生把空調(diào)凍成冰坨的情況。所以故障降級(jí)的底線是寧可停機(jī)不要瞎運(yùn)行??刂七壿嬂锉仨氂忻鞔_的“無有效溫度數(shù)據(jù)則停止相應(yīng)執(zhí)行器”分支這是安全優(yōu)先級(jí)最高的一條不能因?yàn)閾?dān)心誤停機(jī)而不跳轉(zhuǎn)。5. 實(shí)測(cè)記錄架構(gòu)調(diào)整前后對(duì)比以及需要注意的事項(xiàng)5.1 第一版方案的失敗教訓(xùn)剛開始我圖省事讓 PIC18F85J10 直接通過 I2C 去讀板外的所有遠(yuǎn)程傳感器傳感器節(jié)點(diǎn)用手工搭的電路沒有經(jīng)過 PJ85718DM 統(tǒng)一管理。樣機(jī)在實(shí)驗(yàn)室里跑得很歡一到現(xiàn)場(chǎng)就出問題??蛻衄F(xiàn)場(chǎng)的強(qiáng)電柜距離設(shè)備不到兩米線纜長度接近十米I2C 時(shí)鐘信號(hào)變形嚴(yán)重?cái)?shù)據(jù)讀取經(jīng)常超時(shí)偶爾還會(huì)讀出一會(huì)兒 15°C、一會(huì)兒 85°C 這種跳變值。后來把架構(gòu)改成現(xiàn)在的樣子遠(yuǎn)程傳感器統(tǒng)一接到 PJ85718DM 管理的總線上模塊本身承擔(dān)了波形成型和重試工作主控只從模塊寄存器取結(jié)果。再把傳感器走線重新規(guī)劃避開動(dòng)力線加了屏蔽層通信穩(wěn)定性和讀數(shù)一致性立竿見影。實(shí)測(cè)連續(xù)運(yùn)行三天溫度波動(dòng)基本保持在 0.2°C 以內(nèi)實(shí)驗(yàn)室和現(xiàn)場(chǎng)的數(shù)據(jù)基本一致。這里也反映出一個(gè)經(jīng)驗(yàn)嵌入式系統(tǒng)實(shí)驗(yàn)室環(huán)境過得太順往往是因?yàn)闆]有真實(shí)干擾源。溫度采集這類對(duì)噪聲敏感的功能必須在帶負(fù)載、帶線纜的條件下測(cè)試而不是只測(cè)一塊裸板。5.2 優(yōu)化前后的數(shù)據(jù)對(duì)比觀察項(xiàng)我整理了幾項(xiàng)最重要的實(shí)測(cè)觀察點(diǎn)落地項(xiàng)目時(shí)可以按這個(gè)思路去做驗(yàn)證一是在滿載和空載兩種工況下分別讀取本地與遠(yuǎn)程溫度確認(rèn)讀數(shù)不隨供電波動(dòng)亂跳二是人為拔掉一路遠(yuǎn)程探頭確認(rèn)故障標(biāo)志在 3 秒內(nèi)能上報(bào)三是用示波器觀察遠(yuǎn)程總線波形確認(rèn)波特率和上拉匹配合理四是長時(shí)間運(yùn)行監(jiān)控溫度曲線的連續(xù)性不能有周期性毛刺。用這批指標(biāo)跑數(shù)據(jù)整套系統(tǒng)是否可靠會(huì)有一個(gè)非常直觀的判斷。不要只看某一次的絕對(duì)值反而要關(guān)注變化趨勢(shì)和跳變概率。溫度采集系統(tǒng)真正難的不是測(cè)準(zhǔn)一次而是連續(xù)幾個(gè)小時(shí)穩(wěn)定可復(fù)現(xiàn)。哪個(gè)通道偶爾跳一下、哪個(gè)通道線一松就復(fù)位這些才是真問題。6. 常見問題與排查表6.1 現(xiàn)場(chǎng)常見故障速查現(xiàn)象可能原因檢查與處理辦法本地溫度正常遠(yuǎn)程全部無數(shù)據(jù)遠(yuǎn)程總線供電缺失、收發(fā)器方向控制錯(cuò)誤用萬用表測(cè)探頭端電壓確認(rèn)總線使能引腳電平正確單個(gè)遠(yuǎn)程通道讀數(shù)跳變接頭氧化、線纜過長、上拉電阻不匹配重新壓接端子縮短線纜改用雙絞屏蔽線并降低波特率讀到的溫度始終為固定值傳感器已損壞或總線地址沖突確認(rèn)傳感器地址有無重復(fù)用模塊自檢命令單點(diǎn)讀測(cè)壓縮機(jī)頻繁啟停溫度更新周期太慢或回差設(shè)置過小縮短輪詢周期擴(kuò)大回差或者加入數(shù)據(jù)平滑上電后 PJ85718DM 通信失敗SPI 相位極性配置錯(cuò)誤、復(fù)位時(shí)序不滿足對(duì)照模塊手冊(cè)確認(rèn) SPI Mode檢查復(fù)位引腳時(shí)序示波器抓波形確認(rèn)這套速查表基本把我在現(xiàn)場(chǎng)遇到的高頻問題都覆蓋了適合直接打印出來當(dāng)調(diào)試小抄。很多問題表面上是傳感器壞了實(shí)際是通信配置和現(xiàn)場(chǎng)線纜布局的問題優(yōu)先排查鏈路再懷疑器件本體。6.2 依我來看最終必須避開的坑主要在幾個(gè)地方。第一遠(yuǎn)程傳感器線徑不要太細(xì)24AWG 以上的屏蔽線是底線太細(xì)的線不僅壓降大抗干擾能力也弱。第二主控和前端模塊之間不要用杜邦線長期跑調(diào)試可以產(chǎn)品階段必須用焊接或者壓接杜邦線氧化后接觸電阻增大偶爾會(huì)出現(xiàn)隨機(jī)通信錯(cuò)誤排查起來極其痛苦。第三不要在設(shè)計(jì)里把所有通道都當(dāng)成必須在線一定要預(yù)設(shè)探頭故障路徑否則現(xiàn)場(chǎng)任何一個(gè)探頭失效整套設(shè)備都會(huì)跟著出問題。第四溫度校準(zhǔn)不要只在室溫做一次最好能在低溫、常溫和高溫三個(gè)點(diǎn)做校驗(yàn)確認(rèn)傳感器在量程內(nèi)沒有明顯非線性。PIC18F85J10 的看門狗配置也值得一提。HVAC 設(shè)備要求長期無人值守運(yùn)行看門狗必須開啟而且看門狗超時(shí)后要能把故障狀態(tài)記錄下來。溫度采集模塊如果在看門狗復(fù)位后沒有重新初始化會(huì)一直報(bào)錯(cuò)。我習(xí)慣把“模塊重新初始化”寫進(jìn)復(fù)位向量后的自檢流程里這樣即使系統(tǒng)被殺掉重啟整個(gè)采集鏈也能快速恢復(fù)。做這套系統(tǒng)最大的體會(huì)就是溫度監(jiān)測(cè)不是功能是所有 HVAC 控制決策的地基。地基想打穩(wěn)前端采集模塊要分擔(dān)復(fù)雜度主控要留足資源軟件要提前考慮異常降級(jí)。按照這個(gè)思路用 PJ85718DM 配合 PIC18F85J10 去搭整個(gè)項(xiàng)目的穩(wěn)定性和可維護(hù)性都會(huì)比臨時(shí)拼的電路好很多。如果后續(xù)想擴(kuò)到更多測(cè)點(diǎn)或者改成無線采集這套框架的接口劃分也能平滑過渡不需要推翻重來。