基于MSPM0G3507的非接触门禁控制系统
1 项目简介
本文引用地址:https://www.eepw.com.cn/article/202501/466478.htm在一些特殊的场所,比如传染病病房、手术室等需要严格区分污染区与非污染区的场景,对于非接触来替换一些按键等,就非常有意义。本项目是通过手势传感器来控制隔离门禁的案例。
控制端在正常接收到门禁端的状态信息后,获门禁位置信息,同步显示到OLED 屏上。当手势传感器捕捉到指定动作后,通过CAN 总线发送手势指令。
门禁端在启动后执行自检,将起点到终点的位置检测好,并把运行一次的时间打包通过CAN 总结发送出来。门禁端在接收到指令后,与本身的位置相结合,执行相应的指令。通过PWM 来产生指定频率的脉冲驱动步进电机,通过DIR 高低电平设置来改变电机运行方向,通过滑台来实现门禁的打开与关闭功能。
实现功能,手势向上,关闭门禁,手势向下,打开门禁,手势下压,急停。
2 硬件结构图
1.1 Bom表(写明器件型号);
1.2 软件开发:
【开发平台】
Code Composer Studio Version: 12.7.0.00007
【外设的配置】
本项目主要的外设由IIC、PWM、CAN 来驱动。
1.1.1 IIC 的配置
配置为1M 的速率,同时开启收接中断,配置发送与接收的缓冲区。
1.1.2 PWM的配置
选择pwm0,以及通道0 为输出,配置输出1KHz的输出波形,占空比50%。
配置输出的IO为PB0
1.1.3 CAN的配置
配置仲裁速率为250K,数据传输速率为2M。
选择RX为PA13,TX为PA12
保存后生成工程。
【公共代码】
CAN发送与接收代码
1.CAN接收中断函数的实现:
代码中如果有CAN 的数据接收,则更新接收标志
gServiceInt。
在主循环中判断接收接收标志位,如果为真则调用数据处理函数
在数据处理函数中,如果是门禁端,则判断是否为命令的ID,如果是则根据命令设置电机运行方向:
在控制端则对接收的ID 进行判断,并进行数据解析:
CAN发送:
在进入主循环中,先对CAN的数据进行初始化:
【PWM】
在pwm代码方面只需要启动或者关闭定时器就行了。
【IIC 驱动】
在工程中添加i2c 的驱动封装i2c_app.c/h
这个驱动封装了读写两个驱动,可实现与硬件低层的解耦。具体代码见附件。
【OLED】
使用公有的OLED 驱动库,只需要封装OLED_WR_Byte 即可实现驱动的移植。
手势传感器有现成的驱动库,我这里只需要添加iic的读写驱动即可。
【PAJ7620 手势传感器】
PAJ7620 移植驱动,与OLED 一样也只需要重写读写函数即可以完成驱动的移植
以上是主要代码的介绍。
【程序流程图】
门禁端
控制端
3 项目总结
本项目主要是在利用Ti 的MSPM0G3507 这颗优秀的MCU 来实现特殊环境下的无接触的门禁控制,可以实现多点对一点控制,一对多的数据交互。
整个项目的亮点就是MSPM0G3507 拥有80M 主频, 搭载了FDCAN 高速总线, 可以轻松实现多个MCU 的组网,相比传感的485 的总线组网有质的提升,FDCAN 总线可以实现多对多的组网。同时这个MCU还有高速的IIC 总线,可以实现一路IIC 驱动多个如OLED、PAJ7620 的外设。
同时使用了MSPM0G3507 的PWM 外设,可以精准的驱动步进电机。实现如门禁等电机控制场景。
(本文来源于《EEPW》202501)
评论