去年参加集创赛G了,很不甘心,今年再接再厉,结果还是G了。理想是丰满的,实力是不允许的,设计了很多功能上去,结果写不出来,赛区二等奖,差点就进了。学妹嫌弃我,跟别的学长走了。仿照NS设计可拆卸手柄。

主要器件:

1.PA1A60核心板
2.WM8960
3.ESP32-S3
4.LSM6DS3
5.CH343P
6.SHT30
7.GD32F150G8U6
8.STM32F103CBT6
9.LPS22HBTR
10.CH334
11.DS1337
12.TP5000
13.TPS63020
14.SY7088
15.EC190708

设计有以下功能:

1.长按开关机
2.运动操作(未实现)
3.温度湿度监测(未实现)
4.气压计高度控制(未实现)
5.双声道音频播放(未实现)
6.麦克风拾音(未实现)
7.3.5mm耳机孔录放(未实现)
8.tf卡读写储存(未实现)
9.HDMI输出
10.5V2A开关充电
11.板载Daplink
12.板载Al-link
13.ESP32无线控制
14.电池库仑计(未实现)
15.实时时钟(未实现)
16.触摸屏(未实现)
17.WS2812氛围灯(未实现)
18.RGB屏幕显示
19.震动反馈

手柄器件:

1.ESP32-S3
2.FM11C08S
3.TPS63000
4.EC170708
5.TP4054

手柄功能:

1.肩键
2.ABCD键
3.摇杆以及按压
4.长按开关机
5.有线/无线连接主机

别问为什么那么多(未实现),要是都实现了那就远远不止二等奖了。就是这些东西的代码没写出来罢了,时间来不及以及能力有限。

对于主机的设计,其实花了比较多的时间,首先是要把巨多的功能集成在主机里面原理图设计就花了不少时间,然后还要设计各种机械结构比较麻烦,尤其是两侧手柄的滑轨,还有就是必须使用PH1A60主控,就只好用硬木的核心板,就导致设计时的灵活性降低。值得一提的是两侧的滑轨,本来打算自己做弹簧设计个连接器,非常的麻烦,在和朋友聊天的时候突然想到了tf卡座,就想到把tf卡座侧着放就可以做滑轨连接器了,实际后来证明这是个不错的方案。还有就是电池,为了控制整机的厚度,不仅把排针排母换成了短款,还把核心板上面较高的器件也拆掉了,底部的电感也换了个小体积的,这样就能把电池塞进底板与核心板之间的空隙里面,尺寸最合适的电池只找到了2000mAh的,实测用HDMI例程可以跑将近8个小时。

HDMI:在设计HDMI电路的时候要主要,只能使用2.5V的bank,不然HDMI不工作,HDMI走线最好要等长,必须在信号线上面串联100nF耦合电容,有条件做一下阻抗。

USB:USB的信号线都是差分的,差分对内最好在工艺条件内近一点,差分对之间保持一定距离,可以做一下阻抗,实际上在这个板子上的USB都是走的全速,速度并不高,所以要求不是太严格。对于低速、全速、高速USB,分别要在D-、D+、D+上面接一个1.5k左右的电阻到3.3V,否则可能会不识别,有些hub,串口等芯片已经内置则不需要接。

ESP32-S3,得益于ESP32的交换矩阵,电路设计起来比较简单,但是要注意的是ADC2和无线是冲突的,尽量避开使用strap、JTAG的引脚,另外就是ESP32开启无线功能的时候功耗是比较大的,不太适合用ldo供电。另外一个重要的点就是晶振,务必需要调节晶振的电容,如果频率偏差太大的话,别的设备是无法识别到信号的,或者识别到但是无法连接,如果身边没有仪器的话,可以从小容值到大容值一次替换尝试,直到稳定连接,取一个中间值。如果有示波器,将示波器探头调节至x10档,如果测得晶振频率偏大,那么肯定是不正常的,因为示波器探头本身会引入电容,那么会使得晶振频率偏小,如果频率偏大,那么说明电容选小了。正常情况下,在示波器上测出的频率是要偏小的,但是示波器也只能做简单的判断,并不能测量出实际工作时的晶振频率。

板载下载器:因为主机不仅要下载FPGA、arm程序,还要串口调试、ESP32下载调试,所以USB连线就很麻烦,于是便集成了USB hub在板子上,只需要一根数据线即可完成所有下载调试。daplink这个就不用多少,网上开源项目很多。还有就是安路的下载器,买PH1A60的时候有配套的AL-link-mini下载器,然后测了一下发现这个下载器电路巨简单,USB信号接近去,然后4个io口出来JTAG信号,抄板异常简单。对于下载器的固件可以使用flymcu工具进行读取,这个下载器的主控并没有设计任何保护措施,所以很好读取固件。然后就只需要画一个一样的原理图把固件下载即可。

供电:为了更高效的充电,选用的是开关充电器,最大2A充电。然后用sy7088升压到5V对核心板供电,ESP32使用TPS63020供电,下载器和传感器使用rt9013供电,每个供电都是直接从USB或者电池输入,提供转换效率。

交互设计:PCB上带有一个麦克风,可以由FPGA采集之后进行语音识别。陀螺仪可以做很多花里胡哨的功能就不说了,比如说视频任意角度变换实现图像水平等等。环境光传感器可以实现自动量度,红外手势识别实现手势控制等等。

手柄:手柄里面设计了NFC读卡器,仿照Nintendo Switch的手柄,仿照刷amiibo。手柄内置了震动马达反馈,带有肩键,肩键有个致命缺点,就是寿命,普通按键很快就按坏了,还是得用鼠标那种微动开关。摇杆也是直接买的NS的,两个电位器使用ADC采集,以及按压的一个按键高电平有效。本来手柄里面应该设计一个陀螺仪的,太赶了就忘了。并且由于时间关系只有左边一个手柄。不过依葫芦画瓢右边也很好设计。两个手柄的程序应该设计为i2c从机,因为他们和主机之间共用了两根信号线。