基于ARM的指纹识别门禁系统设计

合集下载

基于ARM的指纹识别门禁系统设计方案

基于ARM的指纹识别门禁系统设计方案

基于ARM的指纹识别门禁系统设计方案
现代社会高速发展,很多场合需要身份确认,传统的身份识别技术已经不能满足社会要求。

人的身体特征具有不可复制性,因此人们开始研究生物识别技术,而指纹具有唯一性、终生不变性、难于伪造等特点,安全性高,因而得到了广泛应用。

在一些机要部门,如银行、宾馆、机房等一般都安装有门禁系统,门禁系统是为保障人们生活、工作及财产安全,对重要通道的出入口进行管理与控制的系统,基于指纹识别技术的门禁系统是一项高科技安全设施,提高了系统的安全性。

ARM 作为一种嵌入式系统处理器,具有高性能、低功耗、低成本等特点,因而在工业控制领域、成像和安全产品方面得到了广泛应用。

本文介绍了基于嵌入式ARM9 体系结构的指纹识别原理与处理方法,以及指纹识别门禁系统的软硬件设计方法。

1 指纹识别原理及处理方法
指纹识别技术通过分析指纹的局部特征,从中抽取详尽的特征点,从而可靠地确认个人身份。

指纹识别技术主要涉及四个功能:读取指纹图象、提取特征、保存数据和比对。

首先从获取的指纹图像上找到“特征点”,然后根据特征点的特性建立用户活体指纹的指纹特征数据(一种单向的转换,可以从指纹图像转换成特征数据但不能从特征数据转换成为指纹图像)。

由于两枚不同的指纹不会产生相同的特征数据,所以通过对所采集到的指纹图像的特征数据和存放在数据库中的指纹特征数据进行模式匹配,从而计算出它们的相似程度,最终得到两个指纹的匹配结果,根据匹配结果来鉴别用户身份。

1.1 指纹图像的采集
光学取像有着悠久的历史,它可以追溯到上世纪70 年代,依据的是光的全反射原理。

现在一般采用光学指纹传感器来采集指纹,取得指纹具有图像。

基于ARM的指纹识别门禁系统的设计

基于ARM的指纹识别门禁系统的设计

摘要随着数字化和网络化的发展,传统的门禁系统由于鉴别方式、速度和性能等方面的限制,很难满足安全可靠和网络化的控制需求。

由于识别技术的不断成熟,基于人体生理特征的身份识别系统逐渐被人们开始采用,目前,从实用的角度看,指纹识别技术要比其它生物识别技术更安全和方便,这是因为人的指纹具有唯一性、不变性以及贴身性的特点。

传统的门禁控制器常采用单片机开发,利用串行通信接口向远程上位机传送数据,多个门禁控制器一般组成RS485网络,通信线路专用且不易于实现网络控制和远程控制,而基于TCP/IP网络通信的门禁系统通过局域网传递数据,很容易实现远程控制和分布式管理。

论文首先分析了门禁系统的研究背景、意义及国内外的发展现状,然后介绍了指纹识别网络门禁系统的总体结构,阐述了系统各个重要功能模块的硬件资源。

论文研究了指纹识别算法,包括指纹图像预处理和指纹图像的特征提取和匹配,重点分析了指纹图像分割法,利用灰度梯度和灰度方差的结合设置一个合适的局部阈值对指纹进行分割。

然后,阐述了门禁控制系统软件的总体设计,指纹图像采集、GoAhead Web Server的应用以及系统运用TCP/IP实现系统门禁控制器和上位机PC之间的网络通信。

关键词:嵌入式,门禁,指纹识别,Linux,TCP/IPBased on the ARM of fingerprint identification entrance guardsystem designAbstractWith the development of digitalization and network,the traditional access cont- rol system is difficult to meet the reliability and network control requirements because of the identification methods,speed and performance.The human physiology chara- cteristic’s status recognition is widely used based on the progress of the recognition t- echnology.At present,looking from the practical angle,the fingerprint recognition technology must be safer than other physiology character recognition,this is because person’s fingerprint is unique,invariable as well as the next to the skin.The traditi- onal entrance guard controller often used the Single-Chip Microcomputer and the ser- ial port for transmitting data to the position machine.Some entrance guard controllers compose by the RS485 network generally,it makes it’s no easy to realize the network and the remote control because of the co mmunication link’s special-purpose,but net- working entrance guard system based on the TCP/IP is easy to realize the remote con- trol and the distributional management.Firstly,the paper analyzed the development of the access control system and it’s background and significance,and then introduced the overall structure of the system,listied the important function modules of the hardware resources and drivers.Thirdly,the paperstudied the fingerprint recognition algorithm which mainly includes the fin- gerprintimage pretreatment and the feature extraction and matches.In this paper,it’s focuedon analysis of fingerprint image segmentation algorithm,using of the gray gra- dientand the gray variance combination,and then seting up a suitable local threshold forsegmentation.At last,the paper elaborated the access control system’s so ftware design which is focus on collecting fingerprint image acquisition,GoAhead Web Se- rv er’s applications and the communication between the accesscontrol system contro- ller,and the client PC based on TCP/IP protocol.Key Words:Embedded System,Access Controller,Fingerprint Recognition,Linux,TCP/IP目录1.绪论 (1)1.1 课题的研究背景及意义 (1)1.2国内外研究现状和发展 (1)1.3 本文的研究内容 (2)2.系统硬件设计 (2)2.1 系统总体设计 (2)2.1.1 系统概述及设计原则 (2)2.1.2 系统组成及功能 (3)2.2 嵌入式主控模块设计 (5)2.2.1 ARM微处理器与地址空间映射 (5)2.2.2 NAND FLASH单元 (5)2.2.3 SDRAM单元 (6)2.2.4 USB及USB摄像头单元 (7)2.3 界面显示接口模块设计 (8)2.4 指纹识别模块设计 (9)3.指纹识别算法研究及实现 (11)3.1 指纹识别的理论基础 (11)3.2 指纹图像的预处理 (12)3.2.1 背景分割 (12)3.2.2 指纹图像增强 (12)3.2.3 图像二值化 (13)3.2.4 细化及其后处理 (13)3.3 指纹图像的特征提取及匹配 (13)3.3.1 指纹图像的特征点提取 (13)3.3.2 指纹图像的特征匹配 (13)4.门禁控制系统软件设计 (14)4.1 门禁控制系统总体软件设计 (14)4.2 指纹图像采集 (15)4.3 网络通信 (16)4.3.1 TCP/IP协议 (16)4.3.2 系统网络通信软件设计 (16)4.3.3 GoAhead嵌入式Web服务器 (18)5.结论 (18)参考文献 (20)致谢 (21)1.绪论1.1 课题的研究背景及意义随着科学技术的不断进步,人们对现代化办公和生活场所提出了更高层次的安全管理需求,普通的门锁系统和手工出入管理已经不符合现代人的实际需求。

基于ARM和POE的网络指纹门禁系统设计.

基于ARM和POE的网络指纹门禁系统设计.

基于ARM和POE的网络指纹门禁系统设计摘要设计基于ML67Q5250和PoE的指纹门禁系统的实现方案,阐述了系统组成结构及工作原理、软硬件设计。

该系统具有高速指纹识别、指纹数据保护、以太网供电、结构简单、低功耗、低成本等优点。

可以满足指纹门禁系统的需求,具有较好的应用前景。

关键词 ARM;PoE;指纹识别;门禁系统提出了一种基于ARM和POE的嵌入式系统的指纹门禁设计方案。

该方案以ML67Q5250处理器及其外围模块作为硬件平台,以嵌入式Linux作为操作系统,构成整个系统,该系统应用以太网供电,实现指纹门禁系统的功能,无需专门供电线路,该设计的实现,具有广泛的市场应用前景。

1 系统的结构整个系统由4个部分构成,FPS200传感器模块、ML67Q5250指纹识别模块、以太网供电模块、以太网数据通信模块组成硬件电路。

软件方面包括Linux嵌入式软件、后台支持软件,实现网络操作,指纹识别和控制,报警提示,电源管理等功能的网络指纹门禁系统。

2 系统的硬件设计2.1 ML67Q5250指纹识别设计ML67Q5250微处理器属于ARM7系列,ML67Q5250指纹识别处理器具有快速傅里叶变换功能和高性能的指纹识别处理。

采用DFT方式的指纹识别算法,高速识别时间0.8 s以内,高识别精度FAR<0.001%、FRR<1.0%,内置闪存中的可注册指数15个,预定扩展至45个,装备禁止指纹数据错误读出的安全功能,具有可与外部设备连接的各种接口。

另外,该处理器能够实现外部存储器控制,可以存储大量的指纹信息,系统的另一个特点是:指纹识别模块通过网络和后台数据库进行通信,该处理器有大量的通用输入输出端口,为以后的功能扩展提供了广阔的空间。

应用ML67Q5250软核处理器的解决方案,打造具有综合功能、可配置的缓冲存储系统,为网络指纹门禁系统提供了解决方案。

图1是该系统的硬件结构。

ML67Q5250作为系统CPU,处理传感器模块采集到的指纹信息,通过和数据库中的指纹信息进行比对,实现确认识别的目的。

基于ARM的门禁系统的设计

基于ARM的门禁系统的设计

Doors &WindowsTM2012.09门窗专栏基于ARM 的门禁系统的设计李晓强西安理工大学高等技术学院摘要:门禁系统是在传统门锁基础上发展而来的。

近年来,随着自动控制技术、计算机技术、感应卡技术、生物识别技术等的发展,门禁系统得到了飞跃式的发展,其应用领域也更加广泛。

但随着科技的发展,人们对门禁系统也提出了更多的实际功能要求,而目前市场上的门禁系统大多是基于单片机的理念设计的,这种门禁系统由于速度、接口和性能等方面的限制,已很难甚至不能满足人们的各种生活需求。

因此设计一种高速度、高性能、低功耗、低成本且益于扩展的门禁系统迫在眉睫。

考虑到ARM 处理器具有较高的处理效率以及对各种操作系统的良好支持,本文提出了一套新型的门禁系统设计方案———基于ARM9的嵌入式门禁系统。

此系统消除了以往门禁系统中依赖单片机作为主要控制芯片而导致的各种缺点,并将人体生物特征应用其中,利用人体生物特征的唯一性大大提高系统的安全性,促进其不断向前发展。

关键字:ARM9;嵌入式门禁系统;人体生物特征1研究背景如今,门禁系统已逐渐发展成为一套现代化的、功能齐全的管理系统,它不仅仅作为人员进出的管理使用,而且还能提供公司或小区内部的有序化管理,出入口的实时视频监测等功能。

在一些发达国家,门禁系统已经相对成熟,广泛地应用于智能小区、办公室、宾馆的各种房门、大门、人行通道管理方面。

在国内,门禁系统也呈现出了迅猛发展的势头,在各种领域开始应用。

目前,从国际、国内研发的门禁系统的控制手段来看,主要有键盘输入密码式门禁系统、接触式卡门禁系统、非接触式IC 卡门禁系统、生物辨别系统等。

虽然目前的门禁系统也能完成一些相应的基本功能,但其核心处理器大多主要依赖单片机来实现,扩展能力等有限,而随着嵌入式技术的不断发展,特别是基于ARM 处理器的嵌入式系统,由于其可扩展性强、稳定性高、功耗低、性能和价格比合理等特点,已在实际生活中得到了广泛的应用。

基于ARM9处理器的嵌入式指纹识别系统设计

基于ARM9处理器的嵌入式指纹识别系统设计

基于ARM9处理器的嵌入式指纹识别系统设计摘要:为了适应指纹采集传感器件和指纹识别系统向着小型化和嵌入式方向发展的需要,文中提出了一种基于ARM9处理器架构的CPU芯片S3C2440A的嵌入式指纹识别系统(指纹识别系统是一个典型的模式识别系统,包括指纹图像获取、处理、特征提取和比对等模块。

)设计方案,同时对该指纹识别系统的硬件架构进行了说明。

该方案具有结构简单、可扩展性和移植性强等诸多优点。

0 引言指纹鉴定是人身识别最重要的手段之一,指纹自动识别系统给指纹鉴定工作提供了一个新的平台,并使指纹自动识别系统在身份认证方面具有更广阔的前景。

目前,自动指纹识别系统一般都是联机的,大多数系统都选用指纹传感器来采集,并以计算机(PC)作为主机来处理,从而对指纹进行匹配。

而本文提出的基于ARM9的嵌入式指纹识别系统则是把采集和处理集于一身的独立系统,因而可以做得很小,比较适合用于高档汽车门、防盗门以及公*勤系统等场合。

嵌入式系统是指以应用为中心,以计算机技术为基础,软硬件可裁剪,其应用系统对功能、可靠性、成本、体积和功耗等要求都比较严格的专用计算机系统。

本文选用SAMSUNG的S3C2440A作为嵌入式指纹系统的主处理芯片,提出了系统的软硬件设计方案。

1 嵌入式指纹识别系统的硬件设计图1所示是本嵌入式指纹识别系统的硬件框图。

从图1中可以看到,本系统主要由指纹数据采集模块、微处理器模块、数据存储模块和通讯模块等四个模块组成。

本系统以ARM9处理器为核心来驱动指纹传感器采集指纹,并将指纹数据放入存储器中,此数据可以被PC通过串口获取,也可以保存在数据存储器中。

指纹数据采集模块可利用软件方式来判断是否进行指纹的采集。

当进行指纹采集时,指纹传感芯片将按照设定的参数来采集指纹,并将模拟图像转换成数字图像,然后在ARM的控制下,将数据存储在外部数据空间,以等待下一步的处理。

图1 指纹识别系统的硬件框图微处理器模块以ARM和数据存储器为核心,可对采集到的指纹图像进行相应的预处理,并通过对发光二极管的控制来显示指纹预处理结果。

基于ARM的指纹识别门禁系统的设计与实现的开题报告

基于ARM的指纹识别门禁系统的设计与实现的开题报告

基于ARM的指纹识别门禁系统的设计与实现的开题报告一、选题背景和意义随着人们对安全的要求越来越高,门禁系统在各种场合越来越普及。

传统的门禁系统主要采用IC卡、密码等方式进行身份认证,但是这些方式都有着各种弊端,例如IC卡可能丢失或者被人冒用,密码易被猜测等。

而指纹识别技术具有独特的优点,如不可复制、高精度、高速度等,因此越来越受到人们的关注。

本项目将基于ARM开发板和指纹识别模块,设计并实现一款基于ARM的指纹识别门禁系统。

该门禁系统实现了对用户指纹的采集和匹配,同时还可以通过网络连接上位机进行远程控制,实现了对门禁系统的管理和控制,具有良好的安全性和便利性。

二、主要内容和技术路线本项目的主要内容包括:- 指纹采集模块:通过指纹识别模块采集用户的指纹信息,并将指纹信息存储到ARM开发板中。

- 指纹匹配模块:通过指纹识别模块对用户进行身份认证,判断是否有门禁权限。

- 门禁控制模块:通过驱动开发板上的继电器模块进行门禁的开关控制。

- 网络连接模块:通过硬件连接以太网模块,通过网络连接上位机进行远程控制。

技术路线如下:- 系统硬件设计:选用ARM开发板和指纹识别模块、继电器模块、以太网模块等相关硬件。

- 系统软件设计:采用ARM的裸机开发方式进行开发,对指纹采集、指纹匹配、门禁控制、网络连接等模块进行开发。

- 系统调试测试:进行系统测试和功能验证,调试系统软硬件问题。

三、预期成果本项目的预期成果包括:- 完成指纹识别门禁系统的设计和实现,实现了指纹采集、指纹匹配、门禁控制、网络连接等功能。

- 展示门禁系统的实际应用效果,验证系统的可靠性和实用性。

- 发表论文或报告,介绍整个设计过程和技术路线,分享经验和感悟。

四、项目计划本项目的计划如下:- 第一周:确定选题,阅读相关文献,了解市面上的各种指纹识别门禁系统和技术方案,熟悉相关的硬件和软件开发工具。

- 第二周:进行系统硬件选型和设计,绘制电路图和PCB布局图。

基于ARM9的指纹识别系统

基于ARM9的指纹识别系统

基于ARM9的指纹识别系统*第一部分设计概述/Design Introduction信息化时代,生物识别技术作为信息安全和个人身份识别技术越来越受到人们的重视。

指纹作为人体中最明显的外表特征,具有独一无二的特性、普遍性、唯一性、易于采集等优点。

指纹鉴定技术利用人类指纹稳定性和独特性的生理特征,将其作为人们的一种“活的身份证”,更因指纹具有的不可替代性,使通过指纹进行身份鉴定的安全性大大提高,且随着图像处理_模式识别方法的发展和指纹传感器技术的日臻成熟,指纹鉴定方法在金融、公安、门禁、户籍管理等领域都有着良好的应用前景。

同时随着指纹传感器性能的提高和价格的降低,指纹的采集相对容易;指纹的识别算法已经较为成熟。

由于指纹识别具有扫描指纹的速度很快,方便,小型化等多优点,指纹识别技术已经逐渐走入民用市场,并应用到许多嵌入式设备中。

指纹防盗系统也由此产生,指纹防盗系统是一种能够自动鉴别个人身份的技术,对于其他的指纹报警,技术特性使得生物识别身份验证方法不依赖各种人造的和附加的物品来证明人的自身,而用来证明自身的恰恰是人本身,所以,它不会丢失、不会遗忘,很难伪造和假冒,是种“只认人、不认物”,方便安全的保安手段。

从而对财产起到保护作用。

指纹防盗系统可以广泛用于政府、学校、税务机关、银行、部队、智能小区及交通等各个领域,倍受各界用户的青睐。

目前市场上有各种各样的嵌入式处理器。

意法半导体公司提供的STR912芯片是一种硬核处理器,具有很高的性价比。

本文提出一种基于ARM9处理器为核心的嵌入式自动指纹识别系统设计,以STR912芯片设计为硬件平台,配以指纹传感器芯片和VGA接口控制电路实现的。

该系统具有低成本、开发周期短、上市快等优点。

第二部分功能描述/Function Description本设计系统主要实现指纹的采集、处理、特征模板提取、结果显示,以及完成个人身份识别/注册功能。

主要有以下几个模块,指纹采集模块,ARM9处理模块,VGA控制模块,结果显示模块。

基于ARM的指纹识别门禁系统设计

基于ARM的指纹识别门禁系统设计

基于ARM的指纹识别门禁系统设计
贾红云;赵立本
【期刊名称】《微计算机信息》
【年(卷),期】2007(023)005
【摘要】介绍了基于ARM的指纹识别门禁系统的软硬件设计.其中硬件主要是Intel公司基于X-scale内核的PXA255处理器和美国Veridicom公司的半导体指纹传感器FPS110.软件设计包括系统上电初始化,图像捕获存储,图像匹配等.经过仿真,该系统准确性高,识别快,而且易于二次开发扩展.
【总页数】2页(P140-141)
【作者】贾红云;赵立本
【作者单位】266071,山东青岛,中国海洋大学信息科学与工程学院;266071,山东青岛,中国石油化工股份有限公司山东青岛石油分公司
【正文语种】中文
【中图分类】TP399
【相关文献】
1.基于ARM的指纹识别门禁系统设计 [J], 王啸东
2.基于ARM9的指纹识别门禁系统 [J], 陈国金;王家校
3.基于ARM9的指纹识别门禁系统 [J], 吕宪军;陈后金
4.基于ARM的指纹识别门禁系统设计 [J], 郑冰;贾红云;赵立本
5.基于指纹识别的门禁系统设计 [J], 李龙;陈飞凤;岳梅;张婧婧
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计任务书学生姓名:廖年强专业班级: 06自动化指导教师:谢川工作单位:重庆工商大学计信学院题目: 基于ARM的指纹识别门禁系统设计已知技术参数和设计要求:1、硬件主要选择基于Xscale内核的PXA255处理器;2、传感器为美国豪威公司的CMOS图像传感器FPS200;3、设计系统的硬件和软件部分;4、硬件包括指纹识别模块、数据处理模块等;5、软件部分包括系统初始化, 指纹处理识别, 电控锁控制部分等;6、以小组为单位完成本任务,每个小组最多5人;要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、完成元器件选型,设计硬件电路,并提供protel电路图;2、设计中给出最小系统的电路图扩展相应的电路,并根据要求最终形成一个完整的电路图,并完成所有源代码;3、每个组员完成不少于3000字的课程设计报告且报告内容不同。

4、课题指标从学生实际出发,难易适中,经过努力都能够完成任务,并有所收获。

时间安排:2009~2010学年第一学期17~18周指导教师签名:年月日教研室主任签名:年月日重庆工商大学课程设计成绩评定表学院:计信学院班级:06自动化2班学生姓名:廖年强学号:2006003921项目分值优秀(100>x≥90 良好(90>x≥80中等(80>x≥70及格(70>x≥60不及格(x<60评分参考标准参考标准参考标准参考标准参考标准学习态度15 学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作学习态度尚可,能遵守组织纪律,能按期完成任务学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度技术水平与实际能力25设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比设计基本合理,理论分析与计算无大错,实验数据无大错设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、理、调查调研非常合理、可信文献引用、调查调研比较合理、可信较可信调查调研有较大的问题创新10 有重大改进或独特见解,有一定实用价值有较大改进或新颖的见解,实用性尚可有一定改进或新的见解有一定见解观念陈旧论文(计算书、图纸撰写质量50结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰指导教师评定成绩:指导教师签名:年月日基于ARM的指纹识别门禁系统设计计信学院 06自动化2班廖年强 2006003921【摘要】本设计介绍了基于ARM的指纹识别门禁系统的软硬件设计。

其中硬件主要是Intel 公司基于Xscale内核的PXA255处理器和美国豪威公司的CMOS图像传感器FPS200。

软件设计包括系统初始化, 指纹处理识别, 电控锁控制部分等。

经过实际测试该系统工作稳定可靠, 达到了设计目的。

【关键词】 ARM 门禁系统指纹识别 TCP/IP 图像一、门禁系统概述门禁系统(Access Contro l System , 又称出入口控制系统,是为保障人们生活、工作及财产安全, 对重要通道的出入口进行管理与控制的系统。

随着技术的发展, 门禁系统已经从传统的卡式门禁系统发展到今天的生物特征识别门禁系统。

生物特征识别门禁系统是以人体生物特征作为辨识条件的指纹比对、掌纹比对、语音比对等。

这些生理特征相同的概率达到数十亿分之一,因此具有无法仿冒与借用、不怕遗失、不用携带、不会遗忘,有着个体特征独特性、唯一性、安全性的特点,适用于高度机密性场所的安全保护。

其中指纹识别发展最早, 使用也最广泛。

并逐渐与网络集成。

二、PXA 255处理器和指纹传感器FPS200简介本系统采用Intel 公司基于Xscale 内核的PXA255处理器。

Xscale微架构采用ARMV5TE ISA 兼容指令集(浮点指令集除外,它以ARM 核为中心,在其周围扩展了指令和数据内存管理(Instruct ion andDataM emo ryM anagement Unit, 指令、数据和微小数据高速缓(Instruction,Data and Mini-DataCache,写缓冲、全缓冲、挂起缓冲和分支目标缓冲,电源管理单元, 性能监测单元, 调试和JTAG 单元以及协处理器接口、MAC 协处理器、核心存储总线等。

FPS系列CMOS图像传感器芯片是美国豪威公司的产品。

FPS200是高度集成的彩色摄像芯片, 可带1/4镜头。

支持多种格式, 内设的SCCB (Serial Camera Cont ro lBus 串行控制总线接口, 提供简单控制方式。

通过该接口, 我们可以对FPS200芯片内部所有寄存器值进行修改, 从而完成对FPS200的控制, 包括色彩饱和度的调整、gamma 校正等等。

该芯片最高能达到每秒钟30帧的传输速率, 并且用户可以控制图像质量, 可以根据自己的需要选择合适的图像质量。

另外FPS200内置了640×480分辨率的镜像阵列,A/D转换器, 并支持外部水平、垂直同步输入格式, 数字视频输出、增益控制、黑平衡和白平衡等在内的控制寄存器功能模块。

其内部框图如图1。

图1 FPS200内部结构框图三、系统硬件设计1、结构框图系统的硬件架构原理框图如图2所示,本系统主要实现指纹的识别、处理、特征模板提取、图2 系统硬件结构图结果显示,以及完成个人身份识别/注册功能。

主要由ARM9处理、VGA控制及结果显示等模块组成。

2、指纹识别模块指纹识别模块核心部分为FPS200传感芯片,该芯片是一种触摸式CMOS传感器件,其传感区域为1.28cm×1.50cm,500dpi分辨率,内置有8位ADC,且有微处理器总线、SPI总线三种接口模式。

其通过改变电容阵列的参数值可在一秒钟内扫描多副指纹图像便自动选择最好的一幅。

本指纹防盗系统采用了传感器的USB模式传感器的数据线直接与STR912x芯片扩展口相接,对FPS200图像传感器进行初始化控制和图像读取。

指纹传感电路如图3所示。

图3 指纹传感电路指纹采集电路的原理图如图4所示,其工作原理为:PXA255处理器通过I2C总线设置FPS200的寄存器,系统开GPIO72(VSYNC的中断使能并检测中断,当GPIO72(V SYNC 中断到来以后,打开GPIO73(HREF中断使能,关闭其它的中断使能。

当GPIO73(HREF中断到来以后, 打开GPIO74(PCLK中断使能, 关闭其它中断。

每当GPIO74(PCLK中断到来, 就将GPI2Obuffer 里的GPIO64~GPIO71数据采集出来, 保存到imgbuf数组中去。

重复这一步一直到采满382×240 次为止。

将imgbuf按照每隔320 个元素就舍弃62个元素进行处理,这样得到的数据就是320×240 大小的灰度指纹图像。

图4 指纹采集电路原理图3、数据处理模块数据处理模块主要完成指纹识别的整个处理过程,包括指纹图像软化、方向图提取、图像增强、二值化、图像滤波、图像细化等。

该模块采用了TMS320VC5402,使用FLASH和SDRAM 分别作ARM处理器的程序存储器。

TMS320VC5402是16位定点DSP,采用改进的哈佛结构适应远程通信等实时嵌入式的需要。

为了提高速度,本文对一些核心的算法进行了优化。

4、全局逻辑控制单元系统中大多数外围器件与DSP 的握手信号都是通过可编程逻辑器件来完成的,CPLD电路设计按其所实现的功能可分为DSP寻址空间和芯片读写信号两个模块,其中DSP寻址空间模块根据DSP输出的控制信号和数据空间选择信号分时寻址SRAM和FLASH两个存储体。

四、系统软件设计指纹识别系统的主程序流程图如图5所示。

目标板上电后对整个识别系统进行初始化操作,包括DSP系统的初始化和目标板上外设的初始化,对他们进行参数设置。

初始化完成后开始检测指纹传感器上是否有手指,如果有则进行指纹图像的识别识别完成后就对着枚指纹图像进行预处理工作,在预处理的前端,对识别进来的这枚指纹进行质量评估,以判断是否需要继续进行指纹图像的预处理工作,若指纹质量比较好则继续进行预处理和数据上传;如果图像的质量很差,则作废这枚指纹数据。

指纹图像的识别是在中断程序中开始的,当指纹传感器上没有手指时,系统将进入省电模式,通过指纹传感器FPS200的手指自动检测中断来唤醒系统,并进行一次指纹图像识别、预处理和数据上传。

指纹登记个数≥3000枚。

图5 软件流程图系统设计完成后,可脱机值守工作。

122×32点阵LCD实时显示时钟、操作状态,并具有15键操作键盘,可独立完成建档及查询功能。

系统核查指纹1:N与1:1两种方式兼容,提供RS232/R485、RJ45接口支持局域网连接。

五、结论及心得体会本次设计主要介绍了基于ARM的指纹识别门禁系统的软硬件设计。

ARM体系结构有丰富的接口, 在门禁、监控等领域正发挥越来越重要的作用, 面向可集成, 可扩展, 可移植的特定嵌入式系统越来越多的出现在工程领域。

随着性价比的提高和软件开发的成熟,ARM 在嵌入式领域的应用会越来越广泛。

本文从指纹识别的可靠性及速度上考虑, 在门禁系统中以ARM 微处理器做控制器,充分利用了其高速的运算处理能力。

通过此次课程设计,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习嵌入式更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。

附:程序代码://fps200.h#ifndef _FPS200_H_#define _FPS200_H_#define ROW_NUM 300#define COL_NUM 256#define FPS200_IOCRESET _IO(FPS200_IOC_MAGIC#define FPS_RAH 0x00#define FPS_RAL 0x01#define FPS_CAL 0x02#define FPS_REH 0x03#define FPS_REL 0x04#define FPS_CEL 0x05#define FPS_DTR 0x06#define FPS_DTR_TIME 0x70#define FPS_DCR 0x07#define FPS_DCR_CURRENT 0x6#define FPS_CTRLA 0x08#define FPS_CTRL_ASM_ARCH_EP7211_HA_GETSUB 0x04 #define FPS_CTRLA_GETIMG 0x02#define FPS_CTRLA_GETROW 0x01#define FPS_CTRLA_AINSEL 0x08#define FPS_CTRLB 0x09#define FPS_CTRLB_MODE 0xC0#define FPS_CTRLB_RDY 0x20#define FPS_CTRLB_AFDEN 0x08#define FPS_CTRLB_AUTOINCEN 0x04#define FPS_CTRLB_XTALSEL 0x02#define FPS_CTRLB_ENABLE 0x01#define FPS_CTRLC 0x0A#define FPS_SRA_ASM_ARCH_EP7211_H 0x0B #define FPS_SRA_GETSUB 0x04#define FPS_SRA_GETIMG 0x02#define FPS_SRA_GETROW 0x01#define FPS_PGC 0x0C#define FPS_PGC_VALUE 0x4//0xb#define FPS_ICR 0x0D#define FPS_ICR_IP1_RISE 0x80#define FPS_ICR_IP0_RISE 0x40 #define FPS_ICR_IT1_LEVEL 0x20 #define FPS_ICR_IT0_LEVEL 0x10 #define FPS_ICR_IM1 0x08#define FPS_ICR_IM0 0x04#define FPS_ICR_IE1 0x02#define FPS_ICR_IE0 0x01#define FPS_ISR 0x0E#define FPS_ISR_CLRINT 0x01#define FPS_THR 0x0F#define FPS_THR_THV 0x40#define FPS_THR_THC 0x09#define FPS_CIDH 0x10#define FPS_CIDL 0x11#define FPS_TST 0x12#include#undef PDEBUG#ifdef fps200_DEBUG# ifdef __KERNEL__/* 调试的内核空间*/# define PDEBUG(fmt, args... printk( KERN_DEBUG"fps200: " fmt, ## args# else/* 用户空间 */# define PDEBUG(fmt, args... fprintf(stderr, fmt, ##args# endif#else# define PDEBUG(fmt,args... /* 不调试*/#endif#undef PDEBUGG#define PDEBUGG(fmt,args... /*不调试*//* 设备结构类型 */typedef struct FPS200_Dev {unsigned char flag;void *data;} FPS200_Dev;/* 用于 ioctl */#define FPS200_IOC_MAGIC 'k'/** S代表 "Set" through a ptr* G代表 "Get": reply by setting through a pointer* C代表 "Check"*/#define FPS200_IOCSDTR _IOC(_IOC_WRITE, FPS200_IOC_MAGIC, 1, 1 #define FPS200_IOCSDCR _IOC(_IOC_WRITE, FPS200_IOC_MAGIC, 2, 1 #define FPS200_IOCSPGC _IOC(_IOC_WRITE, FPS200_IOC_MAGIC, 3, 1 #define FPS200_IOCGDTR _IOC(_IOC_READ, FPS200_IOC_MAGIC, 4, 1 #define FPS200_IOCGDCR _IOC(_IOC_READ, FPS200_IOC_MAGIC, 5, 1 #define FPS200_IOCGPGC _IOC(_IOC_READ, FPS200_IOC_MAGIC, 6, 1 #define FPS200_IOCFCAP _IOC(_IOC_READ, FPS200_IOC_MAGIC,7, 4 #define FPS200_IOCGDATA _IOC(_IOC_READ, FPS200_IOC_MAGIC, 8, 4 #define FPS200_IOCEINT _IOC(_IOC_NONE, FPS200_IOC_MAGIC, 9, 0 #define FPS200_IOCDINT _IOC(_IOC_NONE, FPS200_IOC_MAGIC, 10, 0 #define FPS200_IOCCINT _IOC(_IOC_READ, FPS200_IOC_MAGIC, 11, 1 #define FPS200_IOCCRDY _IOC(_IOC_READ, FPS200_IOC_MAGIC, 12, 1#define FPS200_IOCCLR _IOC(_IOC_NONE, FPS200_IOC_MAGIC, 13, 0 #define FPS200_IOC_MAXNR 13int fps200_open(struct inode *inode, struct file *filp;int fps200_release(struct inode *inode, struct file *filp;int fps200_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg;void fps_get_image(;#endif /* _FPS200_H_ *///fps200.c#ifndef __KERNEL__# define __KERNEL__#endif#ifndef MODULE# define MODULE#endif#include#include#include /* printk( */#include /* kmalloc( */#include /* everything... */#include /* error codes */#include /* size_t */#include#include /* udelay( */#include /* ioremap(, iounmap( */#include#include#include#include#include#include "fps200.h" /* local definitions */#define FPS200_VR 0xfd000000#define FPS_INDEX (*(volatile unsigned char *FPS200_VR#define FPS_DATA (*(volatile unsigned char *(FPS200_VR+1#define FPS200_MAJOR 240#define FPS200_NR_DEVS 0#define FPS200_IRQ IRQ_EINT2 // irq = 6#define FPS200_DATASIZE 76800int fps200_major = FPS200_MAJOR;int fps200_nr_devs = FPS200_NR_DEVS;/* number of bare fps200 devices (no use here */MODULE_PARM(fps200_major,"i";MODULE_PARM(fps200_nr_devs,"i";MODULE_AUTHOR("Nankai Unversity 5-304";MODULE_LICENSE("GPL";struct fps200_fops = {open: fps200_open,ioctl: fps200_ioctl,release: fps200_release};struct *fps200_fop_array[]={&fps200_fops,/* type 0 *//* add more later */ };#define FPS200_MAX_TYPE 0FPS200_Dev *fps200_device;void fps200_interrupt(int irq, void *dev_id, struct pt_regs *regs { disable_irq(irq;//fps_get_image(;fps200_device->flag = 1;}void fps_get_image(void{int i = 0;int j = 0;FPS_INDEX = FPS_CTRLA;FPS_DATA = FPS_CTRLA_GETIMG;for(i=0; i<300; i++ {FPS_INDEX = FPS_CTRLB;while(!(FPS_CTRLB_RDY&FPS_DATA{udelay(1;};for(j=0; j<256; j++ {FPS_INDEX = FPS_CTRLB;while(!(FPS_CTRLB_RDY&FPS_DATA{udelay(1;};FPS_INDEX = FPS_CTRLA;*((unsigned char *(fps200_device->data+i*256+j=FPS_DATA;}}}int fps200_open(struct inode *inode, struct file *filp{MOD_INC_USE_COUNT;return(0;}int fps200_release(struct inode *inode, struct file *filp {MOD_DEC_USE_COUNT;return(0;}int fps200_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg{int err = 0;int ret = 0;unsigned char tmp;if(_IOC_TYPE(cmd != FPS200_IOC_MAGICreturn -ENOTTY;if(_IOC_NR(cmd > FPS200_IOC_MAXNRreturn -ENOTTY;if (_IOC_DIR(cmd & _IOC_READerr = verify_area(VERIFY_WRITE, (void *arg, _IOC_SIZE(cmd;else if (_IOC_DIR(cmd & _IOC_WRITEerr = verify_area(VERIFY_READ, (void *arg, _IOC_SIZE(cmd;if (errreturn err;switch(cmd{case FPS200_IOCSDTR:ret = __get_user(tmp, (unsigned char *arg;tmp = 0x7f;FPS_INDEX = FPS_DTR;FPS_DATA = tmp;break;case FPS200_IOCSDCR:ret = __get_user(tmp, (unsigned char *arg;if(tmp > 0x1ftmp = 0x1f;FPS_INDEX = FPS_DCR;FPS_DATA = tmp;break;case FPS200_IOCSPGC:ret = __get_user(tmp, (unsigned char *arg;tmp = 0x0f;FPS_INDEX = FPS_PGC;FPS_DATA = tmp;break;case FPS200_IOCGDTR:FPS_INDEX = FPS_DTR;tmp = FPS_DATA;ret = __put_user(tmp, (unsigned char *arg;break;case FPS200_IOCGDCR:FPS_INDEX = FPS_DCR;tmp = FPS_DATA;ret = __put_user(tmp, (unsigned char *arg;break;case FPS200_IOCGPGC:FPS_INDEX = FPS_PGC;tmp = FPS_DATA;ret = __put_user(tmp, (unsigned char *arg;break;case FPS200_IOCEINT:enable_irq(FPS200_IRQ;break;case FPS200_IOCDINT:disable_irq(FPS200_IRQ;break;case FPS200_IOCFCAP:fps_get_image(;case FPS200_IOCGDATA:copy_to_user((void *arg, fps200_device->data, FPS200_DATASIZE;ret = 0;fps200_device->flag = 0;break;case FPS200_IOCCLR:memset(fps200_device->data, 0, FPS200_DATASIZE;fps200_device->flag = 0;break;case FPS200_IOCCINT:if(((clps_readw(INTSR1&0x40 == 0{udelay(100;if(((clps_readw(INTSR1&0x40 == 0ret = __put_user(0x01, (unsigned char *arg;elseret = __put_user(0x0, (unsigned char *arg;}elseret = __put_user(0x0, (unsigned char *arg;break;case FPS200_IOCCRDY:ret = __put_user(fps200_device->flag, (unsigned char *arg;break;default:return -ENOTTY;}return ret;}static int __init fps200_init_module(void{int result;char tmp;if((result = check_region (FPS200_VR,2{printk ("<1> can't get I/O port address \n"; return (result;}if (!request_region (FPS200_VR,2,"fps200" return -EBUSY;SET_MODULE_OWNER(&fps200_fops;result = register_chrdev(fps200_major, "fps200",&fps200_fops;if(result < 0{printk("<1>fps200: can't get major %d\n",fps200_major;return result;}if(fps200_major == 0fps200_major = result; /* dynamic */ /* read chip id first, if not equal 0x20xx, print error*/FPS_INDEX = FPS_CIDH;tmp = FPS_DATA;if(tmp != 0x20{printk("<1>wrong chip ID, insmod fail.\n";return -EIO;}/* row auto inc. inner 12MHz vibrator. no low-power state*/FPS_INDEX = FPS_CTRLB;FPS_DATA = (FPS_CTRLB_AFDEN|FPS_CTRLB_AUTOINCEN|FPS_CTRLB_ENABLE;/* 等待30us */udelay(35;// 使时延大于 30us/* 中断 */FPS_INDEX = FPS_ICR;FPS_DATA = (FPS_ICR_IE0|FPS_ICR_IT0_LEVEL;FPS_INDEX = FPS_THR;FPS_DATA = ( FPS_THR_THV | FPS_THR_THC ;/* DTR, DCR, PGC */ FPS_INDEX = FPS_DTR;FPS_DATA = 0x23;FPS_INDEX = FPS_DCR;FPS_DATA = 0x1;FPS_INDEX = FPS_PGC;FPS_DATA = 0;/* other initial */FPS_INDEX =FPS_RAL;// raw 地址FPS_DATA = 0;FPS_INDEX = FPS_RAH;FPS_DATA = 0;FPS_INDEX = FPS_REL;FPS_DATA = 0;FPS_INDEX = FPS_REH;FPS_DATA = 0;FPS_INDEX =FPS_CAL; / / column 地址FPS_DATA = 0;FPS_INDEX = FPS_CEL;FPS_DATA = 0;FPS_INDEX = FPS_CTRLC;FPS_DATA = 0;FPS_INDEX = FPS_CTRLA;FPS_DATA = 0;// clear FPS_CTRLA_AINSEL/* 设置 irq */if(result{printk("<1>can't get assigned irq.\n";return -EIO;}fps200_device = kmalloc(sizeof(FPS200_Dev, GFP_KERNEL;if(!fps200_device{FPS_INDEX = FPS_CTRLB;FPS_DATA = 0;return -ENOMEM;}memset(fps200_device, 0, sizeof(FPS200_Dev; fps200_device->data = kmalloc(FPS200_DATASIZE, GFP_KERNEL;if(!fps200_device{FPS_INDEX = FPS_CTRLB;FPS_DATA = 0;kfree(fps200_device;return -ENOMEM;}memset(fps200_device->data, 0, FPS200_DATASIZE;/* 设置 irq */ result = request_irq(FPS200_IRQ, fps200_interrupt,SA_INTERRUPT, "fps200", NULL;return(0;}static void __exit fps200_cleanup_module(void{kfree(fps200_device->data;kfree(fps200_device;FPS_INDEX = FPS_CTRLB;FPS_DATA = 0;release_region (FPS200_VR,2;free_irq(FPS200_IRQ, NULL;unregister_chrdev(fps200_major, "fps200"; }module_init(fps200_init_module;module_exit(fps200_cleanup_module;//main.cvoid main(void{BYTE temp;WORD port = 1001;LocalMACAddr[0]=0x52;LocalMACAddr[1]=0x54;LocalMACAddr[2]=0x4c;LocalMACAddr[3]=0x30;LocalMACAddr[4]=0x2e;LocalMACAddr[5]=0x2f;LocalIPAddress = 0xc0a8020d; /* 本地地址192.168.2.14*/ ServerIPAddress = 0xc0a8020e; /* 目的地址192.168.2.13*//*初始化 */SerialInitial(;MemInitial(;NetInInitial(;RTLInitial(;Start8019(;InterruptInitial(;// 建立一个ARP包p[0] =0xff;p[1] =0xff;p[2] =0xff;p[3] = 0xff;p[4] = 0xff;p[5] = 0xff;p[6] = 0x52;p[7] =0x54;p[8] =0x4c;p[9] =0x30;p[10] =0x2e;p[11] =0x2f;p[12] = 0x08;p[13] = 0x06;p[14] = 0x00;p[15] = 0x01;p[16] = 0x08;p[17] = 0x00;p[18] = 0x06;p[19] = 0x04;p[20] = 0x00;p[21] = 0x01;// 发送ARP包RTLSendPacket(p,60;while(1;#ifdef DEBUGprintf("\n-------bigine-------";#endif/* 处理 */TCPBind(port;if(TCPConnect(ServerIPAddress,1001 == TRUE {while(UserFunc(;}/* 延时 */for(temp;temp<255;temp++;#ifdef DEBUGprintf("\n run over!";#endif/* 存储 */Stop8019(;while(1;}41 / 41。

相关文档
最新文档