历时7天,跨度两个多星期,才将微型四轴的遥控器调试好,中间除了备考两科考试,其余时间全在宿舍蹭网消磨青春,不得不说状态不好,实际上内心也极度的空虚。
之前将微型四轴的机体做好,迫不及待的进行了一下测试,天真的以为,飞机不用遥控器也可以,实际上我设想的是直接用手头的开发板对其进行简单的增减速,为此我还 特意为它写了一个触摸控制界面,只有三个触控点,一个加速,一个减速,一个停止,非常无聊。
后来发现,没有一个遥控器真的非常不方便,周六便去二手市场仅用5元便淘得一飞机遥控器,里面电池都还没用完,质量算上乘。这遥控器是红外遥控的,用手机看了下红外管,能够正常发光实际上,我当然最希望直接对现有电路进行一下线路修改就实现最方便了,事情往往没有那么顺利。
仔细端详了这块板子,一大堆的元件,右上角唯一的一块芯片却也被磨去型号,对于我这种电路经验较少的青年自然无从下手,遂决定重新开发一块。但是为了能够跟原先机壳匹配,电路的摸样和尺寸,完全根据原板用尺子测量而规划。
遥控器板子采用低功耗MSP430G2553主控,NRF24L01发射遥控信号。对于操纵杆,说白了就是一个双方向和一个四方向的电位器,通过430内部AD采样便可得到操纵命令,电路十分简洁。实际上,遥控器的程序也相当的简单,就我目前需要实现的功能来看。只需要根据AD门限值判断出 上下左右 的方向,然后直接发送给接收机即可。电源稳压用ASM1117-3.3V实测它的压降有1V,所以至也得4.3V供电,事实上买回来这破东西的时候里面就残存有6节干电池,测了一下电压还有6V,足够我调试挥霍。实现代码如下:
在遥控板子左上角的排针是我预留的程序调试和烧写端口,同样的为了方便,我并不需要再做下载器了,直接采用TI推出的大学计划的LaunchPad可以完美的实现程序调试和烧写,这块LaunchPad最值钱的地方就在于它的仿真器,官方才卖8美元,而一个430仿真器市面价格是200,上学期学校给了一块比赛用,电子工程师之家网站又送了我一块,那块G2553就是我从上面抠下来的。
当然,最为重点的地方便在于接收端了,怎么实现接收到的数据能够操控电脑游戏?这点由于之前我做了有线重力感应的游戏遥控器,我试图仍然采用此方法,就是通过STM32把命令接收下来,然后通过串口传到我的VC上位机,用上位机的程序实现键盘敲击的命令。
VC上位机上,我同样用的是keybd_event事件来实现按键的按下和弹起。
那天晚上我测试了电脑上的所有程序窗口以及几个小游戏,发现都没有问题,可以实现操控,第二天我想正式在极品飞车上测试的时候,终于暴露除了问题,根本没有效果!是的,VC的这段代码在游戏里面无法实现操控,为什么其它的程序可以,而就是这大型的游戏不行,后来百度查了一下,终于看出点端倪,好像是说这种游戏的操作用的那种操控方式是直接读取电脑键盘的那个端口来接收命令的,我用VC写的那段代码实际上只是模拟出了系统按键而已。网上也没有给出解决方法,后来我问了下一个以前通过影子系统认识的一位程序开发工程师,他告诉我用Winio来向键盘端口写入命令达到驱动级的命令试试。
后来发现,效果是一样的,并且由于我对VC++编程经验不丰富,直接操作了端口导致给电脑带来了不好的后果,导致了我笔记本的键盘按键出现了紊乱,当然对于我的电脑这一切都不是问题,由于Powershadow的保护,很多问题重启之后便得到了解决。
我不相信用VC不可以实现,但是这已经涉及到计算机的端口这些跟底层相关的东西,专研下去对我来讲太困难,毕竟缺少专业的知识和经验。经过考虑我终于还是决定采用比较简单的方案,直接通过单片机模拟出键盘的PS/2协议,让电脑就认为它是一个键盘,这样子,所有的操作对于电脑的任何程序必定都是有效的。PS/2的协议相对来讲,也是比较简单,跟串口有点类似,一个时钟脉冲发送一位数据,只要知道键盘的编码,给电脑发过去就OK了。
对于该时序的实现代码如下
而键盘的扫描码可以查表获得,分为通码和断码,对于键盘来讲,按键按下的时候就是向电脑发送了通码,释放的时候,就是给电脑发送了断码,这个我用示波器也看过键盘的波形,为此发波学弟还特意给我抱来一台数字示波器,真心非常的感谢。
键盘的协议有些比较有趣的地方,比如,你先按下‘上’不放,然后按下‘左’,那么就只有‘左’是有效的了,并且此时你放开‘左’,‘上’虽然依旧按下,但是它已经无效了。那为什么在游戏里面我可以同时按下上和右,并且它们都是有效的呢,因为游戏里面只要收到按键的通码之后没有收到到按键的断码,那么它都是在执行命令的。而这段协议可以通过以下代码实现。
整个接收电路我直接用开发板兼万用板搭了个简单的3.3V转5V电路实现,显得有些凌乱,但不缺美丽。为了能够在我I5处理器的acer上实现当然还得PS/2转USB接口
最后,进行《极品飞车》实战测试
实际上,我很少玩游戏,但是也略懂,在《极品飞车》里除了控制方向键之外,还有按ALT键液氮加速的,当然我也考虑到了这点,事实上,我在遥控器的板子上预留了两个按键专用的端口,可以实现。
上一篇:STM32 USB设备电路设计
下一篇:基于cortex-M3、ADXL345的重力感应遥控器的实现
推荐阅读最新更新时间:2024-03-16 15:43