门禁系统嵌入式创新实践
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;