摘 要: 為了實現(xiàn)基于ARM的停車場車輛管理系統(tǒng),本文采用 Cortex?M3 內(nèi)核的 STM32 微控制器,以此為核心部署了超聲波模組作為車輛檢測器,液晶屏作為信息顯示器,步進(jìn)電機(jī)作為道閘控制器,以及智能卡讀寫器。為了便于管理員使用,在PC上用VB編寫了圖形界面,配合Access數(shù)據(jù)庫通過串口對系統(tǒng)進(jìn)行管理。測試系統(tǒng)功能結(jié)果能夠完成車輛在停車場的進(jìn)出場流程,由此驗證了該套低成本解決方案的可行性,實用性。
關(guān)鍵詞: ARM Cortex?m3; RFID; 停車場管理; VB
中圖分類號: TN964?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2014)02?0100?05
0 引 言
智能停車場管理系統(tǒng)是為了克服傳統(tǒng)停車場收費(fèi)管理系統(tǒng)人工收費(fèi)方式的缺點,推動停車收費(fèi)管理系統(tǒng)發(fā)展的高技術(shù)產(chǎn)物,此系統(tǒng)不僅可以有效地解決亂停亂放造成的交通混亂,而且可以促進(jìn)交通設(shè)施的正規(guī)化建設(shè),同時也盡可能地減少車主失車被盜的憂慮。另外,在技術(shù)方面,其高技術(shù)性匹配于現(xiàn)有其他智能化系統(tǒng),具有很好的開放性,易于與其他智能化系統(tǒng)組合成更強(qiáng)大的綜合系統(tǒng),順應(yīng)各種綜合方式的高級管理[1]。
本文所講述的一個智能停車場管理系統(tǒng),采用的是 Cortex?M3 內(nèi)核的 STM32 微控制器,以此為核心部署了超聲波模組作為車輛檢測器,液晶屏作為信息顯示器,步進(jìn)電機(jī)作為道閘控制器,以及智能卡讀寫器。為了便于管理員使用,在PC上用VB編寫了圖形界面,配合Access數(shù)據(jù)庫通過串口對系統(tǒng)進(jìn)行管理。
1 系統(tǒng)組成
系統(tǒng)框圖如圖1所示,停車場車輛管理系統(tǒng)以微控制器為核心,由車輛檢測器,非接觸式IC卡讀卡器,液晶顯示屏,道閘,以及PC機(jī)組成。車輛檢測器負(fù)責(zé)檢測是否有出入車輛。微控制器通過非接觸式IC卡讀卡器向IC卡中寫入或者從卡中讀取數(shù)據(jù)。液晶屏顯示停車信息給用戶。道閘控制器控制車輛的出入。管理員通過PC機(jī)向管理系統(tǒng)發(fā)布命令同時接收系統(tǒng)反饋的信息。本系統(tǒng)以微控制器為核心對組成系統(tǒng)的一系列外圍設(shè)備進(jìn)行控制,同時負(fù)責(zé)與PC機(jī)進(jìn)行通信反饋信息與接收命令。系統(tǒng)在空閑時不斷檢測是否有車輛準(zhǔn)備進(jìn)入或者離開停車場,一旦檢測到車輛,立即進(jìn)入IC卡讀寫準(zhǔn)備流程,讀取IC卡內(nèi)信息,根據(jù)用戶類型決定下一步動作。同時顯示屏顯示相關(guān)信息給用戶,微控制器與PC機(jī)進(jìn)行通信。上述動作全部完成后,微控制器向道閘控制模塊發(fā)出命令,對符合入場條件或者符合離場條件的用戶放行。
2 硬件設(shè)計
系統(tǒng)總體框架如圖2所示。在主板上有一顆STM32微控制器,在主板上引出了接口用來與外圍設(shè)備進(jìn)行連接,其中主板與PC機(jī)之間采用9針串口連接。MCU與智能卡讀寫板之間通過SPI接口進(jìn)行通信。主板與其他設(shè)備之間采用GPIO進(jìn)行連接。
道閘檢測器采用超聲波模組構(gòu)成,道閘控制器采用步進(jìn)電機(jī)??紤]到STM32的I/O口提供的電流較小,在主板與步進(jìn)電機(jī)之間連接了步進(jìn)電機(jī)驅(qū)動板來提供較大電流。智能卡讀寫板上集成了專用智能卡讀寫芯片與天線。超聲波測距模組部分由發(fā)射端和接收端兩部分組成。發(fā)射端由超聲波諧振載波調(diào)理電路和超聲波發(fā)射探頭組成。接收端由超聲波回波接收處理電路和超聲波接收探頭組成。320×240圖形點陣液晶屏由UC8239s液晶控制芯片驅(qū)動,利用一個電壓跟隨電路產(chǎn)生驅(qū)動液晶的電壓來實現(xiàn)節(jié)能操作。智能卡讀寫模塊采用MFRC522智能卡讀寫芯片驅(qū)動讀寫器天線完成與Mifare1 s50智能卡的通信。步進(jìn)電機(jī)部分采用ULN2003驅(qū)動陣列進(jìn)行驅(qū)動。串口部分通過STM32 UART實現(xiàn)與PC機(jī)的通信。
3 軟件設(shè)計
3.1 停車場管理系統(tǒng)工程結(jié)構(gòu)
停車場管理系統(tǒng)的軟件結(jié)構(gòu)主要分為三層,如圖3所示。最底層為STM32固件庫,這一層由ST公司提供,為程序編寫人員對STM32的內(nèi)核與片內(nèi)外設(shè)的控制提供了基本的接口。這一層對應(yīng)圖3(b)lib目錄下的所有文件。向上一層為外圍設(shè)備驅(qū)動程序,停車場管理系統(tǒng)需要一些必要的外設(shè)以完成其職能,這一層提供了對這些必要外設(shè)的驅(qū)動。這一層對應(yīng)圖3(b)中extern_lib目錄下的文件。需要注意的是在這些文件中,RTC.c、systick.c不對應(yīng)一個實在的外設(shè),而是對應(yīng)STM32的片內(nèi)外設(shè)。
圖3 工程目錄結(jié)構(gòu)
最上層是主函數(shù)對應(yīng)圖3(b)中User目錄下的main.c,在這一層中對停車場管理系統(tǒng)的邏輯功能進(jìn)行了實現(xiàn)。
3.2 程序模塊介紹
3.2.1 超聲波驅(qū)動的實現(xiàn)
在本系統(tǒng)中,利用STM32內(nèi)部的通用定時器TIM2進(jìn)行定時,配合GPIO_PA1輸出電壓的翻轉(zhuǎn)來產(chǎn)生40 kHz方波。當(dāng)超聲波發(fā)送出去后利用TIM3進(jìn)行計時,當(dāng)接收到回波時Back_Pulse引腳產(chǎn)生一個高電平信號,利用這個信號作為觸發(fā)信號通過GPIO_PA2觸發(fā)外中斷來停止TIM3,此時TIM3中的計數(shù)值可通過換算得到時間t。即可計算出距離d。需要注意的是,在超聲波剛剛發(fā)出的時候,由于電路的電器特性導(dǎo)致模塊的Back_Pulse引腳馬上就會出現(xiàn)高電平,這種現(xiàn)象稱之為回波干擾,顯然如果由這個信號觸發(fā)中斷就會導(dǎo)致測距的錯誤。為了避免回波干擾,需要在超聲波發(fā)出后延時一小段時間再打開中斷來接收真正的反射波。如果認(rèn)為空氣中聲波的速度為340 m/s,經(jīng)過估計需要延時十個微秒即可,隨著測量距離的增大可以適當(dāng)增加這個延時的時間以保證消除回波干擾。
相關(guān)函數(shù)如下:
UltraSonic_40KGeneration_Configuration(void)
這個函數(shù)對TIM2,GPIO_PA1,以及定時器中斷函數(shù)進(jìn)行了初始化。
TIM2_IRQHandler(void)
在這個函數(shù)中實現(xiàn)了電平的翻轉(zhuǎn)。
UltraSonic_BackPulseResponseConfiguration(void)
這個函數(shù)初始化了TIM3,外中斷。
EXTI2_IRQHandler(void)
這個函數(shù)是由GPIO_PA2觸發(fā)的外中斷服務(wù)函數(shù)。
u32 Ultra_SonicMeasureDistance(void)
這個函數(shù)返回了距離d。
3.2.2 液晶屏顯示的實現(xiàn)
在工程中通過lcd.c提供了驅(qū)動液晶屏的基本函數(shù)。在本系統(tǒng)中為了在液晶屏上顯示信息,需要直接使用的函數(shù)如下:
void STM3210B_LCD_Init(void) LCD初始化
void LCD_Clear(u16 Color) 清屏
void LCD_SetBackColor(vu16 Color) 設(shè)定背景顏色
void LCD_SetTextColor(vu16 Color) 設(shè)定文字顏色
void LCD_DisplayStringLine(u8 Line, u8 *ptr)
在指定行顯示字符串
void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii)
在指定位置顯示一個字符
3.2.3 RC522讀寫mifare1
由于不能直接對mifare1卡進(jìn)行操作,所有對mifare1卡的操作是通過RC522進(jìn)行的。RC522對外提供了三種接口,分別是SPI,I2C,UART。本系統(tǒng)采用軟件模擬SPI的方式對RC522進(jìn)行操作,如圖4所示。
在 SPI 通信中 MFRC522 模塊用作從機(jī)。SPI 時鐘 SCK 由主機(jī)產(chǎn)生。數(shù)據(jù)通過 MOSI線從主機(jī)傳輸?shù)綇臋C(jī);數(shù)據(jù)通過 MISO 線從 MFRC522 發(fā)回到主機(jī)。 MOSI 和 MISO 傳輸每個字節(jié)時都是高位在前。MOSI 上的數(shù)據(jù)在時鐘的上升沿保持不變,在時鐘的下降沿改變。MISO 也與之類似,在時鐘的下降沿,MISO 上的數(shù)據(jù)由 MFRC522來提供,在時鐘的上升沿數(shù)據(jù)保持不變。
RC522驅(qū)動介紹如下:
Void SPIWriteByte(u8 SPIData) 向RC522寫數(shù)據(jù)
U8 SPIReadByte(void) 從RC522讀數(shù)據(jù)
Void WriteRawRC(u8 Address, u8 value)
向RC522指定寄存器寫入數(shù)據(jù)
U8 ReadRawRC(u8 Address) 從RC522指定寄存器讀出數(shù)據(jù)
Char PcdComMF522(unsigned char Command,
Unsigned char *pInData,
Unsigned char InLenByte,
Unsigned char *pOutData,
Unsigned int *pOutLenBit)
向Mifare1卡傳送命令與數(shù)據(jù)
Char PcdReset(void) 復(fù)位RC522
Char M500PcdConfigISOType(unsigned char type)
配置通信標(biāo)準(zhǔn)
Char PcdRequest(unsigned char req_code,unsigned char *pTagType) 請求Mifare卡響應(yīng)
Char PcdAnticoll(unsigned char *pSnr) 反沖撞函數(shù)
Char PcdSelect(unsigned char *pSnr) 選擇卡片
Char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)
對將要操作的數(shù)據(jù)塊的密碼進(jìn)行認(rèn)證
Char PcdRead(unsigned char addr,unsigned char *pData)
從數(shù)據(jù)塊讀出數(shù)據(jù)
Char PcdWrite(unsigned char addr,unsigned char *pData)
向數(shù)據(jù)塊寫入數(shù)據(jù)
Char PcdHalt(void) 令Mifare1卡進(jìn)入休眠狀態(tài)
3.2.4 步進(jìn)電機(jī)驅(qū)動
步進(jìn)電機(jī)是將電脈沖信號轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元件。在非超載的情況下,電機(jī)的轉(zhuǎn)速、停止的位置只取決于脈沖信號的頻率和脈沖數(shù),而不受負(fù)載變化的影響,即給電機(jī)加一個脈沖信號,電機(jī)則轉(zhuǎn)過一個步距角。對于步進(jìn)電機(jī)只有周期性的誤差而無累積誤差等特點。步進(jìn)電機(jī)必須加驅(qū)動才可以運(yùn)轉(zhuǎn), 驅(qū)動信號必須為脈沖信號,沒有脈沖的時候, 步進(jìn)電機(jī)靜止,如果加入適當(dāng)?shù)拿}沖信號,就會以一定的角度(稱為步角)轉(zhuǎn)動。轉(zhuǎn)動的速度和脈沖的頻率成正比。
3.2.5 串口通信
串口通信的實現(xiàn)分為兩部分,一部分是STM32的串口發(fā)送與接收,另一部分是PC的串口的發(fā)送與接收。對于PC機(jī)上發(fā)送與接收將在后面介紹,這里著重介紹STM32串口的發(fā)送與接收。
STM32傳送數(shù)據(jù)時采用查詢的方式,在接收PC傳來的數(shù)據(jù)時采用中斷的方式,這是因為PC是不定時發(fā)送數(shù)據(jù)的,如果采用查詢的方式接收數(shù)據(jù),STM32將無法執(zhí)行其他任務(wù)。采用中斷就可以釋放STM32的CPU資源,PC發(fā)送出的數(shù)據(jù)會觸發(fā)串口接收中斷,在中斷服務(wù)函數(shù)中進(jìn)行數(shù)據(jù)的接收。
3.2.6 軟件界面
在停車場管理系統(tǒng)中為了便于停車場管理員更好的工作,需要有一個面向管理員的終端,這個終端為管理員提供必要的信息,同時管理員可以通過這個終端對整個系統(tǒng)進(jìn)行控制。所以在本文中采用VB 6.0設(shè)計了一個簡單的界面,如圖5所示。
在客戶端的右側(cè)可以設(shè)定STM32 RTC的當(dāng)前時間,在左側(cè)可以設(shè)定新的停車費(fèi)率,同時會顯示當(dāng)前停車場的剩余車位。
3.2.7 串口處理
在PC端,軟件設(shè)計的核心思想是:通過VB提供的交互控件讓停車場管理員可以方便地查看需要的信息和向系統(tǒng)發(fā)布命令。程序通過VB提供的MSComm控件控制PC上的串口與STM32之間進(jìn)行通信。MSComm控件提供兩種處理通信的方式:一是事件驅(qū)動方式,一是查詢方式。
(1) 事件驅(qū)動方式。事件驅(qū)動通信是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時需要得到通知,例如,在串口接收緩沖區(qū)中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 線上一個字符到達(dá)或一個變化發(fā)生時。在這些情況下,可以利用 MSComm控件的OnComm事件捕獲并處理這些通信事件。OnComm 事件還可以檢查和處理通信錯誤。所有通信事件和通信錯誤的列表,參閱 CommEvent 屬性。在編程過程中,就可以在OnComm事件處理函數(shù)中加入自己的處理代碼。這種方法的優(yōu)點是程序響應(yīng)及時,可靠性高。每個MSComm 控件對應(yīng)著一個串行端口。如果應(yīng)用程序需要訪問多個串行端口,必須使用多個 MSComm 控件。
(2) 查詢方式。查詢方式實質(zhì)上還是事件驅(qū)動,但在有些情況下,這種方式顯得更為便捷。在程序的每個關(guān)鍵功能之后,可以通過檢查 CommEvent 屬性的值來檢測事件和通信錯誤。如果應(yīng)用程序較小,并且是自保持的,這種方法可能是更可取的。例如,如果寫一個簡單的電話撥號程序,則沒有必要對每接收一個字符都產(chǎn)生事件,因為惟一等待接收的字符是調(diào)制解調(diào)器的“確定”響應(yīng)。
事件驅(qū)動方式是處理串行通信的一種有效的方法,它可以利用OnComm事件捕獲并處理通信中發(fā)生的事件或錯誤,實時性較強(qiáng)。而查詢方式是在程序通過查詢CommEvent屬性值來判斷通信過程中的事件或錯誤,這種方式適合于應(yīng)用程序較小、實時性要求不高的系統(tǒng)中。
MSComm控件進(jìn)行串行通信的一般步驟為:
(1) 設(shè)置通信對象、通信端口號及其他屬性;
(2) 設(shè)定通信協(xié)議;
(3) 打開通信端口,進(jìn)行數(shù)據(jù)的傳送;
(4) 關(guān)閉通信端口。
當(dāng)設(shè)定好MSComm控件的各個屬性后就可以讓串口正常工作了,但是僅僅能工作是不夠的,能工作意味著可以實現(xiàn)在PC機(jī)與STM32之間傳遞數(shù)據(jù),但是PC與STM32通信的目的在于根據(jù)傳送的信息進(jìn)行不同的操作。所以這就需要人為的對通信的內(nèi)容賦予一定的意義,在本系統(tǒng)的設(shè)定中PC與STM32之間每次傳遞定長的16字節(jié)數(shù)據(jù),第一個字節(jié)的內(nèi)容代表命令,后面的字節(jié)是命令所要處理的數(shù)據(jù)。PC與STM32通過串口收到16個字節(jié)的數(shù)據(jù)后會檢查第一個字節(jié)的命令,根據(jù)命令進(jìn)行不同的操作。
STM32要執(zhí)行的命令:
c 改變費(fèi)率
t設(shè)定STM32當(dāng)前時間
y 允許長期用戶進(jìn)入
n 拒絕長期用戶進(jìn)入
PC端要執(zhí)行的命令:
r 更新剩余車位
a 對長期用戶的卡片有效期進(jìn)行認(rèn)證
e 在PC上保存入場時間
d 在PC上保存離場時間
f 在PC上保存繳費(fèi)金額
3.2.8 數(shù)據(jù)庫處理
為了驗證長期用戶智能卡的有效性,需要根據(jù)卡片內(nèi)用戶編號在數(shù)據(jù)庫中查詢其有效日期,并與當(dāng)前日期相比較。本系統(tǒng)使用Access軟件進(jìn)行數(shù)據(jù)管理,通過Visual Basic提供的ADO控件對Access中的內(nèi)容進(jìn)行調(diào)用。
4 系統(tǒng)性能測試
連接好線路后將STM32上電,打開車場管理終端.vbp點擊工程?引用?勾選Microsoft Activex Data Objects 2.5 Library。添加好Access數(shù)據(jù)庫路徑后點擊測試連接進(jìn)行測試。本系統(tǒng)可以進(jìn)行費(fèi)率設(shè)定、系統(tǒng)時間設(shè)定,有進(jìn)場流程和出場流程,將卡放在讀卡器上可以顯示繳費(fèi)金額。圖6是繳費(fèi)金額畫面。
圖6 繳費(fèi)金額顯示
5 結(jié) 論
本文從硬件與軟件的角度闡述了基于ARM的停車場管理系統(tǒng)的設(shè)計與實現(xiàn),以ARM微控制器為核心配以適當(dāng)?shù)耐鈬O(shè)備構(gòu)建起來的停車場管理系統(tǒng),大大減少了停車場管理員的勞動強(qiáng)度,提高了通行的效率。停車場作為未來智能交通系統(tǒng)中的重要一環(huán),對其進(jìn)行電子化改造以適應(yīng)未來基于物聯(lián)網(wǎng)的智能交通系統(tǒng)是非常必要的。本文從系統(tǒng)功能的角度出發(fā),制定了工作的目標(biāo),然后緊緊圍繞著目標(biāo)進(jìn)行系統(tǒng)設(shè)計,在設(shè)計的過程中由于功能復(fù)雜性的考慮放棄了應(yīng)用范圍最廣,價格低廉的51單片機(jī),選擇了目前非常流行的ARM核心的微控制器STM32。事實證明這樣的選擇是非常正確的,豐富的外設(shè)使得功能的實現(xiàn)與硬件資源之間的矛盾得到了有效的解決,同時ST公司針對STM32推出的固件庫大大縮短了開發(fā)的周期,又由于程序員不用自己直接對寄存器進(jìn)行修改,而通過相應(yīng)的函數(shù)進(jìn)行操作,確保了程序的穩(wěn)定性,也極大地增加了程序的可讀性。
參考文獻(xiàn)
[1] 冀紅舉.基于ARM的停車場管理系統(tǒng)[J].微計算機(jī)信息,2010(11):110?111.
[2] 吳剛.停車場管理系統(tǒng)的結(jié)構(gòu)化分析與設(shè)計[J].計算機(jī)時代,2011(5):61?63.
[3] 方俊,谷冰冰.基于無線射頻識別技術(shù)的停車場管理系統(tǒng)設(shè)計[J].計算技術(shù)與自動化,2010(3):92?95.
[4] 郭穩(wěn)濤,何怡剛.基于RFID的智能停車場管理系統(tǒng)的研究與設(shè)計[J].通信與信息處理,2010(6):60?64.
[5] 張輝.RFID超高頻讀寫器的設(shè)計[J].中國高新技術(shù)企業(yè),2012(9):38?40.
[6] 周曉,王曉華.射頻識別(RFID)技術(shù)原理與應(yīng)用實例[M].北京:人民郵電出版社,2006.
[7] 韓愛麗,李亞.基站芯片RC522的14443A讀卡器設(shè)計[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2006(12):35?40.
[8] 劉文利.智能停車場管理系統(tǒng)分析[J].中小企業(yè)管理與科技,2011(28):233?234.
[9] 席旻.物聯(lián)網(wǎng)在智能停車場管理系統(tǒng)的應(yīng)用[J].電腦知識與技術(shù),2011(27):6621?6622.
[10] 鄭麗香.無卡票式停車場管理系統(tǒng)及其軟件實現(xiàn)[J].電腦知識與技術(shù),2010(30):8519?8520.