白龍溫,賈 銘
(1.天津機(jī)電職業(yè)技術(shù)學(xué)院,天津 300401;2.河北工業(yè)大學(xué),天津 300401)
隨著數(shù)字信息化時(shí)代到來、經(jīng)濟(jì)和科技的不斷發(fā)展,人們對生活品質(zhì)有了更高的追求,生活的各個(gè)領(lǐng)域整日趨凸顯高效便捷和智能化,這就使得電子儲(chǔ)物柜在商場、體育館、車站、超市等地方應(yīng)用越來越廣泛。但這些傳統(tǒng)儲(chǔ)物柜存在如下缺點(diǎn):1)一般使用密碼條、鑰匙進(jìn)行存取,存在存取效率低下、密碼條攜帶不方便且易丟失、信息無法監(jiān)控等缺點(diǎn);2)使用MCU作為主控芯片并直接驅(qū)動(dòng)柜門,受限于芯片的管腳數(shù)量,不能很好擴(kuò)展大量儲(chǔ)物柜。在人數(shù)眾多且校園卡(一卡通)廣泛普及的高校當(dāng)中,電子儲(chǔ)物柜的需求量大、使用率高,使用嚴(yán)格的校園卡識(shí)別等方法,可以高效、安全地進(jìn)行儲(chǔ)物柜的管理和使用,為此在校園的圖書館、食堂、體育場等人流密集場所配置一種校園卡識(shí)別的低成本、易擴(kuò)展、響應(yīng)快的智能儲(chǔ)物柜將具有積極的意義[1]。
為此,本文設(shè)計(jì)一款基于STM32和FPGA的可擴(kuò)展智能儲(chǔ)物柜,通過配置多塊擴(kuò)展接口板可快速擴(kuò)展儲(chǔ)物柜數(shù)量,使用RFID識(shí)別技術(shù)的校園卡打開指定物品柜,該系統(tǒng)會(huì)自動(dòng)保存儲(chǔ)物柜使用記錄,實(shí)現(xiàn)了監(jiān)控等功能。
整體系統(tǒng)框圖如圖1所示,主要分為核心處理板、擴(kuò)展接口板、上位機(jī)平臺(tái),以及校園卡RFID讀卡器,220 V交流電源適配器,柜門的電磁動(dòng)作機(jī)構(gòu)等其他部分。
上位機(jī)登記學(xué)生校園卡號(hào)和儲(chǔ)物柜號(hào)碼,并通過TCP協(xié)議將卡號(hào)等信息通過網(wǎng)口下發(fā)到核心處理板并存儲(chǔ)。學(xué)生使用校園卡后,擴(kuò)展接口板解析RFID讀卡器發(fā)來的卡號(hào)信息并通過串口轉(zhuǎn)發(fā)到核心處理板,核心處理板接收該卡號(hào)信息進(jìn)行查找比對,并通知對應(yīng)的擴(kuò)展接口板打開相應(yīng)的儲(chǔ)物柜,同時(shí)將卡號(hào)等信息上發(fā)上位機(jī)進(jìn)行記錄保存,從而實(shí)現(xiàn)信息監(jiān)控功能。
核心處理板的主控芯片為ST公司的STM32F407,該單片機(jī)基于ARM公司的Cortex-M4內(nèi)核設(shè)計(jì),時(shí)鐘頻率可達(dá)168 MHz,自帶1MB FLASH和192 KB RAM,具有高性能、低成本、低功耗的優(yōu)點(diǎn),是嵌入式應(yīng)用設(shè)計(jì)中良好的選擇[2]。為保證讀卡信息的實(shí)時(shí)響應(yīng)和快速TCP通信,MCU運(yùn)行UCOS-II實(shí)時(shí)操作系統(tǒng)和LwIP協(xié)議棧。UCOS-II是一個(gè)實(shí)時(shí)可剝奪系統(tǒng)內(nèi)核的嵌入式操作系統(tǒng),包括資源同步、資源管理、任務(wù)之間通信,多達(dá)64個(gè)任務(wù),通過任務(wù)間的不同優(yōu)先級(jí)來調(diào)度任務(wù)運(yùn)行。LwIP是一個(gè)小型開源的輕量級(jí)TCP/IP的協(xié)議棧,由于其對RAM和ROM需求較低,在中低端嵌入式系統(tǒng)中應(yīng)用廣泛[3-4]。
擴(kuò)展接口板以FPGA為控制核心,F(xiàn)PGA具有并行效率高、IO管腳多、使用靈活、擴(kuò)展能力強(qiáng)等特點(diǎn)。選用型號(hào)為Altera公司的CycloneIII系列的EP3C25F324,普通IO管腳達(dá)215個(gè),每個(gè)IO管腳即可驅(qū)動(dòng)一個(gè)電磁動(dòng)作機(jī)構(gòu),可擴(kuò)展儲(chǔ)物柜數(shù)量達(dá)200個(gè)。FPGA還進(jìn)行RFID卡的協(xié)議解析,可以大大減輕MCU解析協(xié)議造成的資源和時(shí)間開銷,減少系統(tǒng)響應(yīng)時(shí)間,并且后期更新擴(kuò)展新校園RFID卡協(xié)議和增加其他擴(kuò)展功能也更方便。
一塊核心處理板SRAM存儲(chǔ)信息可達(dá)上萬條,配置多塊擴(kuò)展接口板即可大量擴(kuò)展儲(chǔ)物柜,各個(gè)擴(kuò)展接口板之間通過串口通信,最終由擴(kuò)展接口板0緩存所有卡號(hào)信息并和核心處理板通信。
其中RFID讀卡器通信協(xié)議為26位韋根協(xié)議,電源適配器為整個(gè)系統(tǒng)提供二次電源12 V和5 V。
核心處理板硬件方案如圖2所示。
存儲(chǔ)模塊包括FLASH和SRAM,F(xiàn)LASH為學(xué)生卡號(hào)等信息存儲(chǔ)模塊,STM32將接收到卡號(hào)信息存儲(chǔ)到該FLASH中,型號(hào)為Winbod公司的SPI接口FLASH,W25Q128。當(dāng)系統(tǒng)啟動(dòng)后,將FLASH中學(xué)生卡號(hào)信息加載到SRAM中,STM32通過FSMC接口訪問SRAM,以便快速檢索卡號(hào)信息,SRAM型號(hào)為IS62 WV51216,原理圖見圖3。
DP83848為網(wǎng)口的外部PHY芯片,采用RMII接入形式,相比MII的方式可減少一半的接入信號(hào)數(shù)量,網(wǎng)口模塊原理圖見圖4。
擴(kuò)展接口板硬件方案如圖5所示。
FPGA的程序存儲(chǔ)FLASH選型為M25P16,時(shí)鐘和存儲(chǔ)器配置原理圖見圖6。
電源輸入主要包括12 V和5 V,12 V為繼電器和RFID讀卡器供電。繼電器為隔離驅(qū)動(dòng)模塊,是驅(qū)動(dòng)柜門的電磁動(dòng)作機(jī)構(gòu)。
5 V電源模塊為整板其他模塊供電,采用TI公司的TPS650243,可輸出1.8 V,3.3 V,1.2 V,2.5 V等多路電壓,分別供給FPGA的核電壓、AUX電壓、接口電壓和其他外設(shè)器件等,其原理圖見圖7。
系統(tǒng)軟件按照功能模塊分為核心處理板STM32軟件、擴(kuò)展接口板FPGA軟件和PC上位機(jī)軟件,工作流程圖如圖8所示。
當(dāng)RFID讀卡器讀取卡號(hào)后,以韋根協(xié)議的形式發(fā)送給FPGA,卡號(hào)由PID(2字節(jié))和HID(1字節(jié))組合而成3個(gè)字節(jié),F(xiàn)PGA解析出PID和HID后通過串口UART1發(fā)送給STM32,同時(shí)STM32根據(jù)PID和HID讀取SRAM對應(yīng)地址內(nèi)柜門號(hào)碼,如存在則將該柜門號(hào)碼通過串口UART2發(fā)送給FPGA,F(xiàn)PGA譯碼后驅(qū)動(dòng)對應(yīng)號(hào)碼繼電器,從而打開對應(yīng)柜門。同時(shí)STM32通過TCP告知上位機(jī)卡號(hào)等信息,以便上位機(jī)監(jiān)控記錄。
FPGA軟件使用Verilog語言,以Modelsim 10.0C作為代碼邏輯仿真軟件,最終使用Quartus II 13.1作為編譯和調(diào)試平臺(tái)。程序主要包括韋根協(xié)議解析模塊,F(xiàn)IFO,UART1串口模塊,UART2串口模塊和IO口輸出等模塊。對于如圖1所示的擴(kuò)展接口板0,其他擴(kuò)展接口板控制的串口1和串口2均和擴(kuò)展接口板0的預(yù)留串口通信,故擴(kuò)展接口板0的FPGA程序需單獨(dú)增加調(diào)度緩存模塊,負(fù)責(zé)緩沖記錄各個(gè)擴(kuò)展接口板發(fā)來的卡號(hào)信息,并通過串口UART1和UART2與核心處理板通信。其程序結(jié)構(gòu)如下圖見圖9。
STM32軟件采用C語言設(shè)計(jì),使用Keil軟件作為編譯和調(diào)試工具。STM32接收到信息更新后,存儲(chǔ)所有學(xué)生的卡號(hào)和對應(yīng)柜門號(hào)到FLASH中。每次更新完會(huì)員信息后,自動(dòng)重新啟動(dòng)系統(tǒng),以便將FLASH中會(huì)員信息加載到SRAM中。為了快速方便檢索,直接將會(huì)員卡號(hào)作為SRAM地址,對應(yīng)柜門號(hào)作為數(shù)據(jù)內(nèi)容。
由于STM32運(yùn)行實(shí)時(shí)操作系統(tǒng),可以多任務(wù)搶占式工作,其軟件流程如圖3所示,主要包括初始化和多任務(wù)設(shè)計(jì)兩部分[5]。
初始化包括內(nèi)容如下:
1)系統(tǒng)初始化以及外設(shè)自檢:系統(tǒng)時(shí)鐘和內(nèi)存初始化等,中斷分組配置,串口初始化,F(xiàn)lash和SRAM初始化,F(xiàn)lash和SRAM自檢。
2)學(xué)生信息加載:通過SPI接口讀取FLASH內(nèi)學(xué)生信息并更新到SRAM中。
3)UCOSII初始化:操作系統(tǒng)核心程序包括任務(wù)控制塊初始化,任務(wù)就續(xù)表等初始化。
4)LWIP協(xié)議棧初始化:TCP/IP內(nèi)核協(xié)議初始化,PHY芯片DP8838驅(qū)動(dòng)配置(IO初始化、時(shí)鐘初始化、中斷初始化、寄存器配置),IP地址,子網(wǎng)掩碼和默認(rèn)網(wǎng)關(guān)設(shè)置等。
5)客戶端線程初始化:創(chuàng)建TCP客戶端任務(wù),創(chuàng)建TCP連接,綁定端口,進(jìn)入監(jiān)聽模式,收發(fā)數(shù)據(jù)。該任務(wù)基于NETCONN進(jìn)行TCP/IP編程,NETCONN結(jié)構(gòu)類似標(biāo)準(zhǔn)BSD Socket,對各種類型連接函數(shù)做了統(tǒng)一封裝,相當(dāng)于提供了一個(gè)API調(diào)用接口,方便配合操作系統(tǒng)使用,方便快速大量數(shù)據(jù)通信[6]。
6)起始任務(wù)創(chuàng)建:創(chuàng)建其它全部任務(wù)。
7)啟動(dòng)多任務(wù):開始Start任務(wù),UCOSII 根據(jù)任務(wù)優(yōu)先級(jí)和掛起等狀態(tài)自動(dòng)切換任務(wù)調(diào)度。
多任務(wù)設(shè)計(jì)如下,按照各個(gè)任務(wù)的優(yōu)先級(jí)由先及后排列(見圖10)。
①TCP客戶端任務(wù)(task1):TCP客戶端啟動(dòng)進(jìn)入監(jiān)聽模式,接收和發(fā)送TCP數(shù)據(jù)。
②SRAM查找任務(wù)(task2):接收STM32串口UART1信息,搜索SRAM地址查找對應(yīng)柜門號(hào),并通過STM32串口UART2輸出,并通過TCP上傳卡號(hào)。
③FLASH更新任務(wù)(task3):更新學(xué)生卡號(hào)等信息到FLASH。
④工作正常任務(wù)(task4):狀態(tài)工作指示燈
⑤開始任務(wù)(task5):Start任務(wù)
使用C++作為編程語言,應(yīng)用了QT框架和SQlite數(shù)據(jù)庫。SQLite數(shù)據(jù)庫是一款輕型的文件型數(shù)據(jù)庫,主要應(yīng)用于嵌入式領(lǐng)域,支持跨平臺(tái)移植,而且得到了QT很好的默認(rèn)支持[8]。SQlite數(shù)據(jù)庫用于記錄學(xué)生信息,包括卡號(hào)、姓名、柜號(hào)、手機(jī)號(hào)、開柜時(shí)間等信息。上位機(jī)作為服務(wù)器,其TCP接口通信使用QT框架下的SOCKET類進(jìn)行編程,用于向STM32更新卡號(hào)信息和接收存儲(chǔ)其發(fā)來的卡號(hào)使用信息,并添加系統(tǒng)時(shí)間作為開柜時(shí)間記錄,更新到數(shù)據(jù)庫當(dāng)中。其調(diào)試界面如圖11所示。
本系統(tǒng)充分利用Ucos-II實(shí)時(shí)操作系統(tǒng)多任務(wù)和LwIP輕量型協(xié)議棧的優(yōu)勢,并利用FPGA并行處理效率高、易擴(kuò)展等特點(diǎn),實(shí)現(xiàn)了RFID卡韋根協(xié)議解析、系統(tǒng)和上位機(jī)TCP協(xié)議互傳、快速搜索學(xué)生信息、儲(chǔ)物柜數(shù)量擴(kuò)展等功能,系統(tǒng)工作狀態(tài)良好,響應(yīng)迅速,滿足設(shè)計(jì)需要。但需注意的是本系統(tǒng)中采用RFID卡號(hào)作為SRAM的尋址地址,尋址地址存在限制。例如本文選取FSMC_NE3作為SRAM的片選信號(hào),STM32內(nèi)部尋址空間為0x6800_0000到0x6BFF_FFFF,26位韋根協(xié)議ID卡占用3字節(jié),正好滿足需求。若RFID卡協(xié)議后期更改為32位,則不能使用卡號(hào)作為SRAM尋址地址,只能使用柜門號(hào)作為尋址地址,ID卡號(hào)作為內(nèi)容,這樣需遍歷SRAM才能找到對應(yīng)ID卡號(hào),會(huì)增加系統(tǒng)時(shí)間開銷。
承德石油高等??茖W(xué)校學(xué)報(bào)2022年1期