## PS游戏摇杆
在PS2和PSP游戏机中常用的游戏摇杆可以用在嵌入式系统中作为一种模拟量的输入工具,一方面可以学习对模拟电压的采样和处理,通过模拟电压对MCU进行控制,同时还可以引入一些算法,使输入的控制更加平滑。比如在基于RP2040设计的嵌入式系统学习平台中使用了FJ08-N摇杆作为主要的输入方式,不仅可以用于游戏的操控,还可以制作控制LCD显示的全屏指针以及通过USB连接到电脑的”鼠标“功能。
{{ :rp2040gamekit.jpg |基于RP2040设计的嵌入式系统学习平台}} 基于RP2040设计的嵌入式系统学习平台
### 1. 介绍
游戏摇杆本质是有2个电位计构成,通过测量电位计上的电压分压可以确定游戏x、y轴的位移
{{ :joystick.jpg?300 |}} PS游戏摇杆
在我们基于RP2040的嵌入式系统游戏机平台上选用的是FJ08K-N的游戏摇杆,图片如下:
{{ :fj08k-13035235.jpg?300 |}}RP2040游戏机平台上选用的游戏摇杆电位计
关于这个游戏摇杆电位计的技术资料详见:
{{ fj08k-2017-02-07-07-29-33.pdf|FJ08K- N游戏摇杆电位计的数据手册}}
### 2. 工作原理
{{ :joystickconnect.png |}} 电路连接关系
{{ :fj08n_sch.png |}} 我们使用的这个游戏摇杆没有内部按键,只有两个电位计,阻值为5KΩ ~ 100KΩ
### 3. 电路连接
为了测量游戏摇杆分压管脚的电压值,需要给电位计的1、3端提供直流电压(比如3.3V),将分压管脚连接到MCU或FPGA的ADC输入端(或外置的ADC输入端),通过ADC将模拟电压量化后做进一步的判断,连接方式如下图 - 在RP2040游戏机中的摇杆连接方式,X和Y轴的两个分压管脚分别连接到RP2040的连接到:
* X轴 - IO28/ADC2
* Y轴 - IO29/ADC3
RP2040内部的ADC为12位,可以将摇杆的电压0-3.3V量化为0-4095.
{{ :fj08k-n_conn.png |}} RP2040游戏机中的游戏杆电路连接方式
### 4. MicroPython代码(MCU)
参见[[mp_joystick]]
### 5. 视频演示
* [[https://www.bilibili.com/video/BV13M4y1w7uf?spm_id_from=333.999.0.0|如何使用摇杆控制舵机]]
* [[https://www.bilibili.com/video/BV1Ku411D7jY?share_source=copy_web|使用CircuitPython设计摇杆鼠标]]
### 6. 相关项目
* [[https://www.eetree.cn/project/detail/698|基于树莓派RP2040的嵌入式系统学习平台]]
### 7. 参考设计文档
* [[https://www.iottrends.tech/blog/how-to-interface-an-analog-joystick-with-raspberry-pi-pico/|How to Connect an Analog Joystick to Raspberry Pi Pico]]
* [[https://blog.thestaticturtle.fr/getting-started-with-hid-and-the-pi-pico/|Getting started with HID and the Pi Pico]]
* [[https://github.com/adafruit/Adafruit_CircuitPython_HID|Adafruit基于CircuitPython的USB HID驱动]]