2024-4-11 15:03:06 只看该作者
4750浏览
查看: 4750|回复: 7
打印 上一主题 下一主题

[ESP8266/ESP32] 做一台基于 ESP32 DIY 复古游戏机——MicroByte

[复制链接]
本帖最后由 RRoy 于 2024-4-11 15:06 编辑


做一台基于 ESP32 DIY 复古游戏机——MicroByte图1

MicroByte 是一款mini主机,能够运行 NES、GameBoy、GameBoy Color、Game Gear 和 Sega Master 系统的游戏,所有元器件都设计在这 78 x 17 x 40 mm 的封装中。尽管成品尺寸很小,但它符合 SNES 游戏板的布局并且具有操作按钮。它还配有一个清晰的 1.3 英寸 IPS 显示屏,可以看到游戏的所有细节。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图2

做一台基于 ESP32 DIY 复古游戏机——MicroByte图3

随后还会更新 Python 和 Arduino 库以便进行游戏以外的开发工作。

作者的GitHub仓库:https://github.com/jfm92/microByte




固件、PCB 设计、外壳 3D 文件等可以在文末下载。

BOM 清单:https://github.com/jfm92/microByte_PCB/blob/main/microByte_BOM.xlsx

做一台基于 ESP32 DIY 复古游戏机——MicroByte图4
项目架构
通常开始一个电子项目时,首先会创建一个框图,设置项目所需的功能及交互的方式,然后绘制原理图。在原理图上,选择符合要求的元器件并进行电气连接,之后进行 PCB 布局设计。最后,按照设计规则和物理设计准则设置每个元器件基座的位置。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图5

上面是以面包板为原型的原始版本,下面是最终版本。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图6

此处将按照模块化思想进行项目开发,辅以原理图设计和 PCB 布局设计。

该项目原理图和 PCB 布局是用 Kicad 设计的,下载链接:https://github.com/jfm92/microByte_PCB/tree/5cb0fcf7a9658e331d677588a7f35327a7d491d7

要打开它,只需安装 Kicad 并双击 .pro 文件。
ESP32 微控制器
首先选择合适的微控制器,对于该项目,选择 ESP32 Wrover E 模块。

该模块/微控制器特点:具有 240 MHZ 双核、16 MB 闪存、8 MB RAM、超低功耗协处理器、支持 Wi-Fi 和蓝牙以及全套外围设备和 GPIO,仿真性能极佳。

设计中可参考 Espressif,数据表如下:https://www.espressif.com/sites/default/files/documentation/esp32-wrover-e_esp32-wrover-ie_datasheet_en.pdf

电路板模块的原理图:

做一台基于 ESP32 DIY 复古游戏机——MicroByte图7

中间是与外围设备连接的 ESP32 模块。

引脚 25 是 IO 0 引脚。该引脚为选择设备的引导状态,可以闪存新固件或启动已闪存的固件。信号为高,启动已闪存的固件;信号为低,启动引导模式,并等待新固件。

引脚 3 是启用引脚(又名复位)。如果这个引脚是高电平,微控制器将工作,否则不工作。为了避免信号弹跳,此处有一个 RC 电路(电阻/电容),在板启动或跳变时产生干净的信号,以防止意外复位。由于该电路没有复位按钮,因此并不是完全必要,但最好保持谨慎。

引脚 24 是 IO 2 引脚,连接了一个带电阻器的蓝色 LED,起到显示通知的作用。让我们看看引脚 2 或 VDD 3V3。这引脚是给芯片供电的,电压 3.3 V。注意并联电容器,这些电容器是去耦电容器,用于清除寄生干扰。

下面是 PCB 设计布局和 PCB 板中重点研究的部分。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图8

做一台基于 ESP32 DIY 复古游戏机——MicroByte图9

做一台基于 ESP32 DIY 复古游戏机——MicroByte图10

除此之外,相关的组件必须尽可能靠近。
添加 USB 模块
USB 收发器是一个将 USB 信号转换为串行、RS232 或其他类似协议的芯片。在市场上,有各种各样的型号可供选择,此处使用 CH340C。

CH340C 不需要像 CH340G 一样的外部时钟,其用法简单,价格是 CP2102 或 FT232 的一小部分。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图11

图的右侧所示。它的设计非常简单,只有一块芯片,上面有两个去耦电容和一个 0 欧姆的电阻。如果不确定是否必须进行连接,则将这种电阻器用作电桥。

右边是 USB-C 连接器的示意图。其作用是连接到 PC 并给电池充电。在 PCB 布线时,使用 USB-C 更具挑战性,因为需要添加双连接,可以在任何方向使用导线。

提示:USB 信号是并行高速信号,必须尽量平行布线,避免信号间的串扰,并尽量将信号线布在靠近数字逻辑芯片的地方。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图12

做一台基于 ESP32 DIY 复古游戏机——MicroByte图13
电池与电源管理
此处分为三个部分:电池充电和保护电路、电源管理和电池电量控制。电池充电和保护电路:

做一台基于 ESP32 DIY 复古游戏机——MicroByte图14

对于 Li-Po 电池的使用,安全第一,需要做一个正确的恒流充电控制器,使它不要在 4.2 V 以上充电或在 2.8 V 以下对电池放电,以免损坏电池。

TP4056 是一个锂聚合物电池充电器芯片,可提供恒定的线性电压电流,还可以通过修改 R 2 的阻值设置充电电流。切记充电电流应为电池容量的 25 % 左右。此芯片连接到 LED D1,以显示电池的充电状态。

FS312F-G 是一个电池保护电路芯片,如果检测到电池过度充电或过度放电,它会切断电池的使用。这样可以避免损坏电池。

FS8205 是一个集成两个 MOSFET 晶体管以选择电路功率的芯片,如果电池处于合适的范围内,它将从电池中获取能量,如果将设备连接到 USB 端口,它将直接利用 USB 的能量工作。

电源管理:

做一台基于 ESP32 DIY 复古游戏机——MicroByte图15

该模块是电压转换器的升压电路,可提供 3.3 V 的恒定电压。锂电池的最大充电电压为 4.2 V,最小安全电压为 2.8 V。因此,需要提供恒定电压以避免微控制器不稳定或显示器上的亮度较低。为解决这个问题,此处使用 MT3608,它是一种可配置的升压电压转换器。在该电路的输出端,电压为 4.2 V,高于器件所需的 3.3 V,所以使用 MCP1700 电压转换器将电压从 4.2 V 转换为 3.3 V。

这个方案可能存在过度设计或效率低下的问题,但这是最便宜有效的解决方案。

电池电量控制:

做一台基于 ESP32 DIY 复古游戏机——MicroByte图16

就像升压电路前的分压器一样简单。此点的电压最大将达到 4.2 V,因此仅需设计一个降至 3.3 V 的分压器以遵守 ESP32 的逻辑电平并将其连接到 ADC GPIO 即可测量模拟电平信号。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图17

做一台基于 ESP32 DIY 复古游戏机——MicroByte图18

做一台基于 ESP32 DIY 复古游戏机——MicroByte图19
设计 SD 卡模块
SD 卡使用 SPI 协议,这是一种双向通信,可实现高速通信。使用外设时,不必担心串扰,因为它的速度不足以产生磁场(至少此处没有任何问题)。

电路也非常简单,将每条线连接到 MCU 的 SPI GPIO 口并添加一个上拉电阻。该电阻对于保持线路上的恒定高电平并避免可能破坏数据传输的中间电平信号很重要。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图20

做一台基于 ESP32 DIY 复古游戏机——MicroByte图21

做一台基于 ESP32 DIY 复古游戏机——MicroByte图22

此处还有我们的老朋友去耦电容器。
音频输出
使用 ESP32,有两种方式输出音频。通过检查数据表,此处可以使用集成的 I2S 到 DAC 转换器或直接使用 I2S 外设。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图23

获得音频输出的最简单方法是使用 I2S 到 DAC 转换器,因为可以将扬声器直接连接到 GPIO,如果音频音量很低,则可以使用模拟音频放大器,这非常容易实施。但是这种解决方案也带来了一些不便。DAC 仅使用 I2S 16 位中的 8 位,这意味着将丢失很多音频信息,导致音频质量非常差。

I2S 是一种数字音频协议,可保证高保真音频,而不造成质量损失或噪声。但需要一个转换器模拟转换器和放大器收到的东西。此处采用 MAX98357 音频放大器。该放大器将 I2S 信号转换为模拟信号,并将其放大以直接用于接扬声器或耳机。该放大器/转换器可为我们提供 6.4W 的输出功率,并具有可配置的输出选择——在单声道或立体声音频之间进行选择和阻抗选择。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图24

做一台基于 ESP32 DIY 复古游戏机——MicroByte图25

做一台基于 ESP32 DIY 复古游戏机——MicroByte图26

作者免责声明:"我对音频的了解不是很深,所以一些音频数据可能是错误的,仅供参考。"
添加按键
ESP32 是一个不错的模块,但它的 GPIO 端口数量很少。但是不用担心,我们有 TCA9555 解决方案。

TCA9555 是 I2C GPIO 多路复用器。该器件最多允许使用 18 个额外的 GPIO。这些 GPIO 可用作输入或输出,并可通过 I2C 进行控制或检查。因此,仅使用两个 GPIO(I2C SDA 和 I2C SCLK),就有了 18 个额外的 GPIO!延迟不是问题,因为可以读取或写入高达 400 Khz的数据,这意味着每秒 400000 次!

做一台基于 ESP32 DIY 复古游戏机——MicroByte图27

让我们看一下原理图。该多路复用器可与 I2C 一起使用,因此需要上拉每个信号以避免线路上的噪声。它也有一个中断引脚,但未使用。I2C 信号为 SCL 和 SDA 引脚(19 和 20)。需要通过硬件配置设备的地址,此配置通过设置引脚 A0、A1 和 A2 的逻辑电平来完成。此处只有一个 I2C 设备,因此给出地址 0x00。

最后,所有开关按钮都直接连接到芯片,我们通过软件配置设置了上拉或下拉电阻,因为该多路复用器具有可配置的内部电阻。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图28

该设备的有趣之处之一是电感式按钮,它们是没有丝印层的 PCB 布线,因此,带有碳膜的橡胶按钮可以用作开关按钮。这是游戏手柄上的常规配置。如果要在设计中使用,可以在项目附带的库中找到。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图29

做一台基于 ESP32 DIY 复古游戏机——MicroByte图30
配一款亮丽的显示屏
做一台基于 ESP32 DIY 复古游戏机——MicroByte图31

做一台基于 ESP32 DIY 复古游戏机——MicroByte图32

显示器采用 IPS 1.3 英寸屏幕,分辨率为 240 x 240 px,可以提供非常漂亮的色彩和清晰的图像。通信协议是 SPI,可以实现高达 70 FPS 的帧速率(数据表中注明)。另一方面,可以控制显示器的背光以选择亮度等级。通过 BS138 MOSFET 晶体管完成控制显示屏上嵌入的 LED 的电流。

做一台基于 ESP32 DIY 复古游戏机——MicroByte图33
完成
现在就可以运行这台复古游戏机了,开启你的复古游戏回忆之旅吧!

原文地址:https://www.instructables.com/MicroByte-DIY-Retro-Console/

项目作者:JuanF92

译文首发于:趣无尽

转载请注明来源信息

ESP32游戏机.zip

6.03 MB, 下载次数: 55

沙发

罗罗罗  初级技师

发表于 2024-4-14 09:50:03

666
回复

使用道具 举报

板凳

三春牛-创客  初级技神

发表于 2024-4-14 10:45:14

厉害厉害!!!太棒了!
回复

使用道具 举报

地板

三春牛-创客  初级技神

发表于 2024-4-14 10:46:19

不错不错,感谢分享!
回复

使用道具 举报

5#

东吴小将  初级技师

发表于 2024-4-17 14:23:44

属实是心动了啊
回复

使用道具 举报

6#

花生编程  中级技匠

发表于 2024-4-20 21:37:59

太厉害了,感谢分享!
回复

使用道具 举报

7#

花生编程  中级技匠

发表于 2024-4-20 21:39:28

做得很好啊!就是原理看得不太懂。
回复

使用道具 举报

8#

猪爱吃面  学徒

发表于 2024-5-10 19:54:45

楼主辛苦了  做好后 游戏是咋烧录进去的呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail