Retro-CM3: en kraftfull RetroPie-hanterad GAME-konsol: 8 steg (med bilder)
Retro-CM3: en kraftfull RetroPie-hanterad GAME-konsol: 8 steg (med bilder)
Anonim
Retro-CM3: en kraftfull RetroPie-hanterad GAME-konsol
Retro-CM3: en kraftfull RetroPie-hanterad GAME-konsol
Retro-CM3: en kraftfull RetroPie-hanterad GAME-konsol
Retro-CM3: en kraftfull RetroPie-hanterad GAME-konsol
Retro-CM3: en kraftfull RetroPie-hanterad GAME-konsol
Retro-CM3: en kraftfull RetroPie-hanterad GAME-konsol

Denna instruerbara är inspirerad av adafruitens PiGRRL Zero, Wermys ursprungliga Gameboy Zero -byggnad och GreatScottLabs Handled Game Console. De RetroPie -baserade spelkonsoler använder hallon pi zero (W) som sin kärna. MEN, efter att jag har byggt flera Pi Zero -konsoler, hittades två huvudproblem.

1) Raspberry Pi Zero (W) har bara Cortex-A7 och 512 MB RAM med en enda kärna, vilket är OK för NES/SNES/GB-saker. Men när jag försökte köra PS/N64 Emus var upplevelsen ganska oacceptabel. Även några av GBA-spelen kan inte köra smidigt (Vissa ljudfördröjningar, även i vissa NEOGEO-spel som Metal Slug vid hantering av komplicerade scener); 2) De flesta spelkonsoler bygger med SPI eller TV-out som skärmgränssnitt. SPI -displayen kommer att behöva CPU: n för att hjälpa till med rambuffertdrivrutinen, vilket kommer att göra spelupplevelsen sämre och fps begränsas också av SPI -klockans hastighet. Och visningskvaliteten på TV-out är bara inte tillräckligt bra.

I denna instruerbara kommer vi att använda RaspberryPi Compute Module 3 och en DPI -gränssnitts -LCD för att bygga en ultimat RetroPie -spelkonsol. Den ska kunna köra alla emulatorer smidigt och ge en hög upplösning och hög bildhastighet.

Den slutliga storleken på spelkonsolen är 152x64x18mm med upp till 2000mAh batteri. Den totala byggnaden kostar cirka $ 65, inklusive ett anpassat kretskort, alla komponenter, ett 16 GB TF -kort och en RaspberryPi -beräkningsmodul 3 Lite. Eftersom jag redan har en 3D -skrivare kostar fodralet mig bara 64g PLA -filament.

Låt oss börja.

Obs: Eftersom engelska inte är mitt första språk, om du hittar några misstag eller något är oklart, vänligen meddela mig det.

Detta är mitt första inlägg på instructable.com och jag behöver verkligen alla slags förslag från er.

Steg 1: Ingredienser

Ingredienser
Ingredienser
Ingredienser
Ingredienser
Ingredienser
Ingredienser
Ingredienser
Ingredienser

Här är ingredienserna du behöver för att bygga spelkonsolen. Några av delarna kanske inte är tillgängliga i din region, prova några alternativa delar.

1) RaspberryPi Compute Module 3 Lite. Köp den från butiken där du fick din RaspberryPi 3B eller prova den på ebay.

2) 3,2 tums LCD med RGB/DPI -gränssnitt. KONTROLLERA att du har en RGB/DPI -gränssnitt LCD -modul eftersom det är ett måste att bygga den här konsolen. Jag fick min LCD-skärm från en lokal e-butik och samma modul finns i alibaba. Om du köper en alternativ LCD -modul ber du leverantören att skicka dig den detaljerade parametern och initialiseringskoden. Det är också ett klokt val att köpa motsvarande kontakter från samma butik eftersom det finns så många olika typer av kontakter.

3) ALPS SKPDACD010. Taktbrytare med 1,75 mm rörelse. Sök på den i din lokala elektroniska komponentbutik.

4) Några andra tangenter. Använd alla andra taktknappar för START/SELECT/VOL+/VOL- knapparna.

5) Högtalare. Alla 8 ohm, 0,5-1,5 W högtalare.

6) Batteri. Jag valde 34*52*5,0 mm 1S 1000mAh Li-ion-batteri x2.

7) Vissa IC: er. STM32F103C8T6, IP5306, TDA2822, NC7WZ16, SY8113, PT4103 och etc.

8) Vissa kontakter. USB-Micro Female, PJ-237 (telefonjack), TF-Card Jack, DDR2 SODIMM och etc.

9) Vissa passiva komponenter. Motstånd, kondensatorer och induktorer.

10) En anpassad kretskort. De schematiska och PCB -filerna finns i slutet. Kom ihåg att göra ändringar i den om du använder några alternativa delar.

11) En 3D -skrivare. Se till att den kan skriva ut delar upp till storleken 152*66*10 mm.

12) Nog PLA -filament.

Steg 2: Beräkningsmodulen 3

Beräkningsmodulen 3
Beräkningsmodulen 3
Beräkningsmodulen 3
Beräkningsmodulen 3

Raspberry Pi Compute Module 3 är ett mycket kraftfullt kärnkort för prototyper av några intresseprylar. Detaljerad introduktion hittar du här. Och en del användbar information hittar du här.

Modulen använder en anslutning av typen DDR2 SODIMM, vilket är lite svårare att använda. Dessutom leds alla GPIO -stiften i BCM2837 -kärnan BANK1 och BANK0 ut.

För att börja använda beräkningsmodulen måste vi tillhandahålla flera olika spänningar: 1,8V, 3,3V, 2,5V och 5,0V. Bland dem används 1,8V och 3,3V för att driva vissa kringutrustning som behöver cirka 350mA vardera. 2,5V-kraftledningen driver TV-out-DAC: n och den kan kopplas till 3,3V eftersom vi inte behöver TV-out-funktion. 5.0V bör anslutas till VBAT -stiften och den driver kärnan. VBAT -ingången accepterar spänningar från 2,5V till 5,0V och se bara till att strömförsörjningen kan mata ut upp till 3,5W. VCCIO-stift (GPIO_XX-XX_VREF) kan anslutas till 3.3V eftersom vi använder en 3.3V CMOS-nivå. SDX_VREF -stiftet bör också anslutas till 3,3V.

Alla HDMI-, DSI-, CAM -stift används inte här, låt dem bara flyta. Kom ihåg att binda EMMC_DISABLE_N -stiftet till 3,3V eftersom vi kommer att använda ett TF -kort som hårddisk istället för USB -startfunktionen.

Anslut sedan SDX_XXX-stiften till motsvarande stift på TF-kortplatsen och det behövs inga upp- eller neddragningsmotstånd. I det här steget är vi redo att starta upp Raspberry Pi Compute Module 3. Slå på strömförsörjningen i en minskningsordning: 5V, 3.3V och sedan 1.8V, systemet ska kunna starta upp men eftersom det inte finns någon utgång enhet, vi vet bara inte om det fungerar bra. Så vi måste lägga till en display för att kontrollera den i nästa steg.

Men innan vi fortsätter måste vi först berätta för Pi vad som är funktionen för varje GPIO. Här tillhandahåller jag några filer, lägger "dt-blob.bin", "bcm2710-rpi-cm3.dtb" och "config.txt" i startmappen på ett nyblinkat TF-kort. Lägg "dcdpi.dtbo" i mappen /boot /overlay. Dt-blob.bin definierar standardfunktionen för varje GPIO. Jag ändrar GPIO14/15 till normal GPIO och flyttar UART0 -funktionen till GPIO32/33 eftersom vi behöver GPIO14/15 för att ansluta till LCD -modulen. Jag säger också att Pi ska använda GPIO40/41 som pwm -funktion och göra dem till höger och vänster ljudutgång. Dcdpi.dtbo är en enhets-trädöverlagringsfil och den säger till Pi att vi kommer att använda GPIO0-25 som DPI-funktion. Slutligen skriver vi "dtoverly = dcdpi" för att känna till Pi att ladda överlagringsfilen vi tillhandahållit.

Just nu förstår Raspberry Pi till fullo vilken funktion som ska användas för varje GPIO och vi är redo att gå vidare.

Steg 3: Gränssnitt för LCD -modulen

Gränssnitt för LCD -modulen
Gränssnitt för LCD -modulen
Gränssnitt för LCD -modulen
Gränssnitt för LCD -modulen
Gränssnitt för LCD -modulen
Gränssnitt för LCD -modulen

Eftersom olika DPI/RGB -gränssnitt LCD -moduler kan användas i denna konsol, tar vi här modulen som används i min egen byggnad som exempel. Och om du valde en annan, kontrollera stiftdefinitionen för din modul och gör bara anslutningarna enligt stiftnamnen som visas i exemplet.

Det finns två gränssnitt på LCD -modulen: ett SPI och ett DPI. SPI: n används för att konfigurera de första inställningarna för LCD -drivrutins -IC: n och vi kan ansluta dem till alla oanvända GPIO: er. Anslut bara Reset, CS, MOSI (SDA/SDI) och SCLK (SCL) stiften, MISO (SDO) pin används inte. För att initiera LCD -drivrutinen använder vi här BCM2835 C -biblioteket för att driva GPIO: erna och matar ut en viss initialiseringssekvens som tillhandahålls av modulleverantören. Källfilen kan hittas senare i den här instruktionsboken.

Installera BCM2835 C -biblioteket på en annan Raspberry Pi 3 enligt instruktionerna här. Använd sedan kommandot "gcc -o lcd_init lcd_init.c -lbcm2835" för att kompilera källfilen. Lägg sedan till en ny rad i filen /etc/rc.local innan "exit 0": "/home/pi/lcd_init" (anta att du har lagt den kompilerade applikationen under/home/pi -mappen). Det bör understrykas att källfilen endast används för den specifika modulen jag använde och för en annan LCD -modul, bara be leverantören om en initieringssekvens och ändra källfilen i enlighet därmed. Denna process är ganska knepig eftersom det vid denna tidpunkt inte syns något från skärmen, det är därför jag starkt föreslår att du gör detta på ett RPI-CMIO-kort eftersom det leder ut alla GPIO så att du kan felsöka det med uart eller wlan.

Följande del är enkel, anslut bara de vänstra stiften på LCD -modulen enligt här. Beror på vilken typ av LCD -modul du har, valde RGB -läge klokt. För mig, här valde jag DPI_OUTPUT_FORMAT_18BIT_666_CFG2 (läge 6). Ändra raden "dpi_output_format = 0x078206" enligt ditt val. Och om din LCD -modul använder en annan upplösning, justera "hdmi_timings = 480 0 41 60 20 800 0 5 10 10 0 0 0 60 0 32000000" se filen här.

Om alla inställningar är korrekta, vid nästa uppstart av din Pi, ska du se displayen på skärmen efter en 30-40-talet svart (från ström till system laddar ditt SPI-initieringsskript).

Steg 4: Tangentbordet och ljudet

Tangentbordet och ljudet
Tangentbordet och ljudet
Tangentbordet och ljudet
Tangentbordet och ljudet

Vi har gjort med Core och Output i de två senaste stegen. Låt oss nu gå till inmatningsdelen.

En spelkonsol behöver nycklar och knappar. Här behöver vi 10 ALPS SKPDACD010 -omkopplare som knapparna upp/ner/höger/vänster, LR och A/B/X/Y. Och vanliga 6x6-knappar för ytmontering används för andra knappar som start/välj och volym upp/ned.

Det finns två sätt att koppla ihop knapparna med Raspberry Pi. Ett sätt är att ansluta knapparna direkt till GPIO: erna på Pi och ett annat sätt är att ansluta knapparna till en MCU och gränssnitt med Pi via USB HID -protokoll. Här valde jag den andra, eftersom vi behöver en MCU för att hantera strömmen på sekvens ändå och det är säkrare att hålla Pi borta från mänsklig beröring.

Så, anslut nycklarna till STM32F103C8T6 och anslut sedan MCU till Pi med USB. Ett exempel på MCU -programmet finns i slutet av detta steg. Ändra stiftdefinitionerna i hw_config.c och kompilera det med MCU: s USB -bibliotek som finns här. Eller så kan du bara ladda ner hex -filen direkt till MCU så länge du delar samma pin -definitioner i schemat i slutet av denna instruerbara.

När det gäller ljudutgångarna ger den officiella schemat för Raspberry Pi 3 B ett bra sätt att filtrera pwm -vågen och samma krets bör fungera perfekt här. En sak som bör påpekas är att komma ihåg att lägga till "audio_pwm_mode = 2" -raden i slutet av config.txt för att minska bruset från ljudutmatningen.

För att driva högtalaren behövs en högtalardrivrutin. Här valde jag TDA2822 och kretsen är den officiella BTL -kretsen. Observera att telefonjacket PJ-327 har en automatisk lossnål på höger utgång. När det inte finns någon hörlur ansluten är stiftet 3 anslutet till rätt kanal. Och så snart hörlurarna är anslutna kopplas denna stift loss från rätt kanal. Denna stift kan användas som högtalarinsignal och högtalaren stängs av när hörlurarna är anslutna.

Steg 5: Kraften

Kraften
Kraften
Kraften
Kraften
Kraften
Kraften

Låt oss återgå till strömavsnittet och kontrollera den detaljerade energidesignen.

Det finns tre kraftdelar: MCU-försörjningen, laddaren/förstärkaren och DC-DC-pengarna.

MCU-försörjningen är uppdelad från alla andra nätaggregat eftersom vi behöver den för att utföra sekvensen före uppstart. När strömbrytaren trycks ned, ansluter PMOS EN -stiftet på LDO till batteriet för att aktivera LDO. MCU startas sedan (knappen är fortfarande nedtryckt). Vid uppstart av MCU kommer den att kontrollera om strömknappen är nedtryckt tillräckligt länge. Efter ungefär 2 sekunder, om MCU: n hittade att strömknappen fortfarande är nedtryckt, kommer den att dra upp "PWR_CTL" -nålen för att hålla PMOS på. För närvarande tar MCU över kontrollen över MCU -strömförsörjningen.

När strömbrytaren trycks in i 2 sekunder igen kör MCU avstängningssekvensen. I slutet av avstängningssekvensen kommer MCU att släppa "PWR_CTL" -nål för att låta PMOS stängas av och MCU -matningen inaktiveras sedan.

Laddaren/boosterdelen använder IC IP5306. Denna IC är 2,4A laddning och 2,1A urladdning mycket integrerad Soc för användning av powerbank och den passar perfekt för våra behov. IC kan ladda batteriet, ge en 5V utgång och visa batterinivån med 4 lysdioder samtidigt.

DC-DC Buck-delen använder två SY8113 högeffektiva 3A-buck. Utgångsspänningen kan programmeras med 2 motstånd. För att säkerställa effektsekvensen behöver vi MCU för att först aktivera Booster. KEY_IP -signalen simulerar en knapptryckning till KEY -stiftet på IP5306 och möjliggör den interna 5V -förstärkaren. Därefter aktiverar MCU: n 3.3V -bocken genom att dra RASP_EN -stiftet högt. Och efter att 3,3V tillhandahålls dras 1,8V -buckets EN -stift högt och möjliggör 1,8V -utgång.

När det gäller batteriet räcker det med två 1000mAh Li-ion-smet för konsolen. Den normala storleken på denna typ av batteri är cirka 50*34*5 mm.

Steg 6: Installera systemet

Installera systemet
Installera systemet

I det här steget kommer vi att sätta ihop alla inställningar.

Först måste du ladda ner och blinka RetroPie -bilden till ett nytt TF -kort. Handledning och nedladdning hittar du här. Ladda ner Raspberrypi 2/3 -versionen. Du kommer att se 2 partitioner efter att bilden har blinkat: en "boot" -partition i FAT16 -format och en "Retropie" -partition i EXT4 -format.

När du har gjort det, sätt inte in det i Raspberry Pi omedelbart eftersom vi måste lägga till en FAT32 -partition för romerna. Använd partitionsverktyg som DiskGenius för att justera EXT4-partitionen till cirka 5-6 GB och skapa en ny FAT32-partition med allt ledigt utrymme kvar på ditt TF-kort. Se bilden jag har laddat upp.

Se till att ditt system kan identifiera TF-kortläsaren som en USB-HDD-enhet och du kommer att se tre partitioner i din explorer. Två av dem är tillgängliga och Windows kommer att be dig att formatera den vänstra. Formatera INTE det !!

Öppna först "boot" -partitionen och följ steg 2 för att konfigurera stiftkonfigurationerna. Eller så kan du bara packa upp boot.zip under det här steget och kopiera alla filer och mappar till din startpartition. Kom ihåg att kopiera det kompilerade lcd_init -skriptet till startpartitionen också.

Här är vi redo att utföra den första starten, men eftersom det inte finns någon display rekommenderar jag starkt att du använder ett RPI-CMIO-kort med en usb wlan-enhet. Sedan kan du konfigurera filen wpa_supplicant och aktivera ssh i det här steget. Men om du inte tänker skaffa en kan GPIO32/33 användas som en UART -terminal. Anslut stiftet TX (GPIO32) och RX (GPIO33) till ett usb-to-uart-kort och få åtkomst till terminalen med överföringshastigheten 115200. Hur som helst måste du få en terminalåtkomst till din Pi.

Vid den första starten kommer systemet att fastna när du försöker expandera filsystemet. Ignorera det, tryck på start (enter -tangenten på USB HID -tangentbordet) och starta om. På terminalen, kopiera lcd_init -skriptet till användarens "pi": s hemmapp och följ steg 3 för att ställa in automatisk start. Efter ytterligare en omstart bör du se skärmen för att lysa upp och visa något.

Just nu är din spelkonsol redo att spela. Men för att kunna ladda ROM och BIOS i ditt TF -kort behöver du åtkomst till en terminal varje gång. För att göra det enkelt föreslår jag att du konfigurerar FAT32 -partitionen.

Säkerhetskopiera först RetroPie-mappen under /home /pi till RetroPie-bck: "cp -r RetroPie RetroPie-bck". Lägg sedan till en ny rad i/etc/fstab: "/dev/mmcblk0p3/home/pi/RetroPie -standardinställningar, uid = 1000, gid = 1000 0 2" för att automatiskt montera FAT32 -partitionen i RetroPie -mappen med inställning av ägaren till användaren "pi". Efter omstart hittar du att innehållet i RetroPie -mappen är borta (om det inte är det, startar du om igen) och några fel visas på skärmen. Kopiera alla filer i RetroPie-bck tillbaka till RetroPie och starta om igen. Felen bör försvinna och du kan konfigurera inmatningsenheten enligt instruktionerna på skärmen.

Om du vill lägga till ROM eller BIOS, koppla ur TF -kortet när det är avstängt och anslut det till din dator. Öppna den tredje partitionen (HUSK att ignorera formattipset !!!) och kopiera filerna till motsvarande mappar.

Steg 7: 3D -tryckt fodral och knappar

3D -tryckt fodral och knappar
3D -tryckt fodral och knappar
3D -tryckt fodral och knappar
3D -tryckt fodral och knappar
3D -tryckt fodral och knappar
3D -tryckt fodral och knappar

Jag designade GameBoy Micro -stilfodralet för spelkonsolen.

Skriv bara ut

4x ABXY. STL

2x LR. STL (Behöver lägga till support)

1x CROSS. STL

1x TOP. STL

1x BOTTOM. STL

Jag skriver ut dem med PLA med 20% fyllning, 0,2 mm lager och det är tillräckligt starkt.

Eftersom fodralet är tätt, kontrollera skrivarens noggrannhet med en testkub innan du skriver ut.

Och tre 5 mm långa φ3 mm skruvar och fyra 10 mm långa φ3 mm skruvar måste monteras ihop.

Steg 8: Alla tillsammans och felsökning

Alla tillsammans och felsökning
Alla tillsammans och felsökning
Alla tillsammans och felsökning
Alla tillsammans och felsökning
Alla tillsammans och felsökning
Alla tillsammans och felsökning
Alla tillsammans och felsökning
Alla tillsammans och felsökning

Eftersom kretsen är lite komplicerad är det ett bra val att göra lite PCB -arbete. Hela schemat och min egen PCB -version laddas upp i slutet av detta steg. Om du tänker använda min PCB -version, ta inte bort min logotyp på Top_Solder -lagret. Det är bättre att göra din egen anpassning och lämna din egen PCB -fil till den lokala tillverkaren för att göra det eftersom det är riktigt svårt att köpa alla samma delar som jag använder på mitt kretskort.

Efter att ha lödt alla komponenter på kretskortet och testat är det första du ska ladda ner hexfil till MCU. Efter det, sätt fast LCD -modulen på kretskortet. LCD -modulen bör vara 3 mm ovanför kretskortet för att passa i fodralet. Använd lite tjock dubbeltejp för att fästa den. Anslut sedan FPC till kontakten och sätt i CM3L- och TF -kortet. Löd INTE batteriet nu, anslut en usb -strömkälla och starta upp det!

Kontrollera alla knappar och display. Mät spänningen mellan BAT+ och GND, kontrollera om spänningen är runt 4,2V. Om spänningen är OK, koppla ur usb -kabeln och löd batteriet. Prova på strömbrytaren.

Sätt CROSS- och ABXY -knappen i TOP -fodralet och sätt PCB -kortet i fodralet. Använd 3 skruvar för att fixera kretskortet i fodralet. Lägg till lite tjockt dubbelband på baksidan av alla SKPDACD010 -knappar och sätt på batteriet. Använd inte tjock tejp för att undvika att stiften på SKPDACD010 skadar batteriet. Håll sedan högtalaren på BOTTOM -fodralet. Innan du stänger den kan du behöva testa alla knappar, kontrollera om de fungerar och studsa ordentligt. Stäng sedan höljet med 4 skruvar.

Njut av.

Några felsökningstips:

1) Trippelkontrollera stiftanslutningen på LCD -modulen på schemat och kretskortet.

2) Dra LCD -signaltrådarna med längdbegränsning.

3) När du inte är säker på effektdelarna, löd och testa varje sektion, följ effektsekvensen. 5V först och sedan 3,3V och 1,8V. När alla kraftdelar har testats, löd de andra komponenterna.

4) Om displayen suddas ut ofta, försök invertera polariteten för PCLK -signalen genom att ställa in dpi_output_format.

5) Om displayen är mycket utanför mitten, försök invertera polariteten för HSYNC- eller VSYNC -signalen.

6) Om skärmen är lite från mitten, försök justera inställningarna för överskanning.

7) Om skärmen är svart, försök att vänta tills systemet startar upp till rc.local -skriptet. Om du behöver display från början, försök att ansluta SPI -gränssnittet till MCU och använd MCU för att initiera LCD -modulen.

8) Om displayen är svart hela tiden, kontrollera initialiseringssekvensen igen.

9) Ställ gärna frågor här eller via e -post: [email protected]

Rekommenderad: