王元峰 ,劉 偉 ,張小偉
(1.安徽省蕪湖水文水資源局,安徽 蕪湖 241000;2.水利部南京水利水文自動化研究所,江蘇 南京 210012;3.南京揚(yáng)子水利自動化技術(shù)開發(fā)總公司,江蘇 南京 210012)
感應(yīng)式數(shù)字水位傳感器(以下簡稱傳感器)是一種采用先進(jìn)微處理器芯片為控制器,內(nèi)置通訊電路,可應(yīng)用于江河、湖泊、水庫、水電站、灌區(qū)及輸水等水利工程中的水位監(jiān)測產(chǎn)品,具有高可靠性及強(qiáng)抗干擾性能。感應(yīng)式數(shù)字水位傳感器利用水的導(dǎo)電性,引起水位變化與相應(yīng)的電極導(dǎo)通采集水位信號。
該傳感器的工作原理如下:傳感器的電極密布于 1 根棒式的外殼上,組成 1 條水位信號檢測線。由超音頻信號發(fā)生器和發(fā)射頭向水中發(fā)射檢測信號,取樣電路通過電極與水接通,接收檢測信號。傳感器的取樣電路為感應(yīng)式的,所以稱之為感應(yīng)元電路。當(dāng)水位發(fā)生變化時,相應(yīng)的感應(yīng)元電路發(fā)出信號。即:水面和傳感器的某個感應(yīng)元電路接觸時,該電路觸發(fā)器翻轉(zhuǎn),輸出信號由 1 變?yōu)?0;當(dāng)水面離開電極時,輸出信號由 0 變?yōu)?1。傳感器上若干個感應(yīng)元電路的電極,組成 1 條電子尺,相當(dāng)于 1 條水位神經(jīng)線。每個取樣電路就好像是人體的神經(jīng),向神經(jīng)中樞傳遞信息,因此又叫做神經(jīng)元電路。每個神經(jīng)元電路都是以開關(guān)脈沖的形式輸出數(shù)字信號[1]。
感應(yīng)式數(shù)字水位傳感器在結(jié)構(gòu)上分為數(shù)據(jù)采集和信息處理 2 個部分,具有以下功能特點(diǎn):
(1)數(shù)據(jù)采集實現(xiàn)數(shù)字化,穩(wěn)定可靠;
(2)抗干擾識別在保證數(shù)據(jù)采集正確的前提下,能最大限度地抑制干擾信息,大大提高了傳感器的可靠性;
(3)具有信號遠(yuǎn)傳能力,信號不經(jīng)中繼放大,可直接遠(yuǎn)傳 20 km;
(4)能區(qū)分零水位和斷線信號;
(5)具有采樣精度與傳感器的測量體長度無關(guān)的特點(diǎn),對不同變幅的應(yīng)用環(huán)境,測量精度保持不變,測量精度為 1 cm;
(6)可單支使用,也可以多支級聯(lián)使用,級聯(lián)時每支傳感器具備的變送器(又稱法蘭頭)都有各自的 ID 編號,該 ID 編號可以在線重新設(shè)定,便于級聯(lián)后識別;
(7)具有多種信號輸出方式:RS - 485(Modbus -RTU,SDI-12)、CAN、4~20 mA、1~5 V 等[2],可供用戶自由選擇。
該傳感器存在以下不足:
(1)電極是獲取水位信號的關(guān)鍵部件,但由于電極的腐蝕鈍化,影響到點(diǎn)信號的正常傳遞,因此對電極腐蝕、鈍化現(xiàn)象的研究,也是一個重要的問題;
(2)適用范圍受到環(huán)境限制,感應(yīng)式數(shù)字水位傳感器對水質(zhì)的要求較高,如含沙量和淤泥等因素都會給測量結(jié)果造成偏差。因此只適用于較為清澈的河流、山澗等。
感應(yīng)式數(shù)字水位傳感器的通訊協(xié)議采用 Modbus-RTU 標(biāo)準(zhǔn)協(xié)議,其波特率為 9600,1 個起始位,8 個數(shù)據(jù)位,1 個停止位,低位先發(fā)送,無校驗。
在 RTU 模式中,新的信息總是以至少 3.5 個字符的靜默時間開始,緊接著傳送第一個域:設(shè)備地址。整幀的信息必須以 1 個連續(xù)的數(shù)據(jù)流進(jìn)行傳輸,如果信息結(jié)束前存在超過 1.5 個字符以上的間隔時間,則出錯。
1 幀信息的標(biāo)準(zhǔn)結(jié)構(gòu)如表1 所示。表1 中的結(jié)構(gòu)說明:地址域,從機(jī)(目標(biāo)地址)的有效地址范圍為0~247,0 為廣播地址(使用廣播地址時,應(yīng)保證只接有 1 支傳感器,否則會導(dǎo)致數(shù)據(jù)出錯,或者硬件損壞);功能域,有效編碼為 1~255;數(shù)據(jù)域,數(shù)據(jù)域由多組這樣的數(shù)據(jù)構(gòu)成,2 個 16 進(jìn)制數(shù)為 1 組,范圍在 00~FF 之間;CRC 校驗,CRC 生成后,低字節(jié)在前,高字節(jié)在后;T1、T2、T3、T4 代表每個字節(jié)的傳輸時間長度,共為 4 個字節(jié)傳輸延遲時間。
表1 一幀的標(biāo)準(zhǔn)結(jié)構(gòu)表
目前市場上一些 RTU 只提供格雷碼接口,而感應(yīng)式數(shù)字傳感器使用 RS-485 傳輸方式,因此,需要設(shè)計數(shù)據(jù)轉(zhuǎn)換器,實現(xiàn)串口數(shù)據(jù)向格雷碼數(shù)據(jù)的轉(zhuǎn)換。即將傳感器采集到的水位數(shù)據(jù)轉(zhuǎn)換成格雷碼,供 RTU 讀取。數(shù)據(jù)轉(zhuǎn)換器每隔 3 min 定時采集 1 次數(shù)據(jù)發(fā)送到格雷碼 16 Pin 引腳接口上,而 RTU 則定時(可設(shè)置)讀取 16 Pin 引腳上格雷碼數(shù)據(jù),發(fā)送到中心站。
數(shù)據(jù)轉(zhuǎn)換器采用的主控芯片是 8 位低功耗芯片MC68HC908GP32 芯片(以下簡稱 GP32)。該芯片具有串口模塊(SCI)、定時器模塊(TIM)、定時基模塊 (TBM)和其他 IO 口模塊,滿足數(shù)據(jù)轉(zhuǎn)換器設(shè)計需求。其中串口模塊用來與傳感器進(jìn)行通訊,采集水位值;定時器和定時基模塊用來計時;鍵盤模塊可用來獲取設(shè)置信息;其他 IO 模塊分別用于格雷碼口傳輸、5 V 控 12 V 電壓、看門狗喂食等。圖1 給出了轉(zhuǎn)換器基本結(jié)構(gòu)圖。
圖1 數(shù)據(jù)轉(zhuǎn)換器基本結(jié)構(gòu)圖
數(shù)據(jù)轉(zhuǎn)換器系統(tǒng)(以下簡稱系統(tǒng))的開發(fā)采用 C語言編寫。軟件設(shè)計主要有以下幾個方面:串口通信、并行 ( 格雷碼 ) 輸出、CRC 校驗、數(shù)據(jù)轉(zhuǎn)換、與傳感器通信、傳感器電源管理、定時基、看門狗等。系統(tǒng)程序的邏輯框圖如圖2 所示。其工作流程主要分為以下幾個步驟:
(1)系統(tǒng)上電后,運(yùn)行初始化程序,包括芯片和各個模塊的初始化。
(2)查詢設(shè)備的地址和長度, 并與芯片的設(shè)定值即實際值相比較,如果相等,直接跳過(3)執(zhí)行。
查詢設(shè)備的地址和長度命令的功能碼為 03,命令格式為,目標(biāo)地址(1 字節(jié))+ 功能碼(1 字節(jié))+起始地址( 2 字節(jié)) 寄存器個數(shù)( 2 字節(jié))+ CRC校驗(2字節(jié))。如果不知道目標(biāo)地址是多少,可用廣播地址“00”代替,但必須保證只接 1 支傳感器。讀取傳感器的實際長度的命令格式同查詢地址命令格式相同,接收的回執(zhí)格式為,響應(yīng)地址 + 功能碼 + 字節(jié)計數(shù) + 地址 + 類型 + 長度 + CRC 校驗。如發(fā)送 0003 0004 0002 841B,收到的回執(zhí)為 0A 0304 0A 0206 04 E0 BB。傳感器的地址為 10 號,類型為感應(yīng)型 (01 為電容式,02 為感應(yīng)式),實際長度為 1600 mm(0640 H = 1600)。
圖2 系統(tǒng)程序邏輯框圖
(3)若設(shè)備的長度與設(shè)定的長度不一致,修改設(shè)備的地址和長度,回到(2)繼續(xù)執(zhí)行。
設(shè)置通訊地址、類型及傳感器長度命令的功能碼為 06,命令格式為,目標(biāo)地址(1 字節(jié)) + 功能碼(1 字節(jié)) + 起始地址(2 字節(jié))+寄存器個數(shù)(2字節(jié))+ 字節(jié)計數(shù)(1 字節(jié))+ 地址(1 字節(jié))+ 類型(1 字節(jié))+ 長度(2 字節(jié))+ CRC 校驗(2 字節(jié))。例如:設(shè)將地址為 0AH 的傳感器地址設(shè)置為 2 號,電容式,長度為 800 mm。收到回執(zhí)中,如果功能碼收到的是 86,表示傳感器數(shù)據(jù)不合格,另外傳感器的長度應(yīng)為 400 的倍數(shù),否則無法修改成功。
(4)每隔 3 min 查詢水位高度,查詢完畢后進(jìn)入低功耗休眠狀態(tài)。
讀測量數(shù)據(jù)、地址和傳感器長度命令的功能碼為03,命令格式同查詢設(shè)備地址的命令格式。如讀取 1 號地址的傳感器水位值命令 0A 0300 0000 0184 0A,得到的回執(zhí)為 0A 0302 02 D01D 79。得到的水位為 0C30 表示 16 進(jìn)制 0C30,轉(zhuǎn)換成 10 進(jìn)制 3120,表示水位高度為 3120 mm。由于水位高度的值不是實時更新的,傳感器每 20 s 更新 1 次,因此在程序設(shè)計時,不能連續(xù)讀取水位值,需要一定的間隔時間,間隔時間為 20 s,若少于 20 s,讀取的數(shù)值是上次讀取的值,即為無效值。
水情遙測系統(tǒng)大多在野外運(yùn)行,因此功耗要求比較低,遙測系統(tǒng)設(shè)計時要盡量降低功耗。可采取以下幾種方法降低功耗:
(1)采用可控電源電壓方式,在不需要與傳感器通訊時將傳感器斷電。傳感器工作電流為 10 A,如果一直供電,功耗較大。因此在設(shè)計時,用可控電源的方式,即只有系統(tǒng)與傳感器通訊時,才給傳感器上電。這里可控電源就是需要設(shè)計 1 個控制 12 V 的電路,由于 GP32 芯片 IO 口電壓為 5 V,因此要設(shè)計出 5 V 控制 12 V 電路,來減少非通訊時間的數(shù)據(jù)傳感器電流消耗。
(2)對MAX485芯片控電。經(jīng)過測試,MAX485 芯片在通電時,VCC 引腳有電流通過。因此為了進(jìn)一步降低功耗,對于 MAX485 芯片的電源芯片業(yè)采用可控的方式。在硬件設(shè)計時,考慮到串口通訊的工作時間與傳感器工作時間相一致,為減少 IO 口消耗和編程方便,采用的是將可控 12 V電壓通過 HT7550 降壓的方式得到可控的 5 V 電壓,給MAX485 芯片提供電源電壓。值得一提的是,在非工作模式中,要將 TXD 和 RXD 設(shè)置為普通的 IO 口,并輸出為 0,以防漏電。
(3)CRC 校驗采用查表的方式,代替原來復(fù)雜的運(yùn)算。采用空間換時間的方式,減少程序運(yùn)行時間,即程序低功耗狀態(tài)的時間相對增加,從而降低達(dá)到功耗的目的。
(4)休眠模式中,用 STOP 模式替代 WAIT 模式。HC08 系列 MCU 提供了 2 種低功耗模式供用戶使用,對應(yīng)的指令分別為 WAIT 和 STOP。這 2 種模式都是通過關(guān)閉時鐘來減小微控制器的功耗,但是兩者存在一定的差別,總體來說 WAIT 模式比 STOP 模式功耗大。
程序中運(yùn)行 WAIT 指令,使 MCU 處于 WAIT 功耗模式。在 WAIT 模式下,內(nèi)部 CPU 的時鐘被關(guān)閉,但內(nèi)部總線時鐘并不停止,定時器仍在工作。MCU 還可以執(zhí)行與定時器相關(guān)的工作。如果程序允許所有中斷,則任何中斷和外部復(fù)位均可將 MCU 從WAIT 模式“喚醒”。
程序中運(yùn)行 STOP 指令,使 MCU 處于 STOP 功耗模式。在 STOP 狀態(tài)下,關(guān)閉 MCU 內(nèi)部時鐘,包括 CPU 的時鐘和內(nèi)部總線上的時鐘,MCU 內(nèi)部一切操作停止,只有外部復(fù)位及部分中斷可以“喚醒”MCU??梢浴皢拘选盨TOP 模式的中斷有鍵盤模塊、時基模塊等。
因此,系統(tǒng)選用 STOP 模式可以降低功耗。對于GP32 芯片,若措施得當(dāng),STOP 模式可以使得芯片工作電流降到 5 μA 左右[3]。
考慮到系統(tǒng)要有定時自行喚醒功能,因此要有記時功能,實現(xiàn)記時功能的有定時器模塊和定時基模塊,本系統(tǒng)采用系統(tǒng)自帶的定時基模塊。原因是定時器只能在 WAIT 模式下工作,在 STOP 模式下不可以工作。而定時基模塊采用外部晶振計數(shù),可以工作在 STOP 模式下。經(jīng)過對比測試,采用 WAIT 模式,系統(tǒng)靜態(tài)功耗為 20 mA,而采用 STOP 模式,系統(tǒng)靜態(tài)功耗降為 3 mA。
(5)為了降低功耗,建議不用的引腳接地,并定義為輸入。關(guān)閉所有不用的 IO 口,將 IO 口接地;需要使用的 IO 口保持?jǐn)?shù)據(jù)不變。
由于單片機(jī)的工作常常會受到來自外界電磁場的干擾,造成程序的“跑飛”,而陷入死循環(huán),程序的正常運(yùn)行被打斷,則單片機(jī)控制的系統(tǒng)無法繼續(xù)工作,容易造成整個系統(tǒng)陷入停滯狀態(tài),發(fā)生不可預(yù)料的后果,因此要采用“看門狗”模塊,并定時喂食?!翱撮T狗”模塊分為軟件看門狗和硬件看門狗, 本例使用 MAX713 芯片作為看門狗芯片,MAX713 芯片要求 1.6 s 內(nèi)喂食 1 次。考慮到系統(tǒng)使用時環(huán)境復(fù)雜,程序采用 0.5 s 喂食 1 次的方法,防止因某次喂食未成功,而引發(fā)意外復(fù)位。因此,定時基程序采取每 0.5 s 發(fā)生 1 次中斷,來給看門狗喂食。
系統(tǒng)在接收數(shù)據(jù)時,需要安排好看門狗喂食時間。一般采用的方式為,在接受數(shù)據(jù)之前,首先給看門狗喂食,等待接收傳感器發(fā)送的第一個數(shù)據(jù)。第一個數(shù)據(jù)接收后,看門狗再次喂食,并對接收到的數(shù)據(jù)進(jìn)行校驗,如果接收正確,接收下面的數(shù)據(jù),由于數(shù)據(jù)數(shù)量有限,全部接收完畢,不超過 0.5 s,期間不需要給看門狗喂食,數(shù)據(jù)接收完畢,再次看門狗喂食。如果接收錯誤,放棄本次接收,重新發(fā)送命令等待下一次接收數(shù)據(jù)。這樣做,可有效防止接收到錯誤數(shù)據(jù)或由于接收不到數(shù)據(jù)引起“死等”,而出現(xiàn)死機(jī)的現(xiàn)象。
數(shù)據(jù)轉(zhuǎn)換器系統(tǒng)已于 2008 年 12 月安裝在西安水情分中心的黑峪口和大峪口 2 個站點(diǎn),傳感器的長度分別為 4800 和 9600 mm,并通過驗收,目前運(yùn)行狀態(tài)可靠、良好。2009 年 5 月 傳感器采集的黑峪口水位過程線如圖3 所示,大峪口站 2009 年 5 月部分天數(shù) 8點(diǎn)來報的采集和人工觀察數(shù)據(jù)對比如表2 所示。
圖3 西安水情分中心黑峪口水位過程線
表2 自報數(shù)據(jù)與實測數(shù)據(jù)對比表(大峪口) cm
由表2 可以看出,誤差范圍保持在 ±1 cm 之間,屬于正常誤差范圍。該系統(tǒng)能夠采集穩(wěn)定、正確的實時數(shù)據(jù),可以在野外應(yīng)用。
本系統(tǒng)主要是針對感應(yīng)式數(shù)字水位傳感器設(shè)計的數(shù)據(jù)轉(zhuǎn)換裝置,具有針對性強(qiáng),開發(fā)周期短,可移植性強(qiáng)等特點(diǎn)。由于針對性強(qiáng),因此涵蓋的內(nèi)容少,可以快速開發(fā)用于工程應(yīng)用。其他 RS-232、RS-485 或 SDI-12 通訊接口的傳感器均可直接采用本系統(tǒng)的硬件,而軟件部分只需要針對不同傳感器的通訊協(xié)議稍做修改即可。
在設(shè)計的過程中,有些特別之處,如采用WAIT 模式來替代 STOP 模式,用可控電源取代直接提供電源以降低功耗,看門狗的設(shè)置等。在試驗測試過程中,發(fā)現(xiàn)串口接收數(shù)據(jù)采用查詢方式比采用中斷接收方式,穩(wěn)定性要增強(qiáng)。系統(tǒng)在功能較少時,串口接收完全可以用取代中斷接收數(shù)據(jù)來提高系統(tǒng)的穩(wěn)定性。另外還可以對系統(tǒng)進(jìn)一步改進(jìn),可以將多種傳感器集成在同一系統(tǒng)中,通過 PC 軟件或者手持編程器實現(xiàn)對系統(tǒng)的設(shè)置以適應(yīng)不同的傳感器,增強(qiáng)系統(tǒng)的可擴(kuò)展性和靈活性。
[1]呂迎春. 感應(yīng)式數(shù)字水位傳感器穩(wěn)定性、可靠性的研究[D]. 江西:太原理工大學(xué),2005,5.
[2]太原理工天成科技股份有限公司. TC401 感應(yīng)式數(shù)字水位傳感器用戶手冊[X]. 太原:太原理工天成科技股份有限公司,2008.
[3]王宜懷,劉曉升. 嵌入式應(yīng)用技術(shù)基礎(chǔ)教程[M]. 北京:清華大學(xué)出版社,2007,11.