基于单片机的楼宇门禁系统的设计与实现
2、系统总体设计
2.1硬件的总体设计
为了使门禁系统智能化,需要一个主控芯片对整个门禁系统进行管理控制。接着还需要对应的模块完成包括数字密码验证和IC卡识别验证的功能。当出现非法闯入、验证失败等情况时还需要对操作人员进行警告。最后需要一个人机交互界面方便管理人员对门禁系统进行管理控制。硬件总体设计框图如图2.1所示。
本设计采用STM32F103为主控芯片,控制其他模块,对信息进行处理运算。STM32相比于51单片机性能更快,引出的GPIO口更多,功能更加丰富,相比起其他高性能的嵌入式设备具有功耗低,成本低的特点,更加适用于低成本的智能化门禁系统。
MRC522射频识别模块与主控芯片STM32F103通过SPI接口连接,MRC522接收主控芯片发送的命令,进行相应的操作,并将内部发送数据给主控芯片。同时与搜索的IC卡进行通信,识别IC卡的信息。MRC522采用的是NFC原理与IC卡通信,有三轮认证机制,通信过程安全快速,同时拥有防冲突机制,可以在多张卡的情况下选择卡片进行识别。同时IC卡相比对ID卡有密码验证方式,不容易被复制,更加的安全。
触摸屏通过8080接口与STM32F103连接,触摸屏包含液晶显示屏和电阻屏。液晶显示屏内带有控制芯片和显存,主控芯片只要向显存写入数据就可以在液晶显示屏上显示内容,使用起来方便,电阻屏也自带有控制芯片,处理触摸数据,可以降低对主控芯片性能的需求。管理人员可以通过按压电阻屏进行操作,并看到液晶显示屏的显示信息,方便管理人员对门禁系统进行管理。触摸屏还可以用于数字密码验证,解决用户忘记携带IC卡的情况,同时数字密码可以作为管理人员的验证方式。为了更好地反馈操作结果,提供错误警告,使用RGB等和蜂鸣器作为报警系统。
图2.1 硬件总体框图
3.系统的硬件设计
3.1 STM32芯片
本次采用STM32F103VET6芯片作为主控芯片,该芯片对外有100个引出的GPIO接口,方便和其他模块进行连接,从而控制其他模块,实现更多的功能。还有512K FLASH闪存,64KRAM,充足的内存可以让芯片装载的程序更大,存储的数据更多。芯片的实物图如图3.1所示。
图3.1 STM32F103VET6实物图
STM32F103内部已经经过了封装,由内核和片上外设构成。STM32F103采用的是由ARM公司研究设计Cortex-M3内核,外接晶振可达72MKZ主频,性能强大。STM32F103包含了SPI、I2C、USART接口,这些是芯片生产厂商在内核上扩展的功能,让芯片的性能和作用更加的强大,可以管理和控制更多的设备。STM32F1系列的框图如图3.2所示。
本次设计使用了SPI接口来对射频识别模块MRC522进行通信和管理控制,从而实现IC卡验证的功能,还通过普通的GPIO口来对RGB灯和蜂鸣器进行控制,完成报警的功能。
3.2射频识别模块
3.2.1 功能特性
本设计采用MFRC522模块来识别IC卡,实现开门验证的功能。MFRC522模块内部已经集成了各自器件,包括天线、逻辑控制功能、寄存器。模块引脚图如图3.3所示。
MFRC522中的内部发送器,可以驱动读写器天线,给IC卡提供能量,发送数据给IC卡,接收IC卡发送的信息,进行通信。接收器的解调电路可以将IC卡发送的数据载波进行解调转为二进制数据,译码电路则将二进制数据转为信息,表示 IC卡传输的数据,数字电路部分可以对传输的数据进行处理,错误检测。
3.2.2 通信原理
当主控芯片读取MRC522寄存器的数据时,STM32主机第一个字节发送一个地址,从机发送无效数据。第二个字节时,MRC522才返回对应地址的数据。可以根据地址的格式可以判断是读地址还是写地址。当最高位是1时,是读数据,最高位是0时,是写数据。主机和从机的数据根据时钟信号同时发送传输,先发送最高位。
当要向MRC522的寄存器写一个数据时,STM32芯片发送一个写数据的地址,然后第二个字节发送数据。在写数据时,MRC522返回的数据是无效数据,可以忽略。当发送的是地址时,地址的最高位代表是读地址还是写地址,中间六位代表地址,最低位默认位0。
MISO和MOSI传输的每一个字节都是高位在前,在时钟上升沿保持不变,在下降沿改变。NSS信号必须为低,方便在一个数据流中发送多个字节。为了发送多个数据流,NSS必须在数据流之间设置为高电平。因为时钟开始为低,所以在下降沿改变需要第二个跳变沿。因此在设置SPI传输的时钟极性等于0,时钟相位等于1。SPI通信时序图如图3.2所示。
图3.2 SPI通信时序图
4、系统的软件设计
4.1 系统的初始化
STM32标准库:
在实际开发中会发现,有时使用同一个内核,只是生产厂商不同,片上外设有少许的差异,也会导致相互之间的程序不能移植。为了解决这个问题,ARM公司与芯片厂商之间建立了一个标准标准。即 CMSIS 标准,实际上是建立了一个软件抽象层。屏蔽了具体的硬件之间的差异,使软件的兼容性更好。
而本次设计采用的STM32的标准库。就是按照 CMSIS 标准建立的。很多底层的初始化,寄存器地址声明都包含在里面。使用标准库开发,可以加快项目进展。从ST的官网中获取标准库,将其中需要用到的文件包含到项目中。下面这些文件是开发中需要使用到的必要文件,如果我们要使用STM32F1系列芯片,都必须把文件包含到项目中。还有一些外设的文件,在使用的时候再添加进来。
(1)寄存器地址和寄存器数据结构定义文件
<system_stm32f10x.c><stm32f10x.h>
(2)内核相关文件
<system_stm32f10x.c>|<system.stm32f10x.h>|<core_cm3.h>|<core_cm3.c>
(3)外设驱动文件
<misc.c>|<stm32f10x_ppp.c>|<misc.h>|<stm32f10x_ppp.h>
(4)启动文件
< startup_stm32f10x_hd.s>
(5)还有中断服务函数,系统时钟初始化,包含外设等函数相关的文件。<stm32f10x_it.c>、<stm32f10x_it.h>、<stm32f10x_conf.h> 。
外部设备初始化:
由于STM32的外设很多,为了降低功耗,每个外设都对应着一个时钟,在芯片刚上电的时候这些时钟都是被关闭的,如果想要外设工作,必须把相应的时钟打开。使用的GPIO口也要根据作用,对输入输出方式,传输速度等进行设置。因此要先将模块使用的GPIO口进行配置,在标准库中,已经有宏定义定义了GPIO口对应的寄存器的别名,并且将这些配置封装在一个结构体中。所以只要打开时钟,配置功能结构体就可以完成外设的初始化操作。。
因为MRC522使用的是SPI方式与STM32通信,因此除了配置对应GPIO口的结构体,还需要将其GPIO口功能设置为SPI模式。并且设置SPI传输模式、相位和极性、传输速度。
本次设计中的液晶显示控制器ILI9341通过8080接口和STM32通信。如果使用普通的GPIO口进行模拟,效率很低,在STM32中使用FSMC外设来管理扩展存储器,因为想要在液晶屏上显示数据,就要通过接口把数据写入到内存上,这个和FSMC控制存储器相似。经过验证,可以使用FSMC接口来实现8080的通信时序,从而控制液晶显示屏数据显示。
触摸屏初始化的配置首先要开启时钟和端口引脚,模式配置,以及显示屏的各种参数设置。厂家已经提供了参数的配置数据,将封装好的函数文件直接包含到项目中即可。最终使用写入控制命令和写入数据两个函数来显示想要文字图片。
为了节约成本,没有进行外扩内存卡。只使用少量的内存,想要显示图片有些困难。为了实现基本的操作界面,采用循环写入像素点的方式,进行动态绘制操作界面。这个跟图像的显示很类似,但节约了内存空间,通过运算力来换取存储空间。
4.2 主函数功能
系统程序采用轮询的方式,当初始化完成,进入while循环,不断重复进行判断,当有操作时,执行对应的操作。主循环逻辑框图如图4.1所示。
首先进行主控芯片的初始化,调用各个初始化函数进行初始化。之后进入主函数,进入循环。接着在循环里,判断当前的菜单界面标志位,从而在屏幕中显示对应的界面。上电复位的初始状态位于主界面,触摸屏显示四个按钮,输入密码,增加IC卡,删除IC卡,修改密码。接着先进行判断是否识别到IC卡。跳转到识别IC卡的函数中去,如果当通讯范围内搜寻到IC卡,则执行IC卡验证函数。否则跳出,回到主循环。接着进入到触摸屏检测函数,如果触摸屏被按下,主控芯片对按下的位置进行判断。如果是按钮对应的位置被按下,则跳转到对应的界面的函数,同时界面标志位改变,液晶显示屏进行刷新。如果不是,则回到主函数,进行下一轮的循环。
图4.1 主循环逻辑框图
文章底部可以获取博主的联系方式,获取源码、查看详细的视频演示,或者了解其他版本的信息。
所有项目都经过了严格的测试和完善。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。