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