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