前言:前段时间在研究CH552G这个单片机,就浅浅的学了一下鼠标键盘的HID模拟,之后就在想着找个摇杆模块做个摇杆鼠标之类的,找来找去就找到了joycon的摇杆,有一说一这个小摇杆手感真的舒服,但是在网上找相关资料的时候就犯了难,网上还真的没多少资料来让我研究。即使如此,我还是买来准备研究研究。
注意!注意!本文中的图片和文本中的所有VCC与GND全部标反了,请在实际运用中注意这点,以免造成损失!!!
具体原因请翻至本文末尾,有一些解释说明
买来之后发现,这个摇杆跟我想的一样,有5个引脚,标准的0.5间距FPC接口:
这样就方便了,因为以我对摇杆的理解,摇杆这东西,肯定是由两个电位器和一个button组成的,算上VCC和GND,正好是5个接口。
在理论基础打好后我就开始使用万用表一个个测阻值,来确定VCC和GND,确定这两个之后在以此为基础测量出X轴和Y轴两个引脚,最后按住用蜂鸣档测通路,于是便得到了下面这张IO引脚定义图(图中VCC与GND未更正,注意): 知道引脚定义了不就简单了嘛,简简单单通过ADC电路驱动就行了,但是别着急嘛,毕竟是我的教程,当然会给出一些额外参数的嘛。
以图片显示方向:
右方向推动ADC-X增加;左方向推动ADC-X减少;
上方向推动ADC-Y增加;下方向推动ADC-Y减少。
除此之外,通过STC15f2k60s2自带的ADC采集,定义使用8位分辨率来进行ADC采集,在摇杆不动的时候测得数据如下:
ADC值 | 抖动范围 | |
X轴 | 128 | ±2 |
Y轴 | 123 | ±2 |
分别在摇杆上下左右推到底的时候在看测量值,得到数据如下(方向和图示一致):
X-MIN | X | X-MAX | |
X轴 | 42 | 128±2 | 234 |
Y轴 | 33 | 123±2 | 225 |
注意:关于Key按键按下时IO口读取的问题
因为有电位器的存在,如果使用传统8051引脚进行电平读取的话,是读取不到低电平的,我的理解是因为电位器上方接VCC,所以同等于对这个IO口进行了上拉操作(不知道这么理解对不对)。
那么这个问题怎么解决呢?其实很简单,在初始化输入引脚为高电平后,同时在输入IO口加个4.7k的下拉电阻就可以让IO口读取到摇杆按下时候的低电平了。
分割线===========================================================
上文写于2022年7月13日,由于当时购得的是便宜的碳膜摇杆,所以VCC与GND的定义本身很模糊,而前段时间在研究CH582的2.4G遥控又想起了这个小玩意儿,所以又拿出来尝试使用,结果竟然因为长时间不用而产生了阻值漂移的现象,所以花的贵一点的买了个霍尔摇杆,这时候也是在这时候发现,VCC和GND标反了,上电摇杆都在发烫,吓得我赶紧拔下来,经过思考后才感觉是接反了,实践后发现果然接反了。
其次,Key键是没有上拉电阻的,其在没按下的时候是完全悬空的,按下时与GND接触,在实际使用时需要对VCC外加上拉电阻