基于ARM的指纹识别门禁系统设计.docx
《基于ARM的指纹识别门禁系统设计.docx》由会员分享,可在线阅读,更多相关《基于ARM的指纹识别门禁系统设计.docx(48页珍藏版)》请在冰豆网上搜索。
![基于ARM的指纹识别门禁系统设计.docx](https://file1.bdocx.com/fileroot1/2023-7/21/4858f94a-be37-433f-b509-5b0dc0743fb6/4858f94a-be37-433f-b509-5b0dc0743fb61.gif)
基于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
优秀
目 值
良好
(90>x≥80
中等
(80>x≥70
及格
(70>x≥60
分
参
考
标
准
参
考
参考标准 参考标准 参考标准
标
准
学
习
态
度
学习态度认真,科学作 学习态度比较认真,
1风严谨,严格保证设计 科学作风良好,能按
5时间并按任务书中规定 期圆满完成任务书规
的进度开展各项工作 定的任务
学习态度尚好,
遵守组织纪律,
基本保证设计时
间,按期完成各
项工作
学习态度
尚可,能遵
守组织纪
律,能按期
完成任务
学习马虎,纪律
涣散,工作作风
不严谨,不能保
证设计时间和
进度
5
技
术
水
平
与
实
设计合理、理论分析与
计算正确,实验数据准
2确,有很强的实际动手
能力、经济分析能力和
计算机应用能力,文献
查阅能力强、引用合理
设计合理、理论分析
与计算正确,实验数
据比较准确,有较强
的实际动手能力、经
济分析能力和计算机
应用能力,文献引用
设计合理,理论
分析与计算基本
正确,实验数据
比较准确,有一
定的实际动手能
力,主要文献引
设计基本
合理,理论
分析与计
算无大错,
实验数据
设计不合理,理
论分析与计算
有原则错误,实
验数据不可靠,
实际动手能力
差,文献引用、
际 、调查调研非常合理、 、调查调研比较合理 用、调查调研比 无大错调查调研有较
能 可信
、可信
较可信
大的问题
解 观念陈旧
力
创 1有重大改进或独特见解 有较大改进或新颖的 有一定改进或新 有一定见
新 0,有一定实用价值见解,实用性尚可的见解
论
文
(
计
算
书
、
图
纸
撰
写
结构严谨,逻辑性强,
层次清晰,语言准确,
5文字流畅,完全符合规
0范化要求,书写工整或
用计算机打印成文;图
纸非常工整、清晰
结构合理,符合逻辑 结构合理,层次
,文章层次分明,语 较为分明,文理
言准确,文字流畅, 通顺,基本达到
符合规范化要求,书 规范化要求,书
写工整或用计算机打 写比较工整;图
印成文;图纸工整、清 纸比较工整、清
晰 晰
结构基本
合理,逻辑
基本清楚,
文字尚通
顺,勉强达
到规范化
要求;图纸
比较工整
内容空泛,结构
混乱,文字表达
不清,错别字较
多,达不到规范
化要求;图纸不
工整或不清晰
质
量
指导教师评定成绩:
指导教师签名:
年 月 日
基于ARM的指纹识别门禁系统设计
计信学院 06自动化2班 廖年强 2006003921
【摘 要】 本设计介绍了基于ARM的指纹识别门禁系统的软硬件设计。
其中硬件主要是Intel
公司基于Xscale内核的PXA255处理器和美国豪威公司的CMOS图像传感器FPS200。
软件设计包括系
统初始化, 指纹处理识别, 电控锁控制部分等。
经过实际测试该系统工作稳定可靠,
达到了设计目的。
【关键词】 ARM 门禁系统 指纹识别 TCP/IP 图像
一、门禁系统概述
门禁系统(Access Contro l System ,
又称出入口控制系统,是为保障人们生活、工作及财产安全,
对重要通道的出入口进行管理与控制的系统。
随着技术的发展,
门禁系统已经从传统的卡式门禁系统发展到今天的生物特征识别门禁系统。
生物特征识别门禁
系统是以人体生物特征作为辨识条件的指纹比对、掌纹比对、语音比对等。
这些生理特征相同
的概率达到数十亿分之一,因此具有无法仿冒与借用、不怕遗失、不用携带、不会遗忘,有着个
体特征独特性、唯一性、安全性的特点,适用于高度机密性场所的安全保护。
其中指纹识别发
展最早, 使用也最广泛。
并逐渐与网络集成。
二、PXA 255处理器和指纹传感器FPS200简介
本系统采用Intel 公司基于Xscale 内核的PXA255处理器。
Xscale微架构采用ARMV 5TE
ISA 兼容指令集(浮点指令集除外,它以ARM
核为中心,在其周围扩展了指令和数据内存管理(Inst
ruct 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芯片扩展口相接,对FP
S200图像传感器进行初始化控制和图像读取。
指纹传感电路如图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/R4
85、RJ45接口支持局域网连接。
五、结论及心得体会
本次设计主要介绍了基于ARM的指纹识别门禁系统的软硬件设计。
ARM体系结构有丰富的
接口, 在门禁、监控等领域正发挥越来越重要的作用, 面向可集成, 可扩展,
可移植的特定嵌入式系统越来越多的出现在工程领域。
随着性价比的提高和软件开发的成熟,A
RM 在嵌入式领域的应用会越来越广泛。
本文从指纹识别的可靠性及速度上考虑,
在门禁系统中以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 13
int 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 76800
int 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 file_operations fps200_fops = {
open:
fps200_open,
ioctl:
fps200_ioctl,
release:
fps200_release
};
struct file_operations *fps200_fop_array[]={
&fps200_fops,/* type 0 */
/* add more later */
};
#define FPS200_MAX_TYPE 0
FPS200_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(!