基于Verilog的智能小车手势控制系统设计
2022-01-14皮睿思庄萃萃
李 鹤,皮睿思,庄萃萃
(河北科技师范学院物理系,河北 秦皇岛,066004)
智能小车是智能机器人的一种,它可以进入到各种人类无法抵达的环境中,完成人类无法完成的工作[1~3]。人们可以通过将更多的技术应用于智能小车上,可以让它越来越“聪明”[4]。当前研究中,对于智能小车控制系统的研究主要集中在遥控控制和自动控制两种方式上,而在遥控控制领域中,不管是直接使用遥控器还是将遥控按键虚拟到手机app或者其他专门程序中,都缺少与人类的直接互动。手势识别技术是一种非接触的直接互动模式[5~7],将手势识别技术则应用于智能小车[8,9],通过简单的手势代替复杂的指令来对小车进行控制,可以丰富人们对智能小车的控制手段,降低控制难度。为此,笔者试验了利用Verilog HDL在FPGA芯片上进行手势识别模块的驱动,采集信号并对信号进行处理,得到手势所对应的控制信息,驱动智能小车进行移动,以达成利用手势对智能小车的移动进行控制。
1 智能小车手势控制系统方案
智能小车手势控制系统总体设计见图1。
图1 智能小车手势控制系统设计框图
(1)手势识别模块与FPGA开发板之间通信,实现手势识别模块准确识别手势信息后,发送给FPGA中的数据收发模块。
(2)由FPGA解析数据收发模块接收到的手势信息,经过内部数据处理转换,发送给驱动模块。
(3)驱动模块接收到信息后,驱动减速电机,进而驱动小车。
2 智能小车手势控制系统的硬件设计
智能小车手势控制系统的硬件设计方案见图2。
图2 智能小车手势控制系统的硬件部分
2.1 核心板
采用基于Cyclone IV系列的FPGA开发板。芯片型号为EP4CE10F17C8,板上配有5 V和3.3 V电源,多路扩展口和I/O口,多路GND。
FPGA内部硬件设计主要有4部分,分别为与手势识别模块通信的IIC驱动模块和轮询模块;与电机驱动模块通信的信号控制模块;从IIC数据获取手势信息并处理为驱动信号的处理模块以及PLL锁相环。
2.2 手势识别模块
采用PAJ7620U2手势识别传感器模块,该模块对环境光有一定的免疫力,其电源电压和I/O电压要求都符合FPGA输出范围,易于连接,端口通讯方式为IIC总线,支持读写,尺寸仅为25 mm×20 mm。PAJ7620U2手势识别传感器模块外观见图3。
图3 智能小车手势控制系统的手势识别传感器模块
手势识别传感器模块的外部端口处可插入1×6的排针,通过杜邦线同外部相连接(图4)。共有VCC,GND,IIC_SDA,IIC_SCL,IIC_INT等5个信号端口。其中,IIC_SCL,IIC_SDA和IIC_INT等3个端口内带4.7 kΩ上拉电阻,因此无需再添加电阻。
图4 智能小车手势控制系统的手势识别传感器模块原理
传感器可识别9种手势类型。手在传感器开窗口位置的上方,保持与传感器的垂直距离,做出图5中所示的手势,可识别得出“上”“下”“左”“右”“顺时针旋转”“逆时针旋转”“挥动”“前”“后”的识别结果。
图5 手势识别传感器模块的可识别手势
2.3 电机驱动模块
采用L298N电机驱动模块,可以同时输出两组信号,分别控制两个电机实现匀速、差速、加减速转动,可以实现小车的各种运动。供电范围为5~7 V,同样可以由FPGA板驱动,而输出峰值电流高达2 A,输出峰值电压高达46 V,可以驱动大部分电机。该驱动模块尺寸为60 mm×54 mm,可以装置在小车底板上,符合本设计中的需求。图6为电机驱动模块原理图,表1为电机驱动参数真值表。
图6 智能小车电机驱动模块原理
表1 L298N电机控制参数真值表
注:0表示低电平,1表示高电平,x表示可为任意电平。
2.4 智能小车底座
采用两轮驱动智能小车底座,用两个电机实现小车运动。
3 智能小车手势控制系统的软件设计
FPGA硬件开发板作为主操控平台,对手势识别模块和电机驱动模块进行控制。本节将对FPGA内部电路控制和程序的主要控制形式进行细致论述。
3.1 系统上电及寄存器初始化
本设计系统在正常工作前需要进行系统上电及寄存器初始化操作,该操作针对PAJ7620U2模块。需要先发送包含设备(0×73)的指令,等待大于700 μs时间。可反复上述操作以确保发送成功。读取0×00寄存器的数值,若值为0×20,则往0×72寄存器(BANK1)中写0×01,开始工作。
唤醒成功后,进入寄存器地址需要往0×EF寄存器写0×00,访问寄存区域BANK0。BANK0中的0×41地址是中断使能寄存器。8个数据位分别对应于8个手势的识别结果,通过中断输出为1识别相应手势,识别到手势后0×43寄存器对应位置1。
IIC通信模块对寄存器0×43循环读数,并将读到的数据包去掉IIC通信格式,将单独的数据给数据处理模块,当数据不再是全零而其中有1位被置1时,则将相应的手势开始标志信号拉高。数据处理模块在手势开始标志信号的上升沿开始应用计数器将读出的手势指令执行一定时长(3 s),期间电机驱动模块将驱动对应电机运动。表2为中断使能寄存器真值表。
表2 中断使能寄存器(0×41)真值表
3.2 小车运动控制
根据减速电机控制状态,控制使能均为高电平的情况下,使两轮同时正转,并保持同样的电压和给电时间,实现小车直线前进;使两轮同时反转,小车后退;在左轮使能为低电平,右轮使能为高电平,并使其正转时,小车原地左转;在右轮使能为低电平,左轮使能为高电平,并使其正转时,小车原地右转。
4 结果及结论
整体测试中,各模块工作正常,对手势模块分别做出前、后、左、右的手势,每次动作至少持续1 s,观察小车运动状态和指示灯亮起情况。观察到小车分别前进、后退,左转,右转,每个状态都持续7 s,指示灯分别亮起,对应正确,达到预期设计效果。
本次设计采用FPGA芯片,PAJ7620U2手势识别传感器,L298N电机驱动模块,利用Verilog HDL进行通信程序、控制程序和驱动程序的编写,完成了手势控制智能小车运动方向的设计。