门禁系统嵌入式创新实践

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

《嵌入式系统及应用》课程设计报告——门禁系统

学院:

班级:

姓名:

学号:

组员:

指导老师:

一、门禁系统设计任务及要求

1、设计一个门禁管理系统,实现人员进出限制。

2、通过射频设备识别人员门卡ID 号,控制门的开关。

二、设计方案与论证

1、总体设计方案与论证

方案一、采用stm32作为总控芯片; 方案二、采用51单片机作为主控芯片。

论证:stm32相对51功能较多,功能强大,且stm32便于移植系统。所以采用stm32

作为主控芯片。

2、识别设计方案与论证

方案一、使用红外条形码识别器识别打在子设备上的条形码 方案二、使用RF 射频卡读取子设备信息 论证:红外条形码识别器可以近距离识别,准确性与射频卡相近但其相对复杂,而且条 形码设备价格比较昂贵,最终决定使用RF 射频卡。

三、系统具体设计与实现

1、系统总框图

2、射频卡识别

TX125系列非接触IC 卡射频读卡模块采用125K 射频基站。当有卡靠近模块时,模块会以韦根或UART 方式输出ID 卡卡号,用户仅需简单的读取即可,在串口方式下,可工作在主动与被动的模式。该读卡模块完全支持EM 、TEMIC 、TK 及其兼容卡片的操作,非常适合于门禁、考勤等系统的应用。

本次设计是用到韦根34协议来获取射频卡卡号的,以下是连接图:

Stm32

TX125射频模块

电机

.

韦根数据输出的基本概念:

韦根数据输出由两根线组成,分别是DA TA0和DA TA1;两根线分别将‘0’和‘1’输出。

输出‘0’时:DA TA0线上出现负脉冲;

输出‘1’时:DA TA1线上出现负脉冲;

负脉冲宽度TP=100ms;周期TW=1600ms

韦根数据的接收:

接收对时间的实时性要求比较高,如果用查询方法接收会出现丢帧的现象,所以要在外部中断里接受每个bit。

3、步进电机控制

通过对电机进行相的控制,四相一步,从而使电机运行随自己设定运行多少周,输入反相就可以使电机逆转。

四、具体程序实现

1、中断初始化

void NVIC_cfg()

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //选择中断分组2

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //选择中断通道2

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占式中断优先级设置为0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应式中断优先级设置为0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn; //选择中断通道2

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占式中断优先级设置为0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //响应式中断优先级设置为0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断

NVIC_Init(&NVIC_InitStructure);

}

void EXTI_cfg()

{

EXTI_InitTypeDef EXTI_InitStructure;

//清空中断标志

EXTI_ClearITPendingBit(EXTI_Line2);

EXTI_ClearITPendingBit(EXTI_Line4);

//选择中断管脚PE2 PE.4

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource4);

EXTI_InitStructure.EXTI_Line = EXTI_Line2|EXTI_Line4; //选择中断线路2 4

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设置为中断请求,非事件请求

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //设置中断触发方式为上下降沿触发

EXTI_InitStructure.EXTI_LineCmd = ENABLE; //外部中断使能

EXTI_Init(&EXTI_InitStructure);

}

2、IO口初始化

void IO_cfg()

{

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //将

//D1,D2,D3 配置为通用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //口

//线翻转速度为50MHz

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_4; //选择引脚2 3 5

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOA TING; //选择输入模式为浮空输

//入

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50MHz

GPIO_Init(GPIOE,&GPIO_InitStructure); //设置PC.2/PC.3/PC.5

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_6|GPIO_Pin_0|GPIO_Pin_5; //

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50MHz

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //带上拉电阻输出

GPIO_Init(GPIOE,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置按键为带上拉输

GPIO_Init(GPIOE, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置按键为带上拉输

GPIO_Init(GPIOE, &GPIO_InitStructure);

}

3、中断处理函数

void EXTI2_IRQHandler(void)

{

WG[cnt]=0;

cnt++;

//清空中断标志位,防止持续进入中断

EXTI_ClearITPendingBit(EXTI_Line2);

}

void EXTI4_IRQHandler(void)

{

WG[cnt]=1;

相关文档
最新文档