体感游戏手柄的设计与实现-智能遥控器
2012-11-11 09:44:47   来源:微迷   评论:0   点击:

基于高端智能电视的需求和发展趋势,提出了基于HID规范的体感游戏手柄,应用于智能遥控器中的设计方案和实现方案,详细叙述了智能遥控器的RF收发器端与电视机之间的通信过程,最终实现体感游戏手柄的功能。

摘要:基于高端智能电视的需求和发展趋势,提出了基于HID规范的体感游戏手柄,应用于智能遥控器中的设计方案和实现方案。在对智能遥控器各个功能模块分析的基础上,设计了体感游戏手柄实现的硬件电路方案。根据自定义的数据包格式,介绍了在智能遥控器的RF收发器端实现具有输入和输出功能的体感游戏手柄的软件方案,详细叙述了智能遥控器的RF收发器端与电视机之间的通信过程,最终实现体感游戏手柄的功能。

USB具有高速度、低成本、低功耗、即插即用和使用维护方便等优点,随着USB应用领域的逐步扩大,USB设备现在不但是计算机连接外围设备的标准输入/输出,它也成为智能电视连接外围设备的标准输入/输出。HID是Human Interface Devices的缩写,即人机接口设备,是USB协议中最早提出并支持的一种设备类,也是应用最广泛的一类USB设备, 典型的HID设备有键盘和鼠标等。USB串行总线规范专门定义了HID规范,只要设备符合HID规范,就是HID设备。操作系统自带了HID的驱动程序,用户无需去开发很麻烦的驱动程序,这使HID设备能够与操作系统方便快捷的建立通信。

这些优点使得HID设备在智能电视领域也得到了越来越广泛的应用,本论文就是研究基于HID规范的六轴体感游戏手柄应用于智能遥控器中的设计与实现。

1 工作原理

智能遥控器包括两部分———遥控器和RF接收器(Dongle),遥控器端和Dongle端采用射频通信协议进行通信;而Dongle端通过USB接口与智能电视连接,它们之间通过USB协议进行通信。依据HID规范,在Dongle端模拟出一个具有输入和输出功能的HID体感游戏手柄, 与电视机通过USB协议进行通信,从而将遥控器和体感游戏手柄合二为一。

Dongle端与遥控器端对码成功之后,它们之间就建立了通信。智能遥控器中体感游戏手柄功能的开启和关闭主要是通过智能电视的反馈信息实现的。按下智能遥控器端的体感开关键时,电视机收到信息立即发出反馈信息,使智能遥控器端的体感开关指示亮,体感游戏手柄功能开启,用户可用智能遥控器体验体感游戏,智能电视会根据游戏的进度调用智能遥控器中的传感器模块、震动模块、Audio模块,实现智能遥控器和智能电视之间的互动;再按下智能遥控器端的体感开关键时,智能电视发出反馈信息使智能遥控器端的体感开关指示灯灭,体感游戏手柄功能关闭。

体感游戏手柄的操作方式主要是按键和特殊动作。在本系统中,体感游戏手柄所需的按键与遥控器本身的按键复用,特殊动作的数据转换成相应的射频键值,当有特殊动作操作时,以按键键值的形式发送出去。另外,体感游戏手柄特殊动作的功能可以用于操作智能电视的TV部分, 在体感游戏手柄模式下,遥控器通过计算传感器的数据,检测出向左右甩动和向前甩动一下、两下4个动作,可作为切换图片、音乐等使用。比如向右甩为后一曲,向左甩为前一曲,向前为播放暂停,向前快速两下为退出。

2 系统组成

2.1 硬件系统

智能遥控器有许多功能,这里主要研究体感游戏手柄功能的设计与实现。涉及到的芯片主要有六轴传感器———三轴加速度计(G-Sensor)和三轴陀螺仪(Gyro)与MCU,采用的加速计是ADXL345,陀螺仪是IMU3000,MCU是IA2E。Dongle端采用的MCU也是IA2E。

2.1.1 ADXL345、IMU3000和IA2E性能简介

ADXL345是一款小而薄的超低功耗三轴加速计,分辨率高(13位),测量范围达±16g。可通过SPI(3线或4线)或I2C数字接口访问,ADXL345非常适合应用于移动设备。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。其高分辨率(3.9 mg/LSB),能够测量不到1.0°的倾斜角度变化。

IMU-3000内建了三轴陀螺仪与数字运动处理硬件加速引擎,并具有第二条I2C接口来连接外接数字加速器,以执行完整的六轴融合算法。在应用层面上,将线性及旋转动作合并为单一的数据流。透过整合之融合算法输出,IMU-3000可减轻系统主处理器的密集运动处理演算,不须频繁读取运动感测数据,使之成为低成本、低功耗的微处理器。

IA2E是SYNIC公司的无线音频收发芯片,包含无线射频收发模块和USB接口模块,其USB模块包含一个控制端点,两个同步端点和一个双向中断端点。具有非常强的RF抗干扰特性。无需任何软件支持即可通过I2S、USB等接口连接到电脑、电视、MP3等设备。

2.1.2 硬件系统设计

在系统设计上, 遥控器和六轴传感器是两个分离的模块, 这样做的好处是传感器模块不影响遥控器的其他功能。

本论文主要介绍一下六轴传感器模块与MCU 之间的通信方式和Dongle 端模块的硬件系统设计。

首先,介绍传感器模块与MCU 之间的通信方式。它们之间通过简单的I2C 通信协议方式进行通信。具有体感游戏手柄功能的智能遥控器的遥控器端功能模块框图如图1所示。

智能遥控器端功能模块框图

图1 遥控器端功能模块框图

传感器模块与MCU之间的电路连接方式如图2所示。由于传感器模块需要3.3V的电源,而遥控器电路板上自带的电池是5V的,所以还需要一个电压转换电路。传感器模块中的G-sensor产生X轴、Y轴和Z轴方向的加速度数据,Gyro产生X轴、Y轴和Z轴方向的角速度数据。MCU通过I2C总线不断的轮询传感器模块来获取这些数据,并把这些数据分析整理成8个字节的数据包,再以2.4GHz射频通信协议打包发送给Dongle端。

传感器与MCU 之间连接的电路图

图2 传感器与MCU之间连接的电路图

Dongle端通过射频收发模块与遥控器端进行数据传输,通过USB总线与电视机之间进行数据传输。Dongle端模块的硬件电路比较简单,功能模块框图如图3所示, 采用单片机IA2E作为它的MCU。由于IA2E中包含了射频收发模块和USB接口模块,所以只需要一个MCU即可。IA2E集成了USB通讯中的底层协议, 具有省事的内置固件模式和灵活的外置固件模式,它只是负责数据交换,所以单片机程序设计非常简洁。另外,可以在Dongle端设计LED灯电路模块,不仅美观,而且可以辅助软件更好地实现体感游戏手柄的功能,还可以用来标识电视机的工作状态,保证Dongle端做出正确的响应。

Dongle端功能模块框图

图3 Dongle端功能模块框图

2.2 软件系统设计

本系统所设计和实现的体感游戏手柄具有输入和输出的功能,即它具有输入和输出HID数据包。它不像键盘和鼠标是标准的HID设备,需要根据HID规范自定义它的数据包格式。根据数据包的格式,写出其报告描述符,以保证在枚举过程中正确识别出体感游戏手柄设备。Dongle端分析整理从遥控器端获取到的数据,根据设备的报告描述符,识别出体感游戏手柄数据,并把这些数据整理成符合其输入数据包格式的数据,然后Dongle端再以USB协议的通信方式,将整理好的数据传输给电视机。同时Dongle端接收电视机反馈回来的数据信息, 并整理成符合其输出数据包格式的数据,然后将信息反馈给遥控器端,遥控器端再作出相应的响应。

与所有HID设备一样,具有体感游戏手柄功能的智能遥控器Dongle端的应用程序设计也主要包括以下4个方面的工作:1)查找所有HID设备;2)确定哪一个是用户需要的HID设备,并连接该设备;3)获得HID设备的信息;4)根据用户需要,读取HID输入报告或者写入HID输出报告。

智能遥控器中可能定义了多个HID设备,需要使用两个接口,接口0用于实现其他HID设备的功能,接口1用于实现体感游戏手柄的功能。因此需要两个非零端点,因为同一配置下的不同接口,必须使用不同的端点。而数据是通过非零端点进行传输的,体感游戏手柄的接口选用端点2返回或发送报告数据。Dongle端通过端点2输入向电视机返回体感游戏手柄的数据,电视机通过端点2输出中断将反馈给遥控器的信息发出。

Dongle插入后,怎样让电视机识别出USB体感游戏手柄呢?设备枚举的功能就是实现电视机识别设备的过程,只有枚举成功了,电视机才能识别出设备,建立电视机与设备之间的通信。设备的枚举过程都是通过端点0实现的。电视机通过端点0输出中断发出各种请求,数据存放在端点0的输出缓冲区中。Dongle端读取并分析端点0输出缓冲区的数据,然后通过端点0输入中断做出相应的响应,数据存放到端点0输入缓冲区中,在电视机下一次发送IN令牌包后,MCU会自动将端点0输入缓冲区数据返回给电视机。当Dongle端有多个报告描述符时,程序怎么知道电视机请求的是哪个呢?电视机要获取报告描述符时,请求是发送到接口的。当电视机发出发送到接口1的报告描述符请求时,Dongle端会返回体感游戏手柄的报告描述符数据给电视机,从而成功完成枚举过程。电视机识别出体感游戏手柄,建立它们之间的通信。

在本系统中,通过在芯片的集成开发环境中添加USB模块,根据实现设备的功能特点,做出相应设置并编译,实现设备枚举过程的功能及所需的代码,然后再根据设备的实际需求做相应的修改,在Dongle端程序的主函数中初始化USB模块,就可以实现电视机识别Dongle,进而识别出体感游戏手柄设备。Dongle端程序主流程图如图4所示。进入主函数,MCU首先完成一系列初始化,包括中断配置和USB模块初始化(开始枚举过程)。然后程序就处于一个无限循环中,实现电视机和设备之间的实时通信。

Dongle 端程序主流程

图4 Dongle端程序主流程

智能电视和设备之间不是随时都能够进行通信的,只有设置了非零配置之后才能进行数据传输。在无限循环中,首先判断电视机和Dongle端的通信是否准备好,即设备的枚举过程是否成功完成。这需要获取配置值,进行判断,若配置值非零,说明智能电视和Dongle端的通信已建立。Dongle端不断的获取从智能遥控器端发来的数据,根据设备的设备描述符、配置描述符集合(包括断点描述符、接口描述符等),分析整理后存放到相应HID设备的HID包中, 然后通过USB总线传递给智能电视。

若按下体感开关键,智能遥控器选择的是体感游戏手柄功能;否则,智能遥控器选择的是其他设备的功能。按下体感开关键,智能电视先通过端点2输出中断发出反馈信息,使智能遥控器端的体感开关指示灯亮,体感游戏手柄功能打开,然后智能遥控器可以发送体感游戏手柄数据给智能电视。Dongle端发送体感游戏手柄数据到端点2之前,需要检查端点2是否处于空闲状态,即里面是否还有数据未发送出去,可以通过端点2输入中断和总线复位中断使端点2处于空闲状态。如果端点2输入处于空闲状态,就可以通过端点2输入返回体感游戏手柄数据给电视机了。电视机会根据游戏的进度发出反馈信息,调用遥控器的传感器模块、震动模块和Audio模块,实现智能遥控器和智能电视之间的互动。

3 结束语

本系统是基于HID规范的六轴体感游戏手柄应用于智能遥控器中的设计与实现,首先分析了这种体感游戏手柄的工作原理,然后从硬件系统和软件系统两方面提出了体感游戏手柄设计与实现的方案。在智能遥控器中可能有多个HID设备功能的情况下,通过共用一个USB接口再实现体感游戏手柄的功能。经过反复调试验证表明,具有这种六轴体感游戏手柄功能的智能遥控器工作性能良好,完全可以取代普通的体感游戏手柄体验体感游戏。另外,可以基于此硬件系统和软件系统,遥控器端对传感器的数据进行相应处理后传输给Dongle端,Dongle端可以模拟实现其他功能,譬如进一步实现空中鼠标的功能。

相关热词搜索:智能电视 智能遥控器 体感游戏手柄

上一篇:运动监测解决方案
下一篇:生命体征监测服