Retro-CM3: o consolă JOC puternică gestionată de RetroPie: 8 pași (cu imagini)
Retro-CM3: o consolă JOC puternică gestionată de RetroPie: 8 pași (cu imagini)
Anonim
Retro-CM3: o consolă GAME puternică gestionată de RetroPie
Retro-CM3: o consolă GAME puternică gestionată de RetroPie
Retro-CM3: o consolă GAME puternică gestionată de RetroPie
Retro-CM3: o consolă GAME puternică gestionată de RetroPie
Retro-CM3: o consolă GAME puternică gestionată de RetroPie
Retro-CM3: o consolă GAME puternică gestionată de RetroPie

Acest instructiv este inspirat de PiGRRL Zero, versiunea originală a lui Wermy Gameboy Zero și consola de joc Handled a lui GreatScottLab. Aceste console de jocuri bazate pe RetroPie folosesc raspberry pi zero (W) ca bază. DAR, după ce am construit mai multe console Pi Zero, s-au găsit două probleme principale.

1) Raspberry Pi Zero (W) are doar un singur nucleu Cortex-A7 și 512 MB RAM, ceea ce este OK pentru NES / SNES / GB. Cu toate acestea, când am încercat să rulez PS / N64 Emus, experiența a fost destul de inacceptabilă. Chiar și unele dintre jocurile GBA nu pot funcționa fără probleme (unele lag audio, de asemenea, în unele jocuri NEOGEO, cum ar fi Metal Slug atunci când se ocupă scene complicate); Afișajul SPI va avea nevoie de CPU pentru a ajuta cu driverul de tampon de cadru, ceea ce va face experiența jocului să se înrăutățească, iar cps-urile sunt, de asemenea, limitate de viteza ceasului SPI. Iar calitatea afișajului ieșirii TV nu este suficient de bună.

În acest instructable, vom folosi RaspberryPi Compute Module 3 și o interfață LCD DPI pentru a construi o consolă de jocuri RetroPie. Ar trebui să poată rula toate emulatoarele fără probleme și să ofere o rezoluție ridicată și o rată de cadre ridicată.

Dimensiunea finală a consolei de joc este de 152x64x18mm cu baterie de până la 2000mAh. Construcția totală costă aproximativ 65 USD, inclusiv un PCB personalizat, toate componentele, un card TF de 16 GB și un modul de calcul RaspberryPi 3 Lite. Deoarece am deja o imprimantă 3D, carcasa mă costă doar 64g de filament PLA.

Sa incepem.

Notă: Deoarece limba engleză nu este prima mea limbă, dacă găsiți greșeli sau ceva nu este clar, vă rugăm să ne anunțați.

Aceasta este prima mea postare pe instructable.com și chiar am nevoie de tot felul de sugestii de la voi.

Pasul 1: Ingrediente

Ingrediente
Ingrediente
Ingrediente
Ingrediente
Ingrediente
Ingrediente
Ingrediente
Ingrediente

Iată ingredientele de care aveți nevoie pentru a construi consola de jocuri. Este posibil ca unele părți să nu fie disponibile în regiunea dvs., încercați câteva piese alternative.

1) RaspberryPi Compute Module 3 Lite. Cumpărați-l de la magazinul de unde ați primit RaspberryPi 3B sau încercați-l pe eBay.

2) LCD de 3.2 inch cu interfață RGB / DPI. ASIGURAȚI-vă că ați primit un modul LCD cu interfață RGB / DPI, deoarece este TREBUIE să construiți această consolă. Mi-am luat LCD-ul de la un e-shop local și același modul poate fi găsit în Alibaba. Dacă cumpărați un modul LCD alternativ, CEREAȚI furnizorului să vă trimită parametrul detaliat și codul de inițializare. De asemenea, este o alegere înțeleaptă să cumpărați conectorii corespunzători de la același magazin, deoarece există atât de multe tipuri diferite de conectori.

3) ALPS SKPDACD010. Comutator tactil cu deplasare de 1,75 mm. Căutați-l în magazinul dvs. local de componente electronice.

4) Câteva alte taste. Utilizați orice alte taste tactile pe care le puteți obține pentru butoanele START / SELECT / VOL + / VOL-.

5) Difuzor. Orice difuzor de 8 ohmi, 0,5-1,5 W.

6) Baterie. Am ales 34 * 52 * 5.0mm 1S 1000mAh baterie Li-ion x2.

7) Unele IC-uri. STM32F103C8T6, IP5306, TDA2822, NC7WZ16, SY8113, PT4103 și etc.

8) Unii conectori. USB-Micro Femei, PJ-237 (mufă telefonică), mufă TF-Card, DDR2 SODIMM etc.

9) Unele componente pasive. Rezistoare, condensatoare și inductoare.

10) Un PCB personalizat. Schema și fișierele PCB sunt furnizate la sfârșit. Nu uitați să faceți modificări în cazul în care utilizați piese alternative.

11) O imprimantă 3D. Asigurați-vă că este capabil să imprime piese până la dimensiunile 152 * 66 * 10 mm.

12) Suficient de filament PLA.

Pasul 2: Modulul de calcul 3

Modulul de calcul 3
Modulul de calcul 3
Modulul de calcul 3
Modulul de calcul 3

Raspberry Pi Compute Module 3 este o placă de bază foarte puternică pentru prototiparea unor gadgeturi de interes. Introducere detaliată poate fi găsită aici. Și câteva informații utile pot fi găsite aici.

Modulul folosește un conector de tip SODIMM DDR2, care este puțin mai greu de utilizat. În plus, toți pinii GPIO ai nucleului BCM2837 BANK1 și BANK0 sunt conduși.

Pentru a începe să utilizați modulul de calcul, trebuie să oferim mai multe tensiuni diferite: 1,8V, 3,3V, 2,5V și 5,0V. Printre acestea, 1,8V și 3,3V sunt utilizate pentru alimentarea unor periferice care au nevoie de aproximativ 350mA fiecare. Linia de alimentare de 2,5 V conduce DAC-ul TV-out și poate fi legat de 3,3V, deoarece nu avem nevoie de funcția TV-out. 5.0V ar trebui să fie conectat la pinii VBAT și alimentează nucleul. Intrarea VBAT acceptă tensiuni cuprinse între 2,5V și 5,0V și asigurați-vă că sursa de alimentare poate ieși până la 3,5W. Pinii VCCIO (GPIO_XX-XX_VREF) pot fi conectați la 3,3V deoarece folosim un nivel CMOS de 3,3V. PIN-ul SDX_VREF ar trebui, de asemenea, să fie conectat la 3,3V.

Toți pinii HDMI, DSI, CAM nu sunt folosiți aici, doar lăsați-i să plutească. Nu uitați să legați pinul EMMC_DISABLE_N la 3.3V, deoarece vom folosi un card TF ca hard disk în loc de caracteristica de pornire USB.

Apoi conectați pinii SDX_XXX la pinii corespunzători de pe slotul cardului TF și nu sunt necesare rezistențe pull-up sau pull-down. La acest pas, suntem gata să pornim modulul de calcul Raspberry Pi 3. Porniți sursa de alimentare într-o ordine de scădere: 5V, 3,3V și apoi 1,8V, sistemul ar trebui să poată porni, dar deoarece nu există ieșire dispozitiv, pur și simplu nu știm dacă funcționează bine. Deci, trebuie să adăugăm un afișaj pentru a-l verifica în pasul următor.

Dar înainte de a continua, trebuie mai întâi să-i spunem Pi care este funcția fiecărui GPIO. Aici ofer câteva fișiere, pun „dt-blob.bin”, „bcm2710-rpi-cm3.dtb” și „config.txt” în folderul de încărcare al unui card TF nou intermitent. Puneți „dcdpi.dtbo” în folderul / boot / overlay. Dt-blob.bin definește funcția implicită a fiecărui GPIO. Schimb GPIO14 / 15 la GPIO normal și mut funcția UART0 la GPIO32 / 33 deoarece avem nevoie de GPIO14 / 15 pentru a interfața cu modulul LCD. De asemenea, îi spun lui Pi să folosească GPIO40 / 41 ca funcție pwm și să le facă să fie ieșirea audio dreaptă și stângă. Dcdpi.dtbo este un fișier de suprapunere a dispozitivului și îi spune Pi că vom folosi GPIO0-25 ca funcție DPI. În cele din urmă, scriem „dtoverly = dcdpi” pentru a conștientiza Pi pentru a încărca fișierul suprapus pe care l-am furnizat.

În acest moment, Raspberry Pi înțeleg pe deplin ce funcție ar trebui utilizată pentru fiecare GPIO și suntem gata să mergem mai departe.

Pasul 3: interfațarea modulului LCD

Interfațarea modulului LCD
Interfațarea modulului LCD
Interfațarea modulului LCD
Interfațarea modulului LCD
Interfațarea modulului LCD
Interfațarea modulului LCD

Deoarece modulul LCD cu interfață DPI / RGB diferită poate fi utilizat în această consolă, aici luăm ca exemplu modulul utilizat în propria mea construire. Și dacă ați ales unul diferit, verificați definiția pinului modulului dvs. și faceți conexiunile în conformitate cu numele pinului, așa cum se arată în exemplu.

Există două interfețe pe modulul LCD: un SPI și un DPI. SPI este utilizat pentru a configura setările inițiale ale IC-ului driverului LCD și le putem conecta la orice GPIO neutilizat. Conectați doar pinii Reset, CS, MOSI (SDA / SDI) și SCLK (SCL), pinul MISO (SDO) nu este utilizat. Pentru a inițializa driverul LCD, aici folosim biblioteca BCM2835 C pentru a conduce GPIO-urile și scoate o anumită secvență de inițializare furnizată de furnizorul modulului. Fișierul sursă poate fi găsit mai târziu în acest instructable.

Instalați biblioteca BCM2835 C pe un alt Raspberry Pi 3 conform instrucțiunilor de aici. Apoi utilizați comanda „gcc -o lcd_init lcd_init.c -lbcm2835” pentru a compila fișierul sursă. Apoi adăugați o nouă linie în fișierul /etc/rc.local înainte de „exit 0”: „/ home / pi / lcd_init” (presupunem că ați pus aplicația compilată în folderul / home / pi). Ar trebui să se sublinieze faptul că fișierul sursă este utilizat numai pentru modulul pe care l-am folosit și pentru un alt modul LCD, trebuie doar să solicitați furnizorului o secvență de inițializare și să modificați fișierul sursă în consecință. Acest proces este destul de complicat, deoarece în acest moment nu se vede nimic de pe ecran, de aceea vă recomand cu tărie să faceți acest lucru pe o placă RPI-CMIO, deoarece conduce toate GPIO-urile, astfel încât să îl puteți depana cu uart sau wlan.

Următoarea parte este ușoară, trebuie doar să conectați pinii din stânga ai modulului LCD în conformitate cu aici. Depinde de ce fel de modul LCD aveți, alegeți modul RGB cu înțelepciune. Pentru mine, aici am ales DPI_OUTPUT_FORMAT_18BIT_666_CFG2 (modul 6). Modificați linia „dpi_output_format = 0x078206” în funcție de alegerea dvs. Și dacă modulul dvs. LCD utilizează o rezoluție diferită, reglați „hdmi_timings = 480 0 41 60 20 800 0 5 10 10 0 0 0 60 0 32000000” consultați fișierul aici.

Dacă toate setările sunt corecte, la următoarea pornire a dispozitivului Pi, ar trebui să vedeți afișajul pe ecran după un negru de 30-40 de ani (de la alimentare la sistem, încărcarea scriptului de inițializare SPI).

Pasul 4: tastatura și sunetul

Tastatura și sunetul
Tastatura și sunetul
Tastatura și sunetul
Tastatura și sunetul

Am terminat cu Core și Output în ultimii doi pași. Acum să trecem la partea de intrare.

O consolă de jocuri are nevoie de taste și butoane. Aici avem nevoie de 10 comutatoare ALPS SKPDACD010 ca butoanele sus / jos / dreapta / stânga, LR și A / B / X / Y. Și tastele normale de montare pe suprafață 6x6 sunt utilizate pentru alte butoane, cum ar fi pornire / selectare și creștere / reducere volum.

Există două moduri de a interfața butoanele cu Raspberry Pi. O modalitate este conectarea butoanelor direct la GPIO-urile de pe Pi și o altă modalitate este conectarea butoanelor la un MCU și interfața cu Pi prin protocolul USB HID. Aici am ales-o pe a doua, pentru că oricum avem nevoie de un MCU pentru a face față puterii pe secvență și este mai sigur să păstrăm Pi departe de atingerea umană.

Deci, conectați tastele la STM32F103C8T6 și apoi conectați MCU la Pi cu USB. Un exemplu de program MCU poate fi găsit la sfârșitul acestui pas. Modificați definițiile pinului din hw_config.c și compilați-le cu biblioteca USB a MCU găsită aici. Sau puteți descărca fișierul hex direct pe MCU, atâta timp cât partajați aceleași definiții ale pinului în schemă la sfârșitul acestui instructable.

În ceea ce privește ieșirile audio, schema oficială a Raspberry Pi 3 B oferă o modalitate bună de filtrare a undei pwm și același circuit ar trebui să funcționeze perfect aici. Un lucru care ar trebui subliniat este că nu uitați să adăugați linia „audio_pwm_mode = 2” la sfârșitul config.txt pentru a reduce zgomotul ieșirii audio.

Pentru a conduce difuzorul, este necesar un driver de difuzor. Aici am ales TDA2822 și circuitul este circuitul oficial BTL. Rețineți că mufa telefonului PJ-327 are un pin de detașare automată la ieșirea din dreapta. Când nu există nici o cască conectată, pinul 3 este conectat la canalul din dreapta. Și imediat ce căștile sunt conectate, acest pin este detașat de canalul din dreapta. Acest pin poate fi folosit ca pin de intrare pentru difuzor, iar difuzorul se va opri atunci când căștile sunt conectate.

Pasul 5: Puterea

Puterea
Puterea
Puterea
Puterea
Puterea
Puterea

Să revenim la secțiunea de alimentare și să verificăm proiectarea detaliată a puterii.

Există 3 secțiuni de alimentare: sursa MCU, încărcătorul / rapel și DC-DC Bucks.

Sursa MCU este împărțită de toate celelalte surse de alimentare, deoarece avem nevoie de ea pentru a efectua secvența de pre-pornire. Pe măsură ce butonul de alimentare este apăsat în jos, PMOS va conecta pinul EN al LDO la baterie pentru a activa LDO. MCU este apoi pornit (butonul este încă apăsat). La pornirea MCU, acesta va verifica dacă butonul de alimentare este apăsat suficient de mult. După aproximativ 2 secunde, dacă MCU a constatat că butonul de alimentare este încă apăsat, va trage în sus pinul "PWR_CTL" pentru a menține PMOS-ul pornit. În acest moment, MCU preia controlul sursei de alimentare MCU.

Când butonul de alimentare este apăsat din nou timp de 2 secunde, MCU va rula secvența de oprire. La sfârșitul secvenței de oprire, MCU va elibera pinul "PWR_CTL" pentru a lăsa PMOS să se oprească și alimentarea MCU este apoi dezactivată.

Partea încărcător / rapel utilizează IC IP5306. Acest IC are o încărcare de 2.4A și o descărcare de 2.1A Soc foarte integrat pentru utilizarea băncii de energie și se potrivește perfect nevoilor noastre. IC-ul este capabil să încarce bateria, să ofere o ieșire de 5V și să arate nivelul bateriei cu 4 LED-uri în același timp.

Piesa Buck DC-DC folosește doi buck SY8113 de înaltă eficiență 3A. Tensiunea de ieșire poate fi programată de 2 rezistențe. Pentru a asigura secvența de alimentare, avem nevoie de MCU pentru a activa mai întâi Booster. Semnalul KEY_IP va simula o apăsare a tastei pe pinul KEY al IP5306 și activează amplificatorul intern de 5V. După aceea, MCU va activa buck-ul de 3,3V trăgând pinul RASP_EN sus. Și după ce este furnizat 3,3V, pinul EN al buck-ului de 1,8V este ridicat și permite ieșirea de 1,8V.

În ceea ce privește bateria, două baterii Li-ion de 1000 mAh sunt suficiente pentru consolă. Dimensiunea normală a acestui tip de baterie este de aproximativ 50 * 34 * 5mm.

Pasul 6: Configurarea sistemului

Configurarea sistemului
Configurarea sistemului

În acest pas, vom pune toate setările împreună.

În primul rând, trebuie să descărcați și să blocați imaginea RetroPie într-un nou card TF. Tutorial și descărcare pot fi găsite aici. Descărcați versiunea Raspberrypi 2/3. Veți vedea 2 partiții după flash imaginea: o partiție "boot" în format FAT16 și o partiție "Retropie" în format EXT4.

După ce ați terminat, nu îl introduceți instantaneu în Raspberry Pi, deoarece trebuie să adăugăm o partiție FAT32 pentru roms. Utilizați instrumente de partiție precum DiskGenius pentru a regla partiția EXT4 la aproximativ 5-6 GB și creați o nouă partiție FAT32 cu tot spațiul liber rămas pe cardul TF. Consultați imaginea pe care am încărcat-o.

Asigurați-vă că sistemul dvs. este capabil să identifice cititorul de card TF ca un dispozitiv USB-HDD și veți vedea 3 partiții în exploratorul dvs. Două dintre ele sunt accesibile, iar Windows vă va cere să îl formatați pe cel din stânga. NU-l formatați !!

Mai întâi deschideți partiția „boot” și urmați Pasul 2 pentru a configura configurațiile pinului. Sau puteți doar să dezarhivați boot.zip sub acest pas și să copiați toate fișierele și folderele în partiția de boot. Nu uitați să copiați și scriptul lcd_init compilat în partiția de boot.

Aici suntem pregătiți să efectuăm prima încărcare, dar, deoarece nu există afișaj, vă recomandăm să utilizați o placă RPI-CMIO cu un dispozitiv USB WLAN. Apoi, puteți configura fișierul wpa_supplicant și activați ssh la acest pas. Cu toate acestea, dacă nu intenționați să obțineți unul, GPIO32 / 33 poate fi utilizat ca terminal UART. Conectați pinul TX (GPIO32) și RX (GPIO33) la o placă usb-to-uart și accesați terminalul cu rata de transmisie de 115200. Oricum, trebuie să obțineți un acces terminal la Pi.

La prima pornire, sistemul va rămâne blocat atunci când încercați să extindeți sistemul de fișiere. Ignorați-l, apăsați Start (tasta Enter a tastaturii USB HID) și reporniți. Pe terminal, copiați scriptul lcd_init în folderul de start al utilizatorului „pi” și urmați Pasul 3 pentru a seta pornirea automată. După o altă repornire, ar trebui să vedeți ecranul pentru a lumina și a arăta ceva.

În acest moment, consola dvs. de jocuri este gata de joc. Cu toate acestea, pentru a încărca roms și BIOS-uri pe cardul TF, aveți nevoie de fiecare dată de acces la un terminal. Pentru a simplifica acest lucru, vă sugerez să configurați partiția FAT32.

Prima copie de rezervă a folderului RetroPie sub / home / pi în RetroPie-bck: "cp -r RetroPie RetroPie-bck". Apoi adăugați o nouă linie în / etc / fstab: "/ dev / mmcblk0p3 / home / pi / RetroPie implicite, uid = 1000, gid = 1000 0 2" pentru a monta automat partiția FAT32 în folderul RetroPie cu setarea proprietarului la utilizator „pi”. După repornire, veți constata că conținutul folderului RetroPie a dispărut (dacă nu este, reporniți din nou) și unele erori apar pe ecran. Copiați toate fișierele din RetroPie-bck înapoi în RetroPie și reporniți din nou. Erorile ar trebui să dispară și puteți configura dispozitivul de intrare urmând instrucțiunile de pe ecran.

Dacă doriți să adăugați roms sau BIOS-uri, deconectați cardul TF când este oprit și conectați-l la computer. Deschideți a 3-a partiție (REȚINEȚI-VĂ pentru a ignora sfatul formatului !!!) și copiați fișierele în folderele corespunzătoare.

Pasul 7: Carcasa și butoanele imprimate 3D

Carcasa și butoanele imprimate 3D
Carcasa și butoanele imprimate 3D
Carcasa și butoanele imprimate 3D
Carcasa și butoanele imprimate 3D
Carcasa și butoanele imprimate 3D
Carcasa și butoanele imprimate 3D

Am proiectat carcasa în stil GameBoy Micro pentru consola de jocuri.

Doar tipăriți

4x ABXY. STL

2x LR. STL (Trebuie să adăugați suport)

1x CROSS. STL

1x TOP. STL

1x BOTTOM. STL

Le imprim cu ajutorul PLA cu umplutură de 20%, strat de 0,2 mm și este suficient de puternic.

Deoarece carcasa este strânsă, verificați precizia imprimantei cu un cub de test înainte de a imprima.

Și trei șuruburi de 5mm lungime φ3mm și patru șuruburi de 10mm lungime φ3mm sunt necesare pentru a le asambla împreună.

Pasul 8: Toate împreună și rezolvarea problemelor

Toate împreună și rezolvarea problemelor
Toate împreună și rezolvarea problemelor
Toate împreună și rezolvarea problemelor
Toate împreună și rezolvarea problemelor
Toate împreună și rezolvarea problemelor
Toate împreună și rezolvarea problemelor
Toate împreună și rezolvarea problemelor
Toate împreună și rezolvarea problemelor

Deoarece circuitul este cam complicat, este o alegere bună să faceți niște lucrări cu PCB. Întreaga schemă și propria versiune PCB sunt încărcate la sfârșitul acestui pas. Dacă intenționați să utilizați versiunea mea PCB, vă rugăm să nu eliminați sigla mea pe stratul Top_Solder. Este mai bine să vă personalizați propriul și să înmânați propriul fișier PCB producătorului local pentru a-l face, deoarece este foarte greu să cumpărați aceleași piese pe care le folosesc pe PCB-ul meu.

După lipirea tuturor componentelor de pe PCB și testate, primul lucru de făcut este să descărcați fișierul hex pe MCU. După aceea, lipiți modulul LCD pe PCB. Modulul LCD ar trebui să fie la 3 mm deasupra PCB-ului pentru a se potrivi în carcasă. Folosiți o bandă dublă groasă pentru a o lipi. Apoi conectați FPC la conector și introduceți cardul CM3L și TF. NU lipiți acum bateria, conectați o sursă de alimentare USB și porniți-o!

Verificați toate butoanele și afișajul. Măsurați tensiunea între BAT + și GND, verificați dacă tensiunea este în jur de 4,2V. Dacă tensiunea este OK, deconectați cablul USB și lipiți bateria. Încercați butonul de pornire.

Puneți butonul CROSS și ABXY în carcasa TOP și puneți PCB-ul în carcasă. Folosiți 3 șuruburi pentru a fixa PCB-ul în carcasă. Adăugați niște benzi duble laterale groase pe spatele tuturor butoanelor SKPDACD010 și lipiți bateria pe ea. Folosiți bandă groasă pentru a evita pinii SKPDACD010 să deterioreze bateria. Apoi lipiți difuzorul de carcasa BOTTOM. Înainte de a-l închide, poate fi necesar să încercați toate butoanele, să verificați dacă funcționează și să sară corect. Apoi închideți carcasa cu 4 șuruburi.

Bucurați-vă.

Câteva sfaturi de depanare:

1) Verificați triplu conexiunea pin a modulului LCD de pe schemă și PCB.

2) Treceți firele de semnal LCD cu constrângere de lungime.

3) Când nu sunteți sigur de secțiunile de putere, lipiți și testați fiecare secțiune urmați secvența de alimentare. Mai întâi 5V și apoi 3,3V și 1,8V. După ce toate secțiunile de putere sunt testate, lipiți celelalte componente.

4) Dacă afișajul se estompează frecvent, încercați să inversați polaritatea semnalului PCLK prin setarea formatului dpi_output_format.

5) Dacă afișajul este mult centrat, încercați să inversați polaritatea semnalului HSYNC sau VSYNC.

6) Dacă afișajul este ușor decentrat, încercați să reglați setările de suprascanare.

7) Dacă afișajul este negru, încercați să așteptați ca sistemul să pornească până la scriptul rc.local. Dacă aveți nevoie de afișare de la început, încercați să conectați interfața SPI la MCU și utilizați MCU pentru a inițializa modulul LCD.

8) Dacă afișajul este negru tot timpul, verificați din nou secvența de inițializare.

9) Nu ezitați să puneți întrebări aici sau prin e-mail: [email protected]

Recomandat: