利用无线龙的ARM-STR911_BS的系统,这个系统最大的特点是将无线和ARM结合起来,让我的思路顿时开阔了许多。我的系统中配备的是CC1100的模块,这个模块还不错,他是一款低功耗、中长距离收发、高可靠性的无线模块,缺点就是没有自己的MCU,不过不要紧,我可以通过ARM的SPI口来控制它。从系统的特点看这套系统的特点还是很符合无线鼠标低功耗,高可靠性的要求的,于是产生了做一个无线鼠标的念头。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
我的这个无线鼠标主要由三部分组成,无线发送,无线接收和USB鼠标三部分组成,整个系统框图如图一所示:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
图一
发送设备是通过键盘获取状态后,通过无线的方式将数据发送出去,然后借助USB2.0协议,和计算机连接,形成一套完成的无线鼠标控制链。
1. 无线发送部分。
无线发送部分的作用主要是在远程发送一个按键值或者信号量给接收端。根据图一的发送设备框图可以看出,发送设备由键盘(为了方便实验,我用键盘代替了鼠标的按键和滚轮,其实原理相同)和无线两部分做成,ARMRF-STR911-BS开发板中已经将这些硬件完全具备了,它由一个摇杆按键和一个独立的按键组成,电路原理图如图二所示:
图二
摇杆共设立了5个键,分别表示了上、下、左、右、左键,我们将另外的一个键KEY6做鼠标右键使用。表一为按键对照表
表一
按键编号(功能) | 对应端口 |
KEY1(左键) | P60 |
KEY2(下) | P61 |
KEY3(左) | P62 |
KEY4(右) | P63 |
KEY5(上) | P64 |
KEY6(右键) | P65 |
无线部分直接采用无线龙的CC1100模块,由标准的接口,如图三所示,可以直接使用啦。!
图三
程序设计:
根据发送部分的功能,我们只需要将按键值获取,然后发送出去就可以了,为了保证通讯质量和不受外来数据的干扰我设定了一个数据格式:“0x00,0x00,0x00,0x<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />00”,其中第三个为鼠标的控制数据。数据设置为“上下左右左键和右键”六个功能。
程序的实现:
2. 接收部分
接收部分是将无线数据收集起来,并存放为USB鼠标备用,该部分的硬件和发送部分完全相同,因为CC1100是同时具有收发功能的。我们看看程序部分的实现。
3. USB鼠标部分
硬件设计
USB部分是这个系统的关键,我们需要使用USB2.0的协议,很开心的是,STR911的USB协议已经由ST公司提供,所以我们不需要自己编写该协议,可以直接使用。这样的话和计算机连接部分的驱动程序也不需要再编写,我们只需要将计算机需要的数据发送上去就可以了。我们来看看USB的硬件电路,如图四所示:
图四
软件设计:
USB控制鼠标有自己的一个协议,它其实也是一段数据,当USB调试通过后,我们需要让计算机和USB连接,也就是我们常说的驱动程序,这一块ST公司已经做好,直接调用就可以了,关键的步骤是,我们怎么才能达到控制的目的。在软件设计前我们先看看HID设备的协议。
USB鼠标的通讯数据一共由四个数据组成,一般放在一个数组中,第一个元素为控制左键和右键,第二个元素为x方向坐标值,第三个元素为Y方向坐标值,第四个元素为滚轮的方向,如果为负数则向上翻滚,如果为正数则向下翻滚。详细请看表2
表2
功能 | 第1个元素 | 第2个元素 | 第3个元素 | 第4个元素 |
左键 | 0x01 | -- | -- | -- |
右键 | 0x02 | -- | -- | -- |
上 | -- | -- | 负数(绝对值为步长) | -- |
下 | -- | -- | 正数(绝对值为步长) | -- |
左 | -- | 负数(绝对值为步长) | -- | -- |
右 | -- | 正数(绝对值为步长) | -- | -- |
滚轮上 | -- | -- | -- | 负数(绝对值为步长) |
滚轮下 |
|
|
| 正数(绝对值为步长) |
一切明朗了吧,我们只需要用发送端控制发送的数据为鼠标需要的数据就可以实现无线鼠标了。
在了解了这些协议后,我们将接收部分接收的数据取出来,然后通过USB发送上去就可以控制鼠标了,我们开看看程序是怎么实现的把:
一个鼠标就完成了,经过测试,数据的可靠性很高,能够达到预期的效果,现在还没有加上低功耗的设计,以后会慢慢改善。
小弟第一次写技术文章,欢迎指正,希望与大家交流,并一起共勉。
文章评论(0条评论)
登录后参与讨论