当前位置:首页 > 单片机 > 单片机
[导读]历时7天,跨度两个多星期,才将微型四轴的遥控器调试好,中间除了备考两科考试,其余时间全在宿舍蹭网消磨青春,不得不说状态不好,实际上内心也极度的空虚。之前将微型四轴的机体做好,迫不及待的进行了一下测试,天

历时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的时钟系统因其灵活性和复杂性成为开发者关注的焦点。然而,看似简单的时钟配置背后,隐藏着诸多易被忽视的陷阱,轻则导致系统不稳定,重则引发硬件损坏。本文从时钟源选择、PLL配置、总线时钟分配等关键环...

关键字: STM32 时钟系统

在嵌入式系统开发中,STM32系列微控制器的内部温度传感器因其低成本、高集成度特性,广泛应用于设备自检、环境监测等场景。然而,受芯片工艺差异和电源噪声影响,其原始数据存在±1.5℃的固有误差。本文从硬件配置、校准算法、软...

关键字: STM32 温度传感器

在能源效率与智能化需求双重驱动下,AC-DC转换器的数字控制技术正经历从传统模拟方案向全数字架构的深刻变革。基于STM32微控制器的PFM(脉冲频率调制)+PWM(脉冲宽度调制)混合调制策略,结合动态电压调整(Dynam...

关键字: AC-DC STM32

当前智能家居产品需求不断增长 ,在这一背景下 ,对现有浇花装置缺陷进行了改进 ,设计出基于STM32单片机的全 自动家用浇花机器人。该设计主要由机械结构和控制系统构成 ,机械结构通过麦克纳姆轮底盘与喷洒装置的结合实现机器...

关键字: STM32 麦克纳姆轮 安全可靠 通过性强

用c++编程似乎是让你的Arduino项目起步的障碍吗?您想要一种更直观的微控制器编程方式吗?那你需要了解一下Visuino!这个图形化编程平台将复杂电子项目的创建变成了拖动和连接块的简单任务。在本文中,我们将带您完成使...

关键字: Visuino Arduino ESP32 STM32

‌MSP430电容触摸‌是指使用MSP430微控制器(MCU)实现的电容触摸感应技术。MSP430系列MCU以其低功耗和丰富的外设模块著称,特别适用于电容触摸应用。

关键字: MSP430

基于STM32与LoRa技术的无线传感网络凭借其低功耗、广覆盖、抗干扰等特性,成为环境监测、工业自动化等场景的核心解决方案。然而,如何在复杂电磁环境中实现高效休眠调度与动态信道优化,成为提升网络能效与可靠性的关键挑战。本...

关键字: STM32 LoRa

在实时控制系统、高速通信协议处理及高精度数据采集等对时间敏感的应用场景中,中断响应延迟的优化直接决定了系统的可靠性与性能上限。STM32系列微控制器凭借其灵活的嵌套向量中断控制器(NVIC)、多通道直接内存访问(DMA)...

关键字: STM32 DMA

数字电源技术向高功率密度、高效率与高动态响应方向加速演进,STM32微控制器凭借其基于DSP库的算法加速能力与对LLC谐振变换器的精准控制架构,成为优化电源动态性能的核心平台。相较于传统模拟控制或通用型数字控制器,STM...

关键字: STM32 数字电源

STM32微控制器凭借其针对电机控制场景的深度优化,成为高精度、高可靠性驱动系统的核心选择。相较于通用型MCU,STM32在电机控制领域的核心优势集中体现在FOC(磁场定向控制)算法的硬件加速引擎与PWM死区时间的动态补...

关键字: STM32 电机控制
关闭