基于ARM的指纹识别门禁系统设计图文.docx
《基于ARM的指纹识别门禁系统设计图文.docx》由会员分享,可在线阅读,更多相关《基于ARM的指纹识别门禁系统设计图文.docx(32页珍藏版)》请在冰点文库上搜索。
基于ARM的指纹识别门禁系统设计图文
课程设计任务书
学生姓名:
廖年强专业班级:
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图像
一、门禁系统概述
门禁系统(AccessControlSystem,又称出入口控制系统,是为保障人们生活、工作及财产安全,对重要通道的出入口进行管理与控制的系统。
随着技术的发展,门禁系统已经从传统的卡式门禁系统发展到今天的生物特征识别门禁系统。
生物特征识别门禁系统是以人体生物特征作为辨识条件的指纹比对、掌纹比对、语音比对等。
这些生理特征相同的概率达到数十亿分之一,因此具有无法仿冒与借用、不怕遗失、不用携带、不会遗忘,有着个体特征独特性、唯一性、安全性的特点,适用于高度机密性场所的安全保护。
其中指纹识别发展最早,使用也最广泛。
并逐渐与网络集成。
二、PXA255处理器和指纹传感器FPS200简介
本系统采用Intel公司基于Xscale内核的PXA255处理器。
Xscale微架构采用ARMV5TEISA兼容指令集(浮点指令集除外,它以ARM核为中心,在其周围扩展了指令和数据内存管理(Inst
ructionandDataMemoryManagementUnit,指令、数据和微小数据高速缓(Instruction,DataandMini-DataCache,写缓冲、全缓冲、挂起缓冲和分支目标缓冲,电源管理单元,性能监测单元,调试和JTAG单元以及协处理器接口、MAC协处理器、核心存储总线等。
FPS系列CMOS图像传感器芯片是美国豪威公司的产品。
FPS200是高度集成的彩色摄像芯片,可带1/4镜头。
支持多种格式,内设的SCCB(SerialCameraControlBus串行控制总线接口,提供简单控制方式。
通过该接口,我们可以对FPS200芯片内部所有寄存器值进行修改,从而完成对FPS200的控制,包括色彩饱和度的调整、gamma校正等等。
该芯片最高能达到每秒钟30帧的传输速率,并且用户可以控制图像质量,可以根据自己的需要选择合适的图像质量。
另外FPS200内置了640×480分辨率的镜像阵列,A/D转换器,并支持外部水平、垂直同步输入格式,数字视频输出、增益
控制、黑平衡和白平衡等在内的控制寄存器功能模块。
其内部框图如图1。
图1FPS200内部结构框图
三、系统硬件设计
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(VSYNC中断到来以后,打开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_
#defineROW_NUM300
#defineCOL_NUM256
#defineFPS200_IOCRESET_IO(FPS200_IOC_MAGIC
#defineFPS_RAH0x00
#defineFPS_RAL0x01
#defineFPS_CAL0x02
#defineFPS_REH0x03
#defineFPS_REL0x04
#defineFPS_CEL0x05
#defineFPS_DTR0x06
#defineFPS_DTR_TIME0x70
#defineFPS_DCR0x07
#defineFPS_DCR_CURRENT0x6
#defineFPS_CTRLA0x08
#defineFPS_CTRL_ASM_ARCH_EP7211_HA_GETSUB0x04
#defineFPS_CTRLA_GETIMG0x02
#defineFPS_CTRLA_GETROW0x01
#defineFPS_CTRLA_AINSEL0x08
#defineFPS_CTRLB0x09
#defineFPS_CTRLB_MODE0xC0
#defineFPS_CTRLB_RDY0x20
#defineFPS_CTRLB_AFDEN0x08
#defineFPS_CTRLB_AUTOINCEN0x04
#defineFPS_CTRLB_XTALSEL0x02
#defineFPS_CTRLB_ENABLE0x01
#defineFPS_CTRLC0x0A
#defineFPS_SRA_ASM_ARCH_EP7211_H0x0B
#defineFPS_SRA_GETSUB0x04
#defineFPS_SRA_GETIMG0x02
#defineFPS_SRA_GETROW0x01
#defineFPS_PGC0x0C
#defineFPS_PGC_VALUE0x4//0xb
#defineFPS_ICR0x0D
#defineFPS_ICR_IP1_RISE0x80
#defineFPS_ICR_IP0_RISE0x40
#defineFPS_ICR_IT1_LEVEL0x20
#defineFPS_ICR_IT0_LEVEL0x10
#defineFPS_ICR_IM10x08
#defineFPS_ICR_IM00x04
#defineFPS_ICR_IE10x02
#defineFPS_ICR_IE00x01
#defineFPS_ISR0x0E
#defineFPS_ISR_CLRINT0x01
#defineFPS_THR0x0F
#defineFPS_THR_THV0x40
#defineFPS_THR_THC0x09
#defineFPS_CIDH0x10
#defineFPS_CIDL0x11
#defineFPS_TST0x12
#include
#undefPDEBUG
#ifdeffps200_DEBUG
#ifdef__KERNEL__
/*调试的内核空间*/
#definePDEBUG(fmt,args...printk(KERN_DEBUG"fps200:
"fmt,##args
#else
/*用户空间*/
#definePDEBUG(fmt,args...fprintf(stderr,fmt,##args
#endif
#else
#definePDEBUG(fmt,args... /*不调试*/
#endif
#undefPDEBUGG
#definePDEBUGG(fmt,args... /*不调试*/
/*设备结构类型*/
typedefstructFPS200_Dev{
unsignedcharflag;
void*data;
}FPS200_Dev;
/*用于ioctl*/
#defineFPS200_IOC_MAGIC'k'
/*
*S代表"Set"throughaptr
*G代表 "Get":
replybysettingthroughapointer
*C代表 "Check"
*/
#defineFPS200_IOCSDTR_IOC(_IOC_WRITE,FPS200_IOC_MAGIC,1,1
#defineFPS200_IOCSDCR_IOC(_IOC_WRITE,FPS200_IOC_MAGIC,2,1
#defineFPS200_IOCSPGC_IOC(_IOC_WRITE,FPS200_IOC_MAGIC,3,1
#defineFPS200_IOCGDTR_IOC(_IOC_READ,FPS200_IOC_MAGIC,4,1
#defineFPS200_IOCGDCR_IOC(_IOC_READ,FPS200_IOC_MAGIC,5,1
#defineFPS200_IOCGPGC_IOC(_IOC_READ,FPS200_IOC_MAGIC,6,1
#defineFPS200_IOCFCAP_IOC(_IOC_READ,FPS200_IOC_MAGIC,7,4
#defineFPS200_IOCGDATA_IOC(_IOC_READ,FPS200_IOC_MAGIC,8,4
#defineFPS200_IOCEINT_IOC(_IOC_NONE,FPS200_IOC_MAGIC,9,0
#defineFPS200_IOCDINT_IOC(_IOC_NONE,FPS200_IOC_MAGIC,10,0
#defineFPS200_IOCCINT_IOC(_IOC_READ,FPS200_IOC_MAGIC,11,1
#defineFPS200_IOCCRDY_IOC(_IOC_READ,FPS200_IOC_MAGIC,12,1
#defineFPS200_IOCCLR_IOC(_IOC_NONE,FPS200_IOC_MAGIC,13,0
#defineFPS200_IOC_MAXNR13
intfps200_open(structinode*inode,structfile*filp;
intfps200_release(structinode*inode,structfile*filp;
intfps200_ioctl(structinode*inode,structfile*filp,
unsignedintcmd,unsignedlongarg;
voidfps_get_image(;
#endif/*_FPS200_H_*/
//fps200.c
#ifndef__KERNEL__
#define__KERNEL__
#endif
#ifndefMODULE
#defineMODULE
#endif
#include
#include
#include /*printk(*/
#include /*kmalloc(*/
#include /*everything...*/
#include /*errorcodes*/
#include /*size_t*/
#include
#include /*udelay(*/
#include /*ioremap(,iounmap(*/
#include
#include
#include
#include
#include
#include"fps200.h" /*localdefinitions*/
#defineFPS200_VR0xfd000000
#defineFPS_INDEX(*(volatileunsignedchar*FPS200_VR
#defineFPS_DATA(*(volatileunsignedchar*(FPS200_VR+1
#defineFPS200_MAJOR240
#defineFPS200_NR_DEVS0
#defineFPS200_IRQIRQ_EINT2 //irq=6
#defineFPS200_DATASIZE76800
intfps200_major=FPS200_MAJOR;
intfps200_nr_devs=FPS200_NR_DEVS;
/*numberofbarefps200devices(nousehere*/
MODULE_PARM(fps200_major,"i";
MODULE_PARM(fps200_nr_devs,"i";
MODULE_AUTHOR("NankaiUnversity5-304";
MODULE_LICENSE("GPL";
structfile_operationsfps200_fops={
open:
fps200_open,
ioctl:
fps200_ioctl,
release:
fps200_release
};
structfile_operations*fps200_fop_array[]={
&fps200_fops, /*type0*/
/*addmorelater*/
};
#defineFPS200_MAX_TYPE0
FPS200_Dev*fps200_device;
voidfps200_interrupt(intirq,void*dev_id,structpt_regs*regs{
disable_irq(irq;
//fps_get_image(;
fps200_device->flag=1;
}
voidfps_get_image(void
{
inti=0;
intj=0;
FPS_INDEX=FPS_CTRLA;
FPS_DATA=FPS_CTRLA_GETIMG;
for(i=0;i<300;i++{
FPS_INDEX=FPS_CTRLB;