,
(東華大學(xué) 機(jī)械工程學(xué)院,上海 201620)
隨著社會(huì)經(jīng)濟(jì)的高速發(fā)展以及人們生活水平的提高,人們對(duì)于生鮮產(chǎn)品的保鮮提出了更高的要求,冷鏈的應(yīng)用越來越多。在很多連鎖超市,生鮮品占所有商品的比重快速上升。對(duì)生鮮品管理水平的高低已經(jīng)成為連鎖超市競爭的關(guān)鍵[1],而生鮮品保鮮的關(guān)鍵取決于其冷鏈水平。制冷壓縮機(jī)是冷鏈系統(tǒng)中的核心設(shè)備,壓縮機(jī)內(nèi)的氣體壓力和耗電量是兩個(gè)非常重要的參數(shù),氣壓大小預(yù)示著壓縮機(jī)是否處于正常的工作狀態(tài)[2],耗電量則關(guān)系到超市冷鏈的運(yùn)營成本。為了獲知這兩個(gè)參數(shù),超市管理人員需要按時(shí)去現(xiàn)場抄表,但是現(xiàn)場抄表容易漏采,實(shí)時(shí)性差,且造成人力資源的浪費(fèi)。為了更好地對(duì)壓縮機(jī)的壓力和耗電量進(jìn)行實(shí)時(shí)監(jiān)控,并在壓力數(shù)據(jù)異常時(shí)及時(shí)采取措施控制現(xiàn)場設(shè)備,設(shè)計(jì)了一種基于STM32的超市冷鏈監(jiān)控報(bào)警系統(tǒng)。
系統(tǒng)總體設(shè)計(jì)如圖1所示。MCU作為系統(tǒng)的核心,負(fù)責(zé)協(xié)調(diào)管理控制各模塊工作,采用基于Cotex-M3內(nèi)核的STM32F103VCT6,它可以提供5路串口通信,2個(gè)DMA控制器,3個(gè)12位精度的ADC控制器,多達(dá)80個(gè)通用I/O口[3]。GPRS模塊負(fù)責(zé)數(shù)據(jù)的傳輸,短信的收發(fā),通過STM32的串口發(fā)送AT指令進(jìn)行控制。TFTLCD用于顯示采集到的數(shù)據(jù)及系統(tǒng)運(yùn)行狀態(tài),由STM32的FSMC控制器驅(qū)動(dòng)。蜂鳴器用于壓力異常時(shí)進(jìn)行報(bào)警,繼電器用于控制現(xiàn)場制冷設(shè)備的開關(guān)。系統(tǒng)網(wǎng)絡(luò)拓?fù)鋱D如圖2所示。系統(tǒng)與上位機(jī)的連接方式為TCP連接,系統(tǒng)每隔固定時(shí)間采集一次數(shù)據(jù),通過MCU對(duì)采集的數(shù)據(jù)進(jìn)行處理,將結(jié)果通過GPRS網(wǎng)絡(luò)和Internet發(fā)送到上位機(jī)。當(dāng)壓縮機(jī)壓力超出設(shè)定的閾值時(shí),系統(tǒng)可以在現(xiàn)場實(shí)現(xiàn)蜂鳴器報(bào)警,并將報(bào)警短信發(fā)送到用戶手機(jī)。用戶可以回復(fù)規(guī)定格式的短信控制現(xiàn)場繼電器的狀態(tài)來實(shí)現(xiàn)現(xiàn)場設(shè)備的開關(guān)。同時(shí),上位機(jī)也將收到報(bào)警信息,用戶也可通過上位機(jī)發(fā)送數(shù)據(jù)包控制現(xiàn)場設(shè)備的開關(guān)。
圖1 系統(tǒng)總體設(shè)計(jì)框圖
圖2 系統(tǒng)網(wǎng)絡(luò)拓?fù)鋱D
該系統(tǒng)的硬件電路是以STM32F103VCT6芯片為核心進(jìn)行設(shè)計(jì)的,該芯片是由ST公司推出的一款高性能、低功耗、低價(jià)格的單片機(jī),內(nèi)含256 Kb的Flash,48 Kb的SRAM,最大主頻可以達(dá)到72 MHz[4]。為了實(shí)現(xiàn)各個(gè)功能,分模塊設(shè)計(jì)各部分電路,下面分別介紹該系統(tǒng)中的幾個(gè)重要電路。
圖3是其中一路壓縮機(jī)壓力信號(hào)采集電路。首先通過惠斯通電橋?qū)毫Φ淖兓D(zhuǎn)變?yōu)殡妷篣i的變化。Ui的計(jì)算公式如下:
(1)
式(1)中,Ui為電橋?qū)毫π盘?hào)轉(zhuǎn)變?yōu)榈牟罘蛛妷盒盘?hào),R1、R2、R3、R4為組成電橋的4個(gè)電阻,其中R1、R3為壓敏電阻,Vcc為電橋的供電電壓。
上式得到的電壓Ui比較微弱,屬于mV級(jí)信號(hào),需要用差動(dòng)放大器對(duì)其進(jìn)行放大,一般選用低功耗、低失調(diào)、低溫漂的差動(dòng)放大器[5],本文采用儀表放大器AD623。它的放大倍數(shù)滿足下列公式:
(2)
式(2)中,Uo是AD623芯片OUT端輸出電壓, 是AD623參考電壓,Ui是差分輸入電壓,Rg是可變阻抗,通過調(diào)整Rg的阻值即可改變AD623的增益。
調(diào)整Rg阻值為1.01 kΩ,使AD623的增益為100倍。調(diào)整R5使AD623的參考電壓為0.8 V。最終使AD623的OUT端輸出電壓大小為0.8~4 V。
為了提高電路的供電電壓范圍,改善輸出電壓的穩(wěn)定性,采用V/I變換芯片XTR115將Uo轉(zhuǎn)變?yōu)?~20 mA的線性電流信號(hào),在電流回路上串聯(lián)150 Ω的精密電阻R7提取電壓,最終得到A點(diǎn)的電壓范圍是0.6~3 V,將其接入STM32單片機(jī)的ADC1通道對(duì)應(yīng)的引腳進(jìn)行采集。STM32的ADC1的16路通道分別對(duì)應(yīng)引腳PA0~PA7,PB0,PB1,PC0~PC5。
圖3 壓力數(shù)據(jù)采集電路
為了實(shí)現(xiàn)對(duì)電能表進(jìn)行自動(dòng)抄表,要求電能表具有RS485接口,支持DL/T645-1997多功能電能表通信規(guī)約[6],波特率為1 200 bps。如圖4所示,STM32單片機(jī)的串口4通過SP3485芯片將TTL電平轉(zhuǎn)變?yōu)镽S485電平,RS485通信方式為半雙工,以一主多從的方式采集各個(gè)電能表的數(shù)據(jù)。為減少信號(hào)的回波與反射,在A、B端接入120 Ω的終端匹配電阻R21。
將4個(gè)電能表鏈接在RS485總線上即可實(shí)現(xiàn)與STM32的通信。抄表時(shí), STM32通過485總線發(fā)送事先規(guī)定的數(shù)據(jù)幀,電能表收到數(shù)據(jù)幀后,若數(shù)據(jù)幀中的地址和電能表自身設(shè)定的參數(shù)相對(duì)應(yīng),則返回電能數(shù)據(jù)給STM32。RS485總線拓?fù)浞绞綉?yīng)為菊花鏈的方式,接線需用 RS485 通信專用的雙絞線。電能表的 “+” 端與RS485接口“A”端相連,“-”端與電能表RS485接口的“B”端相連,若無共地端,則可不接GND。
圖4 電能表數(shù)據(jù)采集電路
繼電器主要用于控制現(xiàn)場設(shè)備的開關(guān)。圖5是繼電器的原理圖。繼電器選用松樂繼電器,單刀雙擲開關(guān),采用光耦隔離,抗干擾性能好。將繼電器的輸入端IN1接到STM32的PD6口,控制PD6口輸出低電平,光耦導(dǎo)通,繼電器吸合, NO1導(dǎo)通;輸出高電平,光耦截止,繼電器釋放, NO1斷開。NC1與NO1狀態(tài)相反。
圖5 繼電器電路圖
GPRS模塊選擇SIMCOM公司生產(chǎn)的SIM900A,該模塊是雙頻的GSM/GPRS模塊,可以工作于EGSM 900 MHz和DCS 1 800 MHz兩個(gè)頻段[7]。它內(nèi)嵌TCP/IP協(xié)議,拓展的AT指令方便用戶的操作。控制該模塊僅需要電源端,接地端,開機(jī)端,狀態(tài)端,串口幾個(gè)引腳。該模塊引腳圖如圖6所示,PWON是電源端,它接入STM32的PD0引腳,控制PD0的電平高低的持續(xù)時(shí)間,可以開啟或關(guān)閉該模塊。STAT是狀態(tài)端,接入STM32的PE1引腳,用來指示該模塊的工作狀態(tài)。通過STM32的串口3向該模塊發(fā)送相應(yīng)的AT指令來實(shí)現(xiàn)對(duì)模塊的控制,如給某個(gè)手機(jī)用戶發(fā)送報(bào)警短信,給某個(gè)服務(wù)器端發(fā)送采集到的數(shù)據(jù)。同時(shí),當(dāng)模塊收到移動(dòng)數(shù)據(jù)或短信時(shí),模塊也可以通過串口向MCU發(fā)送數(shù)據(jù),MCU解析這些數(shù)據(jù),進(jìn)行相應(yīng)的操作。
圖6 GPRS模塊引腳圖
由于本系統(tǒng)任務(wù)數(shù)量較多,為了更好地對(duì)任務(wù)進(jìn)行管理,加快程序的開發(fā)進(jìn)度,提高系統(tǒng)的實(shí)時(shí)性,在程序中加入了μC/OS-II操作系統(tǒng)。μC/OS-II操作系統(tǒng)結(jié)構(gòu)小巧,具有良好的可移植性、可裁剪性,非常適合嵌入式開發(fā)[8]。
系統(tǒng)軟件主程序流程圖如圖7所示,初始化μC/OS-II系統(tǒng)后,創(chuàng)建一個(gè)初始任務(wù),在初始任務(wù)中按優(yōu)先級(jí)從高到低的順序創(chuàng)建圖中從左到右的5個(gè)任務(wù),設(shè)置好各個(gè)任務(wù)的堆棧大小,將程序的各部分功能分配到5個(gè)任務(wù)中,然后掛起初始任務(wù)并啟動(dòng)系統(tǒng)。
圖7 系統(tǒng)主程序流程圖
首先采集16路壓力數(shù)據(jù),先將ADC1的16路通道對(duì)應(yīng)的GPIO口設(shè)置為模擬輸入模式,然后配置ADC1工作于獨(dú)立模式,掃描模式,單次轉(zhuǎn)換模式,設(shè)置其為軟件觸發(fā)啟動(dòng),數(shù)據(jù)右對(duì)齊,通道數(shù)目為用戶設(shè)置的路數(shù)n(1~16),之后使能ADC并校準(zhǔn),然后在內(nèi)存中開辟一個(gè)類型為volatile unsigned short a[n][24]的二維數(shù)組,即每個(gè)通道的數(shù)值采集24次,配置ADC1為DMA傳輸,將ADC1數(shù)據(jù)寄存器的數(shù)據(jù)通過DMA通道傳給二維數(shù)組。傳輸完成后,首先將每個(gè)通道中的24個(gè)數(shù)據(jù)用冒泡排序的方法進(jìn)行大小排序,然后取中間的6個(gè)數(shù)據(jù)求平均值,得到精度較高的采樣值,由采樣值與STM32的參考電壓求得采集的電壓值,再通過電壓值與壓力值的函數(shù)關(guān)系求得壓力值。
然后采集4路電能表數(shù)據(jù),STM32通過串口4向RS485總線發(fā)送數(shù)據(jù)幀,等待電能表的應(yīng)答。數(shù)據(jù)幀的格式如表1所示。
表1 電能表數(shù)據(jù)幀結(jié)構(gòu)表
其中,地址域由低位地址在前,高位地址在后的6個(gè)字節(jié)組成,每個(gè)字節(jié)包含兩位BCD碼??刂拼a表明該幀數(shù)據(jù)的用途,這里是讀電能表數(shù)據(jù)。數(shù)據(jù)域包含數(shù)據(jù)標(biāo)識(shí)和密碼,發(fā)送方將其轉(zhuǎn)為余3BCD碼再進(jìn)行傳送。電表收到數(shù)據(jù)幀后,若與電表設(shè)定參數(shù)相匹配,便返回?cái)?shù)據(jù)幀,STM32收到返回幀后,對(duì)返回幀的數(shù)據(jù)域的值按字節(jié)進(jìn)行“減33H”操作,即得到電能表的當(dāng)前耗電值。
數(shù)據(jù)發(fā)送任務(wù)流程圖如圖8所示,首先初始化SIM900A模塊,然后向SIM900A模塊發(fā)送AT指令A(yù)T+CIPSTART=”TCP”,”IP地址”,”端口號(hào)”來使其與服務(wù)器建立TCP連接,若連接失敗,則重新初始化SIM900A模塊再次進(jìn)行連接,若連續(xù)三次失敗,則掛起看門狗的喂狗任務(wù),等待系統(tǒng)復(fù)位。若連接成功,STM32將處理后的數(shù)據(jù)通過串口3傳送給SIM900A模塊,SIM900A模塊自動(dòng)將數(shù)據(jù)上傳到指定IP地址的服務(wù)器。發(fā)送完成后,系統(tǒng)檢測是否收到服務(wù)器端的應(yīng)答,若收到,則表示發(fā)送成功;若沒有收到應(yīng)答,則重新發(fā)送數(shù)據(jù)。如果連續(xù)3次發(fā)送數(shù)據(jù)而沒有收到應(yīng)答,則重新初始化SIM900A模塊。此外,STM32不斷檢測SIM900A的數(shù)據(jù)寄存器和短信緩沖區(qū),若收到數(shù)據(jù)或短信,則讀取并解析,根據(jù)數(shù)據(jù)或短信的內(nèi)容控制繼電器的狀態(tài),實(shí)現(xiàn)對(duì)現(xiàn)場設(shè)備的開關(guān)。
本系統(tǒng)采用的是TCP連接,如果SIM900A模塊與服務(wù)器端長時(shí)間不通信會(huì)造成連接斷開,為了保持連接狀態(tài),系統(tǒng)會(huì)在單位時(shí)間內(nèi)向服務(wù)器端發(fā)送一個(gè)內(nèi)容為“ht”的心跳包。
圖8 數(shù)據(jù)發(fā)送任務(wù)流程圖
最后是LCD數(shù)據(jù)顯示任務(wù),顯示界面如圖9所示。顯示界面的設(shè)計(jì)分靜態(tài)界面與動(dòng)態(tài)界面設(shè)計(jì),靜態(tài)界面包括各個(gè)參數(shù)名稱,如復(fù)位次數(shù),CPU使用率,信號(hào)強(qiáng)度,與服務(wù)器連接狀態(tài),數(shù)據(jù)發(fā)送狀態(tài),GPRS模塊開關(guān)狀態(tài),16路通道壓力,4路220V開關(guān)量狀態(tài),2路繼電器狀態(tài),4路電能表數(shù)據(jù),動(dòng)態(tài)界面顯示這些參數(shù)的具體數(shù)值或狀態(tài),并在一定的時(shí)間刷新一次。通過μC/OS-II系統(tǒng)中的信號(hào)量來規(guī)范各個(gè)顯示任務(wù)的順序,避免造成沖突。利用函數(shù)LockLcd=OSSemCreate(1)創(chuàng)建了一個(gè)值為1的信號(hào),當(dāng)各個(gè)顯示任務(wù)需要執(zhí)行時(shí),需先調(diào)用函數(shù)OSSemPend(LockLCD,0,&err)請(qǐng)求該信號(hào),只有請(qǐng)求成功時(shí),才能獲得CPU的使用權(quán),進(jìn)而顯示數(shù)據(jù)。若有其他的顯示任務(wù)已經(jīng)請(qǐng)求成功該信號(hào)時(shí),當(dāng)前的幾個(gè)任務(wù)需等待,直到其它任務(wù)執(zhí)行完并調(diào)用函數(shù)OSSemPost(LockLCD)釋放信號(hào)量之后,處于最高優(yōu)先級(jí)的等待任務(wù)才能獲得CPU的使用權(quán)。
搭建好系統(tǒng)硬件框架并調(diào)試好程序后,開始進(jìn)行系統(tǒng)測試。以下分別進(jìn)行數(shù)據(jù)精確度,報(bào)警性能,數(shù)據(jù)傳輸3個(gè)方面的測試。
1)首先測試采集數(shù)據(jù)的準(zhǔn)確性,采用有機(jī)械儀表的壓力罐進(jìn)行測試,先將壓力路數(shù)設(shè)為一路,然后逐漸增加壓力罐的壓力,讀取壓力罐的機(jī)械儀表數(shù)值與系統(tǒng)LCD上顯示的數(shù)值,結(jié)果如表2所示。
表2 壓力數(shù)值比較表
由表2可知,系統(tǒng)顯示的數(shù)值與實(shí)際數(shù)值的誤差在1%以內(nèi),滿足要求。
2)然后進(jìn)行報(bào)警性能測試,首先設(shè)置好正常的壓力閾值為0~5 Bar,然后將壓力罐的壓力調(diào)整為6 Bar,此時(shí)系統(tǒng)蜂鳴器報(bào)警,上位機(jī)也收到報(bào)警信息,同時(shí)手機(jī)也收到報(bào)警短信,短信內(nèi)容為“DongHuaDaXue-WarningC2:6.01Bar”,提醒用戶名稱為“DongHuaDaXue”的監(jiān)測點(diǎn)的第二路壓力過大。為了對(duì)現(xiàn)場制冷設(shè)備進(jìn)行控制,可以回復(fù)內(nèi)容為“87654321-DongHuaDaXue-0-0”的短信,即“密碼-監(jiān)測點(diǎn)名稱-繼電器1的狀態(tài)-繼電器2的狀態(tài)”來控制繼電器的開關(guān)狀態(tài),發(fā)送短信后,發(fā)現(xiàn)兩路繼電器均調(diào)整為斷開狀態(tài),制冷設(shè)備斷電,符合要求。
3)最后進(jìn)行GPRS數(shù)據(jù)傳輸測試,開啟系統(tǒng)與上位機(jī),等待數(shù)據(jù)的采集與傳輸,測試結(jié)果如圖10所示。上位機(jī)每隔10秒會(huì)收到名稱為“ht”的心跳包,每隔1分鐘會(huì)收到采集到的各項(xiàng)數(shù)值,格式為“監(jiān)測點(diǎn)名稱;壓力路數(shù)n;第一路壓力狀態(tài)-第一路壓力數(shù)值~第n路壓力狀態(tài)-第n路壓力數(shù)值;電能表1的數(shù)值~電能表4的數(shù)值”,其中壓力狀態(tài)為“0”表示壓力沒有超出設(shè)定的閾值,為“1”表示超出設(shè)定的閾值。
圖9 LCD顯示界面圖 圖10 上位機(jī)接收數(shù)據(jù)圖
本文設(shè)計(jì)的基于STM32的超市冷鏈監(jiān)控報(bào)警系統(tǒng),經(jīng)測試精度較高,操作簡單,可靠耐用,且成本較低,穩(wěn)定性好。該系統(tǒng)可以有效減少超市管理人員去現(xiàn)場抄表的工作量,確保工作人員可以時(shí)刻監(jiān)測冷鏈的工作狀態(tài),并在必要的情況下遠(yuǎn)程操控現(xiàn)場設(shè)備。此系統(tǒng)可逐漸在超市冷鏈中推廣,有利于排除安全隱患,提高超市冷鏈的效益,確保超市冷鏈的安全運(yùn)行。
參考文獻(xiàn):
[1]張玉潔.連鎖超市生鮮品冷鏈物流優(yōu)化研究[J].教育教學(xué)論壇,2013,(6):147-148.
[2]林 輝.中小連鎖超市發(fā)展冷鏈之路[J].信息與電腦,2011(4):46-46,51.
[3]王佳權(quán).基于物聯(lián)網(wǎng)的智能鞋柜系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2017,43(3): 84-87.
[4]鄭優(yōu)訊,李宗伯.基于STM32微處理器的GPRS數(shù)據(jù)傳輸技術(shù)的研究[J].微型機(jī)與應(yīng)用,2012(21): 60-61,64.
[5]王 峰,夏 龍.壓力傳感器的二線制傳輸電路應(yīng)用設(shè)計(jì)及分析[J].傳感器世界,2001,7(5):25-28.
[6]儲(chǔ)昭碧,馮小英.基于ATT7022b的多功能電能表實(shí)現(xiàn)[J].儀表技術(shù)與傳感器,2008(9):26-28.
[7]曲麗娜.基于STM32的嵌入式GPRS網(wǎng)絡(luò)遠(yuǎn)程數(shù)據(jù)采集控制系統(tǒng)設(shè)計(jì)[J].煤炭技術(shù),2013(8):198-201.
[8]關(guān) 海,馮大政.μCOSⅡ在基于Cortex-M3核的ARM處理器上的移植[J].電子科技,2009(1):69-74.