電子設計 發表於 2018-09-03 11:06:17
引言
當前,有很多的企業是採用佩戴工作證來完成門禁管理,而且還是採用傳統的人工方式完成,不僅容易被人混入,且沒有記錄,存在各種人為的失誤。同時,市場上門禁系統存在傳輸距離受限制、性能不佳等問題。
隨著嵌入式技術日新月異的發展,以及乙太網技術的普及,使得基於乙太網的嵌入式產品越來越多,發展也越來越快。本文研究的就是採用乙太網傳輸數據和射頻晶片識別智慧卡相結合的門禁系統,相對於傳統的門禁系統,乙太網解決了傳輸距離上的問題。其次,採用了基於80C51內核的射頻晶片PN532,使得性能更加穩定。其工作的基本原理是先將智慧卡放在門禁系統上,系統讀取數據並傳送給主晶片STM32進行處理,主晶片處理後再通過乙太網協議LwIP將數據從ENCN8J60傳輸給伺服器。
1 門禁系統硬體組成
門禁系統主要由意法半導體公司的主控晶片STM3H、Microchip公司的乙太網控制器ENC28J60和NXP公司的射頻晶片PN532組成。
門禁系統結構組成如圖1所示。主晶片STM32通過乙太網協議棧LwIP將數據傳輸到ENC28J60,然後可以通過網線與伺服器直接連接進行通信,也可以通過路由器再連接到伺服器。在非接觸式卡通信方面,STM32通過頻率為1MHz的SPI接口與PN532相連。
1.1 STM32外圍電路設計
本系統採用意法半導體公司以Cortex—M3為內核的32位微處理器STM32F103為主控晶片,其主頻為72 MHz,內部集成存儲空間為256K的Flash和64K的SRAM,還包含I2C、SPI、I2S、USART、CAN、ADC、看門狗等。性價比在同類產品中十分突出。硬體連接如圖2所示。
在調試時我們採用SWD取代JTAG,因為SWD不僅引腳更少,而且在高速模式下更加可靠。
1.2 射頻晶片PN532硬體電路設計
PN532是NXP公司推出的一個高度集成的非接觸式讀寫晶片,它包含80C51微控制器內核,集成了13.56 MHz下的各種主動/被動式非接觸通信方法和協議。支持ISO14443A/14443B協議。工作距離超過75 mm。接收來自天線的信號並對該數據按照ISO14443規定的幀格式處理數據。
PN532支持三種通信方式:SPI、I2C、HUS。由於我們採用SPI方式與主控晶片STM32進行通信,所以I0和I1分別設置為0和1。
PN532外圍電路結構如圖3所示。
1.3 乙太網控制器ENC28J60硬體設計
主控晶片ENC28J60是帶有行業標準串行外設接口(Serial Peripheral Interface,SPI)的獨立乙太網控制器。它可作為任何配備有SPI的控制器的乙太網接口。ENC28J60符合IEEE802.3的全部規範,採用了一系列包過濾機制以對傳入數據包進行限制。它還提供了一個內部DMA模塊,以實現快速數據吞吐和硬體支持的IP校驗和計算。與主控制器的通信通過兩個中斷引腳和SPI實現,數據傳輸速率高達10 Mb/s。
兩個專用的引腳用於連接LED,進行網絡活動狀態指示。
應當注意的是,當從ENC28J60讀取多個數據時,即使不需要主控晶片STM32輸出的數據,每讀取一個數據前也要向SPI發送緩衝器寫一個數據用來啟動SPI的接口時鐘。
ENC28J60典型應用電路如圖4所示。
2 系統軟體設計
2.1 乙太網協議LwIP
LwIP是瑞士計算機科學院開發的小型開源的TCP/IP協議棧。由於它只需要十幾K的RAM和40K左右的ROM就可以運行,所以很適合在硬體資源並不充裕的嵌入式系統中使用。
LwIP屬於比較鬆散的通信機制,通過共享內存的方式實現應用層與底層協議之間的通信。它提供了三種API:①RAM API,②LwIP API,③BSD API。
其中的RAM API其缺點就是代碼不易於理解,開發難度大,其優點是相對於其他兩種方式佔用的資源少,效率更加高,更適合於對於資源相對少的嵌入式使用,所以我們採用RAM API方式進行編寫。
在TCP/IP傳輸層中有TCP和UDP兩種協議,TCP提供IP環境下數據的可靠傳輸,UDP提供的是不可靠傳輸,由於門禁系統中必須要求傳輸數據的正確,所以採用TCP。圖5是LwIP下的TCP處理流程框圖。
RAM API把協議棧和應用程式放在一個進程裡,該函數基於函數回調技術,下面是LwIP的部分關鍵配置和代碼。
(1)LwIP配置
在LwIP的配置文件lwipopts.h中修改如下地方。
是否使用作業系統,我們不用,所以填寫為1:
#define NO_SYS 1
配置heap的大小:
#define MEM_SIZE
配置pool的大小
#define PBUF_POOL_SIZE
#define PBUF_POOL_BUFSIZE
以上三個配置佔據了LwIP協議棧大部分的內存,需要根據自己的需要修改成合適的值。
(2)LwIP代碼
①分別設置IP位址,子網掩碼和網關:
IP4_ADDR(&ipaddr,192,168,2,28);
IP4_ADDR(&netmask,255,255,255,0);
IP4_ADDR(&gw,192,168,2,254);
②初始化底層函數,也就是配置MAC地址,初始化ENC28J60,配置最大輸出單元等:
low_level_init(netif);
③連接遠程主機,當連接建立,就會調用第4個參數Conn_Back:
tcp_connect(TCP_pcb,&ipaddr,1026,Conn_back);
④當有新的數據接收到時調用的回調函數:
tcp_recv(TCP_pcb.tcp_recv_callback);
⑤伺服器成功接收到數據後調用的回調函數:
tcp_sent(TCP_pcb,tcp_sent_callback);
⑥處理錯誤的回調函數:
tcp_err(pcb,CMD_conn_err);
⑦是否接收到數據:
ethernetif_input(&enc28j60);
通信一旦結束或者出現異常狀況後,一定要使用pbuf_free()函數釋放pbuf,避免內存的浪費。還有一點要注意的是,系統在正常運行的過程中,定時器函數tcp_fasttmr()和tcp_slowtmr()函數必須以固定的時間間隔被規律地調用。
2.2 門禁系統軟體架構與設計
門禁系統的主要流程如圖6所示,每次重新啟動後,首先初始化相關寄存器,初始化各個模塊,確定已經連接伺服器,然後進入程序主循環。
首先監測是否需要調用LwIP內部的快速定時器和慢速定時器。然後監測伺服器是否有斷開,如果斷開則重新連接伺服器,沒有斷開的話則檢測是否有智慧卡,有的話接收卡中信息進行處理然後發送給伺服器。
結語
本文對使用STM32為主控晶片的門禁系統的硬體和軟體架構進行了相應的描述,對於文中所涉及的晶片和乙太網協議的使用具有指導意義,能夠較大幅度地降低成本,同時門禁系統的使用會更加穩定,傳輸距離更長。
打開APP閱讀更多精彩內容聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴