0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用ESP32,手把手教你制作一個游戲機(jī)

硬件攻城獅 ? 來源:趣無盡 ? 作者:Cherry ? 2022-11-15 09:41 ? 次閱讀

MicroByte 是一款微型主機(jī),能夠運(yùn)行 NES、GameBoy、GameBoy Color、Game Gear 和 Sega Master 系統(tǒng)的游戲,所有元器件都設(shè)計在這 78 x 17 x 40 mm 的封裝中。

盡管成品尺寸很小,但它符合 SNES 游戲板的布局并且具有操作按鈕。

除此之外,它還配有一個清晰的 1.3 英寸 IPS 顯示屏,可以看到游戲的所有細(xì)節(jié)。

隨后還會更新 PythonArduino 庫,以便進(jìn)行游戲以外的開發(fā)工作。

固件、PCB 設(shè)計、外殼 3D 文件等可以在本項目文件庫中下載

https://make.quwj.com/project/359

BOM 清單:

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

d2e4246c-5361-11ed-a3b6-dac502259ad0.jpg

項目架構(gòu)

通常啟動電子項目時,首先會創(chuàng)建一個框圖,其中設(shè)置項目所需的功能及交互的方式,然后繪制原理圖。在原理圖上,選擇符合要求的元器件并進(jìn)行電氣連接,之后進(jìn)行 PCB 布局設(shè)計。最后,按照設(shè)計規(guī)則和物理設(shè)計準(zhǔn)則設(shè)置每個元器件基座的位置。

d2f060f6-5361-11ed-a3b6-dac502259ad0.jpg

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

d2fb949e-5361-11ed-a3b6-dac502259ad0.jpg

此處將按照模塊化思想進(jìn)行項目開發(fā),輔以原理圖設(shè)計和 PCB 布局設(shè)計。

該項目原理圖和 PCB 布局是用 Kicad 設(shè)計的,下載鏈接:

https://github.com/jfm92/microByte_PCB/tree/5cb0fcf7a9658e331d677588a7f35327a7d491d7

要打開它,只需安裝 Kicad 并雙擊 .pro 文件。

ESP32 微控制器

首先選擇合適的微控制器,對于該項目,選擇 ESP32 Wrover E 模塊。該模塊/微控制器特點(diǎn):具有 240 MHZ 雙核、16 MB 閃存、8 MB RAM、超低功耗協(xié)處理器、支持 Wi-Fi藍(lán)牙以及全套外圍設(shè)備和 GPIO,仿真性能極佳。 設(shè)計中可參考 Espressif,數(shù)據(jù)表如下:

https://www.espressif.com/sites/default/files/documentation/esp32-wrover-e_esp32-wrover-ie_datasheet_en.pdf

電路板模塊的原理圖:

d304b646-5361-11ed-a3b6-dac502259ad0.png

中間是與外圍設(shè)備連接的 ESP32 模塊。

引腳 25 是 IO 0 引腳。該引腳為選擇設(shè)備的引導(dǎo)狀態(tài),可以閃存新固件或啟動已閃存的固件。信號為高,啟動已閃存的固件;信號為低,啟動引導(dǎo)模式,并等待新固件。

引腳 3 是啟用引腳(又名復(fù)位)。如果這個引腳是高電平,微控制器將工作,否則不工作。為了避免信號彈跳,此處有一個 RC 電路(電阻/電容),在板啟動或跳變時產(chǎn)生干凈的信號,以防止意外復(fù)位。由于該電路沒有復(fù)位按鈕,因此并不是完全必要,但最好保持謹(jǐn)慎。

引腳 24 是 IO 2 引腳,連接了一個帶電阻器的藍(lán)色 LED,起到顯示通知的作用。

讓我們看看引腳 2 或 VDD 3V3。這引腳是給芯片供電的,電壓 3.3 V。注意并聯(lián)電容器,這些電容器是去耦電容器,用于清除寄生干擾。

下面是 PCB 設(shè)計布局和 PCB 板中重點(diǎn)研究的部分。

d328db20-5361-11ed-a3b6-dac502259ad0.png

d34d483e-5361-11ed-a3b6-dac502259ad0.jpg

d3733d5a-5361-11ed-a3b6-dac502259ad0.jpg

除此之外,相關(guān)的組件必須盡可能靠近。

添加 USB 模塊

USB 收發(fā)器是一個將 USB 信號轉(zhuǎn)換為串行、RS232 或其他類似協(xié)議的芯片。在市場上,有各種各樣的型號可供選擇,此處使用 CH340C。

CH340C 不需要像 CH340G 一樣的外部時鐘,其用法簡單,價格是 CP2102 或 FT232 的一小部分。

d37f2d40-5361-11ed-a3b6-dac502259ad0.png

圖的右側(cè)所示。它的設(shè)計非常簡單,只有一塊芯片,上面有兩個去耦電容和一個 0 歐姆的電阻。如果不確定是否必須進(jìn)行連接,則將這種電阻器用作電橋。

右邊是 USB-C 連接器的示意圖。其作用是連接到 PC 并給電池充電。在 PCB 布線時,使用 USB-C 更具挑戰(zhàn)性,因?yàn)樾枰砑与p連接,可以在任何方向使用導(dǎo)線。

提示:USB 信號是并行高速信號,必須盡量平行布線,避免信號間的串?dāng)_,并盡量將信號線布在靠近數(shù)字邏輯芯片的地方。

d3d630e0-5361-11ed-a3b6-dac502259ad0.jpg

d3f15c58-5361-11ed-a3b6-dac502259ad0.png

電池與電源管理

此處分為三個部分:電池充電和保護(hù)電路、電源管理和電池電量控制。

電池充電和保護(hù)電路:

d3fa7cf2-5361-11ed-a3b6-dac502259ad0.png

對于 Li-Po 電池的使用,安全第一,需要做一個正確的恒流充電控制器,使它不要在 4.2 V 以上充電或在 2.8 V 以下對電池放電,以免損壞電池。

TP4056 是一個鋰聚合物電池充電器芯片,可提供恒定的線性電壓電流,還可以通過修改 R 2 的阻值設(shè)置充電電流。切記充電電流應(yīng)為電池容量的 25 % 左右。此芯片連接到 LED D1,以顯示電池的充電狀態(tài)。

FS312F-G 是一個電池保護(hù)電路芯片,如果檢測到電池過度充電或過度放電,它會切斷電池的使用。這樣可以避免損壞電池。

FS8205 是一個集成兩個 MOSFET 晶體管以選擇電路功率的芯片,如果電池處于合適的范圍內(nèi),它將從電池中獲取能量,如果將設(shè)備連接到 USB 端口,它將直接利用 USB 的能量工作。

電源管理:

d418105a-5361-11ed-a3b6-dac502259ad0.png

該模塊是電壓轉(zhuǎn)換器的升壓電路,可提供 3.3 V 的恒定電壓。鋰電池的最大充電電壓為 4.2 V,最小安全電壓為 2.8 V。因此,需要提供恒定電壓以避免微控制器不穩(wěn)定或顯示器上的亮度較低。

為解決這個問題,此處使用 MT3608,它是一種可配置的升壓電壓轉(zhuǎn)換器。在該電路的輸出端,電壓為 4.2 V,高于器件所需的 3.3 V,所以使用 MCP1700 電壓轉(zhuǎn)換器將電壓從 4.2 V 轉(zhuǎn)換為 3.3 V。

這個方案可能存在過度設(shè)計或效率低下的問題,但這是最便宜有效的解決方案。

電池電量控制:

d42a2362-5361-11ed-a3b6-dac502259ad0.png

就像升壓電路前的分壓器一樣簡單。此點(diǎn)的電壓最大將達(dá)到 4.2 V,因此僅需設(shè)計一個降至 3.3 V 的分壓器以遵守 ESP32 的邏輯電平并將其連接到 ADC GPIO 即可測量模擬電平信號。

d445c202-5361-11ed-a3b6-dac502259ad0.png

d4665300-5361-11ed-a3b6-dac502259ad0.jpg

d47a8db6-5361-11ed-a3b6-dac502259ad0.jpg

設(shè)計 SD 卡模塊

SD 卡使用 SPI 協(xié)議,這是一種雙向通信,可實(shí)現(xiàn)高速通信。使用外設(shè)時,不必?fù)?dān)心串?dāng)_,因?yàn)樗乃俣炔蛔阋援a(chǎn)生磁場(至少此處沒有任何問題)。

電路也非常簡單,將每條線連接到 MCU 的 SPI GPIO 口并添加一個上拉電阻。該電阻對于保持線路上的恒定高電平并避免可能破壞數(shù)據(jù)傳輸?shù)闹虚g電平信號很重要。

d491b0ae-5361-11ed-a3b6-dac502259ad0.png

d49a5fc4-5361-11ed-a3b6-dac502259ad0.png

d4c0c07e-5361-11ed-a3b6-dac502259ad0.jpg

此處還有我們的老朋友去耦電容器。

音頻輸出

使用 ESP32,有兩種方式輸出音頻。通過檢查數(shù)據(jù)表,此處可以使用集成的 I2S 到 DAC 轉(zhuǎn)換器或直接使用 I2S 外設(shè)。

d4d8874a-5361-11ed-a3b6-dac502259ad0.png

獲得音頻輸出的最簡單方法是使用 I2S 到 DAC 轉(zhuǎn)換器,因?yàn)榭梢詫P(yáng)聲器直接連接到 GPIO,如果音頻音量很低,則可以使用模擬音頻放大器,這非常容易實(shí)施。但是這種解決方案也帶來了一些不便。DAC 僅使用 I2S 16 位中的 8 位,這意味著將丟失很多音頻信息,導(dǎo)致音頻質(zhì)量非常差。

I2S 是一種數(shù)字音頻協(xié)議,可保證高保真音頻,而不造成質(zhì)量損失或噪聲。但需要一個轉(zhuǎn)換器模擬轉(zhuǎn)換器和放大器收到的東西。此處采用 MAX98357 音頻放大器。該放大器將 I2S 信號轉(zhuǎn)換為模擬信號,并將其放大以直接用于接揚(yáng)聲器或耳機(jī)。該放大器/轉(zhuǎn)換器可為我們提供 6.4W 的輸出功率,并具有可配置的輸出選擇——在單聲道或立體聲音頻之間進(jìn)行選擇和阻抗選擇。

d4f09376-5361-11ed-a3b6-dac502259ad0.png

d4fa3c14-5361-11ed-a3b6-dac502259ad0.jpg

d542cd3a-5361-11ed-a3b6-dac502259ad0.jpg

免責(zé)聲明:我對音頻的了解不是很深,所以一些音頻數(shù)據(jù)可能是錯誤的,僅供參考。

添加按鍵

ESP32 是一個不錯的模塊,但它的 GPIO 端口數(shù)量很少。但是不用擔(dān)心,我們有 TCA9555 解決方案。

TCA9555 是 I2C GPIO 多路復(fù)用器。該器件最多允許使用 18 個額外的 GPIO。這些 GPIO 可用作輸入或輸出,并可通過 I2C 進(jìn)行控制或檢查。因此,僅使用兩個 GPIO(I2C SDA 和 I2C SCLK),就有了 18 個額外的 GPIO!延遲不是問題,因?yàn)榭梢宰x取或?qū)懭敫哌_(dá) 400 Khz的數(shù)據(jù),這意味著每秒 400000 次!

d564aa7c-5361-11ed-a3b6-dac502259ad0.png

讓我們看一下原理圖。該多路復(fù)用器可與 I2C 一起使用,因此需要上拉每個信號以避免線路上的噪聲。它也有一個中斷引腳,但未使用。I2C 信號為 SCL 和 SDA 引腳(19 和 20)。需要通過硬件配置設(shè)備的地址,此配置通過設(shè)置引腳 A0、A1 和 A2 的邏輯電平來完成。此處只有一個 I2C 設(shè)備,因此給出地址 0x00。

最后,所有開關(guān)按鈕都直接連接到芯片,我們通過軟件配置設(shè)置了上拉或下拉電阻,因?yàn)樵摱嗦窂?fù)用器具有可配置的內(nèi)部電阻。

d58e0f66-5361-11ed-a3b6-dac502259ad0.png

該設(shè)備的有趣之處之一是電感式按鈕,它們是沒有絲印層的 PCB 布線,因此帶有碳膜的橡膠按鈕可以用作開關(guān)按鈕。這是游戲手柄上的常規(guī)配置。如果要在設(shè)計中使用,可以在項目附帶的庫中找到。

d5c281d8-5361-11ed-a3b6-dac502259ad0.jpg

d5ecca24-5361-11ed-a3b6-dac502259ad0.jpg

配一款亮麗的顯示屏

d608f316-5361-11ed-a3b6-dac502259ad0.png

d61fe6d4-5361-11ed-a3b6-dac502259ad0.png

顯示器采用 IPS 1.3 英寸屏幕,分辨率為 240 x 240 px,可以提供非常漂亮的色彩和清晰的圖像。通信協(xié)議是 SPI,可以實(shí)現(xiàn)高達(dá) 70 FPS 的幀速率(數(shù)據(jù)表中注明)。

另一方面,可以控制顯示器的背光以選擇亮度等級。通過 BS138 MOSFET 晶體管完成控制顯示屏上嵌入的 LED 的電流。

d62c969a-5361-11ed-a3b6-dac502259ad0.jpg

完成

現(xiàn)在就可以運(yùn)行這臺復(fù)古游戲機(jī)了,開啟你的復(fù)古游戲回憶之旅吧!

項目所用的代碼在本項目文件庫中可以下載:

https://make.quwj.com/project/359

責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • pcb
    pcb
    +關(guān)注

    關(guān)注

    4293

    文章

    22769

    瀏覽量

    393203
  • 游戲機(jī)
    +關(guān)注

    關(guān)注

    9

    文章

    297

    瀏覽量

    33268
  • ESP32
    +關(guān)注

    關(guān)注

    17

    文章

    936

    瀏覽量

    16659

原文標(biāo)題:用ESP32,手把手教你制作一個游戲機(jī)

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    esp32什么軟件編程

    ESP32款由樂鑫(Espressif)推出的低功耗、高性能的Wi-Fi和藍(lán)牙雙模微控制器,廣泛應(yīng)用于物聯(lián)網(wǎng)、智能家居、智能穿戴等領(lǐng)域。要對ESP32進(jìn)行編程,需要選擇合適的編程軟件和開發(fā)環(huán)境
    的頭像 發(fā)表于 08-19 17:24 ?849次閱讀

    手把手教你通過宏集物聯(lián)網(wǎng)工控屏&網(wǎng)關(guān)進(jìn)行協(xié)議轉(zhuǎn)換,將底層PLC/傳感器的數(shù)據(jù)轉(zhuǎn)換為TCP協(xié)議并傳輸?shù)接脩?/a>

    手把手教你通過宏集物聯(lián)網(wǎng)工控屏&網(wǎng)關(guān)進(jìn)行協(xié)議轉(zhuǎn)換,將底層PLC/傳感器的數(shù)據(jù)轉(zhuǎn)換為TCP協(xié)議并傳輸?shù)接脩艚K端
    的頭像 發(fā)表于 08-15 13:29 ?225次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>通過宏集物聯(lián)網(wǎng)工控屏&amp;網(wǎng)關(guān)進(jìn)行協(xié)議轉(zhuǎn)換,將底層PLC/傳感器的數(shù)據(jù)轉(zhuǎn)換為TCP協(xié)議并傳輸?shù)接脩? />    </a>
</div>                            <div   id=

    ESP32,做了siri?!開源了!

    工程名稱:ESP32直接對話大語言模型人工智能語音助手前言ESP32做了語言模型,就像
    的頭像 發(fā)表于 06-29 08:04 ?328次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>ESP32</b>,做了<b class='flag-5'>個</b>siri?!開源了!

    手把手教你排序算法怎么寫

    今天以直接插入排序算法,給大家分享下排序算法的實(shí)現(xiàn)思路,主要包含以下部分內(nèi)容:插入排序介紹插入排序算法實(shí)現(xiàn)手把手教你排序算法怎么寫在添加新的記錄時,使用順序查找的方式找到其要插入的位置,然后將
    的頭像 發(fā)表于 06-04 08:03 ?544次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>排序算法怎么寫

    超酷!基于ESP32自制藍(lán)牙游戲手柄

    通過跳線在6到12伏特的電源范圍內(nèi)通過外部供電。 我用了空白的PCB作為蓋子,避免手接觸電路。將ESP32板插入電路,然后通過游戲手柄
    發(fā)表于 05-06 16:59

    工程送樣!手把手教你用好廣和通RedCap模組FG131&amp;amp;FG132系列

    工程送樣!手把手教你用好廣和通RedCap模組FG131&FG132系列
    的頭像 發(fā)表于 01-11 18:22 ?557次閱讀
    工程送樣!<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>用好廣和通RedCap模組FG131&amp;amp;FG132系列

    如何使用ESP32和STC51芯片制作小小光立方呢?

    分享ESP32和STC51芯片,以及0805貼片燈珠,手工焊接制作的小小光立方。
    的頭像 發(fā)表于 01-09 15:37 ?1638次閱讀
    如何使用<b class='flag-5'>ESP32</b>和STC51芯片<b class='flag-5'>制作</b><b class='flag-5'>一</b><b class='flag-5'>個</b>小小光立方呢?

    手把手教你制作DAPLink

    組規(guī)則和協(xié)議,特定行業(yè)中的每個參與者都同意遵循并執(zhí)行。符合某種內(nèi)核的單片機(jī)Q,都可以使用這種協(xié)議來下載程
    的頭像 發(fā)表于 12-26 08:35 ?3572次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b><b class='flag-5'>制作</b>DAPLink

    ESP32+TFT 手把手教你學(xué)會黑客帝國的數(shù)字特效

    嗨,各位小伙伴!今天,我們將帶你探索如何在ESP32開發(fā)板上制作炫酷的特效,別擔(dān)心,不需要編程基礎(chǔ)。我們將步步學(xué)習(xí)如何使用TFT屏幕以及ESPI庫。跟著我,輕松入門,起來搞點(diǎn)有趣的
    的頭像 發(fā)表于 11-09 08:43 ?1099次閱讀
    <b class='flag-5'>ESP32</b>+TFT <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>學(xué)會黑客帝國的數(shù)字特效

    手把手帶您使用MCUXpresso Config Tools生成USB組合設(shè)備

    手把手帶您使用MCUXpresso Config Tools生成USB組合設(shè)備
    的頭像 發(fā)表于 10-31 16:55 ?990次閱讀
    <b class='flag-5'>手把手</b>帶您使用MCUXpresso Config Tools生成USB組合設(shè)備

    LOTO示波器_從零開始手把手測電源開環(huán)增益/電源環(huán)路頻響曲線/PSM

    我們之前有篇文章從理論到實(shí)踐演示了如何測量電源環(huán)路的開環(huán)增益曲線,不過偏重于理論和原理,沒有很多細(xì)節(jié)的展現(xiàn),所以這片文章從另外的角度,從零基礎(chǔ)開始,手把手步演示如果進(jìn)行實(shí)操測試。
    的頭像 發(fā)表于 10-26 16:08 ?729次閱讀
    LOTO示波器_從零開始<b class='flag-5'>手把手</b>測電源開環(huán)增益/電源環(huán)路頻響曲線/PSM

    手把手教你學(xué)FPGA仿真

    電子發(fā)燒友網(wǎng)站提供《手把手教你學(xué)FPGA仿真.pdf》資料免費(fèi)下載
    發(fā)表于 10-19 09:17 ?2次下載
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>學(xué)FPGA仿真

    手把手教你基于RT-Thread Studio使用STM32單片機(jī)的PWM外設(shè)

    目前我使用的是STM32L475系列單片機(jī),是ali當(dāng)時在PDD 50塊錢賣的開發(fā)板,其他STM32單片機(jī)參考即可,這里會手把手教大家基
    的頭像 發(fā)表于 09-28 15:12 ?3944次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>基于RT-Thread Studio使用STM32單片<b class='flag-5'>機(jī)</b>的PWM外設(shè)

    手把手教你制作無線充電器

    手把手教你制作無線充電器(無線充電原理+產(chǎn)品應(yīng)用+DIY實(shí)例)
    發(fā)表于 09-28 07:48

    51單片機(jī)DIY音樂頻譜顯示

    該資源是手把手教你用51單片機(jī)DIY音樂頻譜顯示
    發(fā)表于 09-27 07:42