APP下载

基于STM32和FPC1011C2的指纹采集系统

2014-09-15林峰刘林伟冯陈伟

中国新通信 2014年12期

林峰 刘林伟 冯陈伟

【摘要】 本文利用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的嵌入式的指纹识别系统。

参 考 文 献

[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