林峰 劉林偉 馮陳偉
【摘要】 本文利用MCU STM32和電容式指紋傳感器FPC1011C2設計一個自動指紋識別系統。STM32通過SPI接口控制FPC1011C采集指紋圖像,并通過串口將指紋數據傳輸至上位機,在PC端完成指紋識別。該系統能可靠地實現高質量的指紋圖像采集和快速的指紋識別。該采集系統具有自動檢測指紋、結構簡單、使用方便的特點。
【關鍵詞】 指紋采集 STM32 FPC1011C
一、引言
隨著網絡技術和通信技術的發展,傳統的個人身份鑒別手段已不能完全滿足現代社會經濟活動和社會安全防范系統的需要,人們越來越多地把目光轉向生物識別技術,如指紋,虹膜,臉型,聲音,掌紋等。在眾多生物識別技術中,指紋由于其高穩定性,唯一性,采集方便,實用性強等特殊優勢[1],備受用戶青睞。指紋識別已經廣泛應用于司法、門禁、考勤、金融、社保和戶籍等安防和身份認證領域。指紋識別系統的組成由指紋采集和指紋識別兩部分組成。指紋采集是指紋識別的前提,其關鍵是選擇一款性能優越,價格合適,使用方便的指紋傳感器。眾多開發者使用瑞典FingerPrint Cards公司的電容式面裝指紋傳感器FPC1011F和FPC1011C系列[2][3][4][5]。本文使用FPC1011C2和ST公司的STM32107VCT,STM32通過SPI接口進行指紋采集,并通過串口將采集到的指紋圖像發送至上位機,在上位機端實現指紋識別。
二、FPC1011C的硬件特性
一般半導體使用直接測量法,探測到的手指信號微弱,造成指紋圖像不穩定。而FPC1011C使用發射式測量法,增強探測信號,可采集到高質量的指紋圖像。它具有以下主要特點:抗靜電大于15KV,耐磨高達100萬次,工作電壓為2.5v或3.3v,傳感器陣列為152x200點,分辨率為363dpi,內置8位模數轉換器,高速的SPI接口。
2.1 采集原理
FPC1011C內部的功能框圖如圖1所示。它屬于電容式傳感器,內部包含一個152行200列的傳感器陣列,當手紙按壓傳感器表面,所有金屬電極充當一個電容板,接觸傳感器表面的手指充當另一個電容板,器件表面的保護層作為兩極板的絕緣層。指紋紋理的凹凸會在傳感器陣列上產生變化的電容,引起二維陣列上電壓的變化。通過采樣保持電路以及A/D轉換器,獲得高質量的指紋圖像。每次通過讀取傳感器內部FIFO的SPI指令捕獲8個像素,逐次捕獲可完成一行指紋數據的采集,捕獲完所有的行便形成一幅完整的指紋圖像。可以通過設置內部相關寄存器的值改變指紋圖像的尺寸。
2.2 寄存器及指令
在SPI模式下,通過指令對FPC1011C的寄存器進行讀寫操作,完成對FPC1011C的設置以及指紋數據的采集。共有14條讀寫指令和9個控制寄存器。主要的寄存器以及指令功能如下:(1)STATUS寄存器:包含FIFO的狀態信息;(2)DRIVC寄存器:設置連接驅動電壓幅度的大小;(3)ADCREF寄存器:設置AD轉換的動態范圍;(4)SENSEMODE寄存器:選擇測試模式。正常工作模式下,該寄存器應被清楚。(5)SPISTAT:包含SPI接口的狀態信息。(6)SPI指令,指令代碼和功能描述如表1所示。
2.3 SPI時序
在指紋采集電路中,FPC1011C被設置為從機。在SPI從模式中,傳感器支持的傳輸模式為MODE0,即CPOL=0,CPOH=0,如圖2所示。
具體的時序要求如下:①在數據傳輸中,SCS保持低電平;②MOSI線上的數據在SCK的上升沿被采樣;③SCK在空閑狀態時,可為高電平,也可為低電平;④MISO線上的數據在SCK的下降沿發生變化;⑤最高位先被移出,最低位最后被移出;⑥一次接收和發送的數據長度都是8位。
FPC1011C通過SPI執行讀寫寄存器命令的時序如下圖3和圖4所示。
寫寄存器時,主機首先發送命令字節,然后是參數字節。讀寄存器時,主機首先發送讀取命令和相應參數,然后FPC1011C在SPI_DO上返回1個或多個數據。
三、基于FPC1011C的指紋采集系統
3.1 系統硬件結構
本指紋采集系統以ST半導體的STM32107F為核心處理器。STM32107F是基于第二代ARM Cortex-M3內核的微控制器是為嵌入式系統應用而設計的高性能、低功耗的互聯型32位微處理器,集成了各種高性能的標準接口如以太網,USB,CAN,I2C,I2S等,適用于儀器儀表、工業控制、通訊系統等領域。主頻達到72MHz,能夠滿足指紋采集的需求。該控制器自帶串行外圍SPI接口,能夠很方便地與FPC1011C連接。具體硬件電路如圖5所示。將PA口配置成SPI功能,PA5,PA6,PA7分別作為SPI的SCK,MISO,MOSI與FPC1011C的CK,DI和DO連接,PB9作為FPC1011C的片選信號。為了將采集到的指紋數據發送至PC,將STM32的USART通過MAX232與PC連接。
3.2 指紋采集軟件
指紋采集的總體流程如圖6所示。首先進行STM32和FPC的初始化,然后檢測是否有指紋,如果有,則讀取指紋數據并傳送至上位機,完成指紋的采集。STM32的SPI相關的初始化代碼為:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
SPI_Cmd(SPI2, DISABLE); //必須先禁能,才能改變MODE
SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex; //雙工模式
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //SPI主模式
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //8bit數據
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //CLK空閑時為高電平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //CLK上升沿采樣
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //片選用軟件控制
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;//SPI頻率為18MHz
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //高位在前
SPI_InitStructure.SPI_CRCPolynomial = 7; //crc7,stm32spi帶硬件ecc
SPI_Init(SPI2, &SPI_InitStructure);
SPI_Cmd(SPI2, ENABLE);
FPC1011的初始化主要完成三個控制寄存器的設置,包括將DRIVE寄存器設置為127,將ADCREF設置為2,將SENSEMODE寄存器設置為0。前兩數值個將影響到采集指紋圖像的質量,其具體值根據應用可能不同。設置的具體過程為首先通過SPI發送指令碼,再發送指令參數。
初始化后通過SPI發送RD_SENSOR指令啟動FPC1011開始采集指紋。然后查詢是否有指紋數據。有兩種查詢的方法,一種是在發出RD_SENSOR指令后等待365-409個時鐘,另一種是通過反復發送RD_SPISTAT指令,判斷STATUS寄存器的DA位是否為1。如果為1,說明FPC的存儲陣列中已有指紋數據可用。然后通過RD_SPIDATA指令讀取指紋數據。在默認情況下,如果沒有改變XREAD和YREAD的值,則將讀取整個傳感器的152×200個字節的數據。讀取后可將指紋數據通過串行口發送至PC,以便PC端的指紋識別系統進行指紋數據的進一步處理,實現指紋的識別。
上位機端可利用Visual C++ 或Visual Studio等開發環境編寫相應的上位機界面。上位機接收串口的數據,形成BMP圖像并顯示。本設計采集到的指紋數據如圖7和圖8所示。
3.3 指紋識別
指紋識別流程包括預處理,特征點提取和匹配。在取到指紋圖像之后,由于采集的過程及采集設備的限制,難免會使圖像受到“污染”,同時原始圖像信息量過高,不利于存儲,所以需經過預處理的過程。預處理是由于主要包含指紋圖像的平滑,濾波,增強,二值化,細化等步驟。經過預處理后,提取出有用的特征點,進而通過對特征點進行匹配,最后輸出比較結果。
四、總結
本文利用STM32F107和FPC1011C實現一個指紋采集系統,在PC端實現指紋識別,利用PC的高性能,滿足實時工作的需求。同時STM32強大的控制能力使得本系統可以應用于門禁,保險等諸多領用領域。本文接下來要做的是將指紋識別算法移植到DSP上,構建一個基于DSP的嵌入式的指紋識別系統。c
參 考 文 獻
[1] 李春雷. 指紋識別算法的研究及基于FPGA的硬件實現. 山東:山東大學,2005
[2] 楊磊,張文超,秦會斌. 基于STM32的指紋識別系統設計與實現[J]. 機電工程,2011(12),1531-1535
[3] 陳淑靜,馬天才. 基于FPC1011F的指紋識別系統[J]. 山西電子技術,2009(5),32-33
[4] 李爽. 基于FPC1011C電容式傳感器指紋識別系統設計[J]. 信息與電腦,2010(6),30-31
[5] 陳文燕,劉良勇. 指紋傳感器FPC1011F在ARM9指紋采集系統中的應用[J]. 中北大學學報(自然科學版),2011(5),642-647