Съдържание:

Retro-CM3: Мощна конзола за игри, управлявана от RetroPie: 8 стъпки (със снимки)
Retro-CM3: Мощна конзола за игри, управлявана от RetroPie: 8 стъпки (със снимки)

Видео: Retro-CM3: Мощна конзола за игри, управлявана от RetroPie: 8 стъпки (със снимки)

Видео: Retro-CM3: Мощна конзола за игри, управлявана от RetroPie: 8 стъпки (със снимки)
Видео: Trial Bike Epic Stunts Gameplay 🎮📲🏍 Part 2 2024, Юли
Anonim
Retro-CM3: Мощна конзола за игри, управлявана от RetroPie
Retro-CM3: Мощна конзола за игри, управлявана от RetroPie
Retro-CM3: Мощна конзола за игри, управлявана от RetroPie
Retro-CM3: Мощна конзола за игри, управлявана от RetroPie
Retro-CM3: Мощна конзола за игри, управлявана от RetroPie
Retro-CM3: Мощна конзола за игри, управлявана от RetroPie

Тази инструкция е вдъхновена от PiGRRL Zero на adafruit, оригиналната версия на Wermy на Gameboy Zero и игралната конзола на GreatScottLab. Тези игрови конзоли, базирани на RetroPie, използват малиновото пи нула (W) като ядро. НО, след като построих няколко конзоли Pi Zero, бяха открити два основни проблема.

1) Raspberry Pi Zero (W) има само едноядрен Cortex-A7 и 512MB ram, което е добре за неща от NES/SNES/GB. Въпреки това, когато се опитах да стартирам PS/N64 Emus, опитът беше доста неприемлив. Дори някои от игрите на GBA не могат да работят гладко (Някои звукови забавяния, също и в някои NEOGEO игри като Metal Slug, когато се занимават със сложни сцени); 2) Повечето от конструкциите на игровите конзоли използват SPI или TV-out като интерфейс на дисплея. SPI дисплеят ще се нуждае от процесора, за да помогне с драйвера за буфер на рамката, което ще влоши играта, а fps също е ограничено от скоростта на SPI часовника. А качеството на дисплея на телевизионния изход просто не е достатъчно добро.

В тази инструкция ще използваме RaspberryPi Compute Module 3 и LCD интерфейс с DPI, за да изградим най -добрата игрална конзола RetroPie. Той трябва да може да изпълнява гладко всички емулатори и да осигурява висока разделителна способност и висока честота на кадрите.

Крайният размер на игровата конзола е 152x64x18mm с батерия до 2000mAh. Общите разходи за изграждане са около $ 65, включително персонализирана печатна платка, всички компоненти, 16GB TF карта и изчислителен модул RaspberryPi 3 Lite. Тъй като вече имам 3D принтер, калъфът ми струва само 64g PLA нажежаема жичка.

Нека да започнем.

Забележка: Тъй като английският не е моят първи език, ако откриете грешки или нещо не е ясно, моля, любезно ме уведомете.

Това е първата ми публикация на instructable.com и наистина се нуждая от всякакви предложения от вас, момчета.

Стъпка 1: Съставки

Съставки
Съставки
Съставки
Съставки
Съставки
Съставки
Съставки
Съставки

Ето съставките, от които се нуждаете, за да изградите конзолата за игри. Някои от частите може да не са налични във вашия регион, опитайте някои алтернативни части.

1) Изчислителният модул RaspberryPi 3 Lite. Купете го от магазина, откъдето сте закупили RaspberryPi 3B, или го опитайте в ebay.

2) 3.2 -инчов LCD с RGB/DPI интерфейс. Уверете се, че имате LCD модул с интерфейс RGB/DPI, защото ТРЯБВА да изградите тази конзола. Взех моя LCD от местен електронен магазин и същият модул може да се намери в alibaba. Ако купувате алтернативен LCD модул, ПОМОЛВАЙТЕ доставчика да ви изпрати подробни параметри и код за инициализация. Също така е разумен избор да закупите съответните конектори от същия магазин, тъй като има толкова много различни видове конектори.

3) ALPS SKPDACD010. Тактичен превключвател с ход 1,75 мм. Потърсете го в местния магазин за електронни компоненти.

4) Някои други ключове. Използвайте всички други клавиши за тактиране, които можете да получите за бутоните START/SELECT/VOL+/VOL-.

5) Говорител. Всеки 8 ома, 0.5-1.5 W високоговорител.

6) Батерия. Избрах 34*52*5.0 мм 1S 1000mAh литиево-йонна батерия x2.

7) Някои интегрални схеми. STM32F103C8T6, IP5306, TDA2822, NC7WZ16, SY8113, PT4103 и др.

8) Някои конектори. USB-Micro Female, PJ-237 (жак за телефон), жак за TF-карта, DDR2 SODIMM и др.

9) Някои пасивни компоненти. Резистори, кондензатори и индуктори.

10) Персонализирана печатна платка. Схематичните и PCB файловете са предоставени в края. Не забравяйте да го промените, ако използвате алтернативни части.

11) 3D принтер. Уверете се, че може да отпечатва части до размер 152*66*10 мм.

12) Доста PLA нишка.

Стъпка 2: Изчислителният модул 3

Изчислителният модул 3
Изчислителният модул 3
Изчислителният модул 3
Изчислителният модул 3

Изчислителният модул 3 на Raspberry Pi е много мощна основна платка за прототипиране на някои притурки за интерес. Подробно въведение може да се намери тук. И тук има полезна информация.

Модулът използва съединител тип DDR2 SODIMM, който е малко по -труден за използване. Освен това всички GPIO щифтове на BCM2837 ядрото BANK1 и BANK0 се извеждат.

За да започнем да използваме изчислителния модул, трябва да осигурим няколко различни напрежения: 1.8V, 3.3V, 2.5V и 5.0V. Сред тях 1.8V и 3.3V се използват за захранване на някои периферни устройства, които се нуждаят от около 350mA всяка. 2.5V захранващата линия захранва телевизионния DAC и може да бъде свързана към 3.3V, тъй като не се нуждаем от функция за TV-out. 5.0V трябва да бъде свързан към VBAT щифтовете и захранва ядрото. Входът VBAT приема напрежения в диапазона от 2.5V до 5.0V и просто се уверете, че захранването може да изведе до 3.5W. Пиновете VCCIO (GPIO_XX-XX_VREF) могат да бъдат свързани към 3.3V, тъй като използваме 3.3V CMOS ниво. Щифтът SDX_VREF също трябва да бъде свързан към 3.3V.

Всички HDMI, DSI, CAM щифтове не се използват тук, просто ги оставете да плават. Не забравяйте да завържете щифта EMMC_DISABLE_N към 3.3V, тъй като ще използваме TF карта като твърд диск вместо функцията за зареждане от USB.

След това свържете щифтовете SDX_XXX към съответните щифтове на слота за TF карта и не са необходими издърпващи или падащи резистори. На тази стъпка сме готови да стартираме Raspberry Pi Compute Module 3. Включете захранването в ред на намаляване: 5V, 3.3V и след това 1.8V, системата трябва да може да се стартира, но тъй като няма изход устройство, просто не знаем дали работи добре. Така че, трябва да добавим дисплей, за да го проверим в следващата стъпка.

Но преди да продължим, първо трябва да кажем на Pi каква е функцията на всеки GPIO. Тук предоставям някои файлове, поставям „dt-blob.bin“, „bcm2710-rpi-cm3.dtb“и „config.txt“в папката за зареждане на току-що мигаща TF карта. Поставете "dcdpi.dtbo" в папката /boot /overlay. Dt-blob.bin определя функцията по подразбиране за всеки GPIO. Сменям GPIO14/15 на нормален GPIO и премествам функцията UART0 на GPIO32/33, тъй като имаме нужда от GPIO14/15 за взаимодействие с LCD модула. Също така казвам на Pi да използва GPIO40/41 като pwm функция и да ги направи десен и ляв аудио изход. Dcdpi.dtbo е файл с наслагване на дърво на устройството и казва на Pi, че ще използваме GPIO0-25 като DPI функция. И накрая, ние пишем "dtoverly = dcdpi", за да осъзнаем Pi, за да зареди предоставения от нас файл с наслагване.

В този момент Raspberry Pi напълно разбират коя функция трябва да се използва за всеки GPIO и сме готови да продължим.

Стъпка 3: Свързване на LCD модула

Свързване на LCD модула
Свързване на LCD модула
Свързване на LCD модула
Свързване на LCD модула
Свързване на LCD модула
Свързване на LCD модула

Тъй като в тази конзола могат да се използват различни DPI/RGB интерфейсни LCD модули, тук ще вземем за пример модула, използван в моята собствена конструкция. И ако сте избрали различен, проверете дефиницията на пина на вашия модул и просто направете връзките според имената на пиновете, както е показано в примера.

На LCD модула има два интерфейса: SPI и DPI. SPI се използва за конфигуриране на началните настройки на IC драйвера на LCD и можем да ги свържем с всеки неизползван GPIO. Свързвайте само щифтовете за нулиране, CS, MOSI (SDA/SDI) и SCLK (SCL), не се използва щифтът MISO (SDO). За да инициализираме LCD драйвера, тук използваме библиотеката BCM2835 C за задвижване на GPIO и извежда определена инициализираща последователност, предоставена от доставчика на модула. Изходният файл може да бъде намерен по -късно в тази инструкция.

Инсталирайте библиотеката BCM2835 C на друга Raspberry Pi 3 съгласно инструкциите тук. След това използвайте командата "gcc -o lcd_init lcd_init.c -lbcm2835", за да компилирате изходния файл. След това добавете нов ред във файла /etc/rc.local преди "exit 0": "/home/pi/lcd_init" (да предположим, че сте поставили компилираното приложение в/home/pi папка). Трябва да се подчертае, че изходният файл се използва само за определен модул, който използвах, и за различен LCD модул, просто помолете доставчика за инициализираща последователност и променете съответно изходния файл. Този процес е доста сложен, тъй като в този момент нищо не може да се види от екрана, затова силно ви препоръчвам да направите това на RPI-CMIO платка, тъй като тя извежда всички GPIO, така че да можете да я отстраните с помощта на uart или wlan.

Следващата част е лесна, просто свържете левите щифтове на LCD модула според тук. В зависимост от това какъв LCD модул имате, изберете разумно RGB режима. За мен тук избрах DPI_OUTPUT_FORMAT_18BIT_666_CFG2 (режим 6). Променете реда "dpi_output_format = 0x078206" според вашия избор. И ако вашият LCD модул използва различна разделителна способност, регулирайте „hdmi_timings = 480 0 41 60 20 800 0 5 10 10 0 0 0 60 0 32000000“, вижте файла тук.

Ако всички настройки са правилни, при следващото зареждане на вашия Pi, трябва да видите дисплея на екрана след 30-40s черен цвят (от захранването до системата зарежда вашия скрипт за инициализация на SPI).

Стъпка 4: Клавиатурата и аудиото

Клавиатурата и аудиото
Клавиатурата и аудиото
Клавиатурата и аудиото
Клавиатурата и аудиото

Свършихме с ядрото и изхода в последните две стъпки. Сега нека преминем към частта Input.

Игровата конзола се нуждае от ключове и бутони. Тук имаме нужда от 10 превключвателя ALPS SKPDACD010 като бутоните нагоре/надолу/надясно/наляво, LR и A/B/X/Y. Нормалните бутони за повърхностно монтиране 6x6 се използват за други бутони като стартиране/избор и увеличаване/намаляване на звука.

Има два начина за свързване на бутоните с Raspberry Pi. Един от начините е свързването на бутоните директно към GPIO на Pi, а друг начин е свързването на бутоните към MCU и интерфейс с Pi чрез USB HID протокол. Тук избрах второто, тъй като така или иначе се нуждаем от MCU, за да се справим с последователността при включване и е по -безопасно да държим Pi далеч от човешкото докосване.

Така че, свържете ключовете към STM32F103C8T6 и след това свържете MCU към Pi с USB. Пример за програмата MCU може да бъде намерен в края на тази стъпка. Променете дефинициите на пинове в hw_config.c и го компилирайте с USB библиотеката на MCU, намерена тук. Или можете просто да изтеглите шестнадесетичния файл директно в MCU, стига да споделяте същите дефиниции на щифтове в схемата в края на тази инструкция.

Що се отнася до аудио изходите, официалната схема на Raspberry Pi 3 B дава добър начин за филтриране на pwm вълната и същата схема трябва да работи перфектно тук. Едно нещо, което трябва да се отбележи, е, че не забравяйте да добавите реда "audio_pwm_mode = 2" в края на config.txt, за да намалите шума на аудио изхода.

За да управлявате високоговорителя, е необходим драйвер за високоговорители. Тук избрах TDA2822 и веригата е официалната BTL верига. Обърнете внимание, че жакът за телефон PJ-327 има щифт за автоматично отделяне на десния изход. Когато няма включени слушалки, щифтът 3 е свързан към десния канал. И веднага след като слушалките са включени, този щифт се отделя от десния канал. Този щифт може да се използва като входен щифт на високоговорителя и високоговорителят ще заглуши, когато слушалките са включени.

Стъпка 5: Силата

Силата
Силата
Силата
Силата
Силата
Силата

Нека се върнем към секцията за захранване и да проверим подробния дизайн на захранването.

Има 3 секции за захранване: захранване на MCU, зарядно устройство/усилвател и DC-DC Bucks.

Захранването на MCU е разделено от всички други захранвания, защото се нуждаем от него за изпълнение на последователността преди включване. Когато бутонът за захранване е натиснат надолу, PMOS ще свърже EN щифта на LDO към батерията, за да активира LDO. След това MCU се включва (бутонът все още е натиснат). При стартиране на MCU той ще провери дали бутонът за захранване е натиснат достатъчно дълго. След около 2 секунди, ако MCU установи, че бутонът за захранване все още е натиснат, той ще издърпа щифта "PWR_CTL", за да запази PMOS включен. В този момент MCU поема контрола върху захранването на MCU.

Когато бутонът за захранване се натисне отново за 2 секунди, MCU ще стартира последователността на изключване. В края на последователността на изключване на захранването, MCU ще освободи щифта "PWR_CTL", за да позволи на PMOS да се изключи и захранването на MCU след това да бъде забранено.

Зарядното/усилвателното устройство използва IC IP5306. Тази интегрална схема е 2.4A зареждане и 2.1A разреждане, високо интегриран Soc за използване на захранваща банка и е напълно подходящ за нашите нужди. IC може да зарежда батерията, да осигурява 5V изход и да показва нивото на батерията с 4 светодиода едновременно.

Частта DC-DC Buck използва две високоефективни 3A долари SY8113. Изходното напрежение може да се програмира от 2 резистора. За да осигурим последователността на захранване, се нуждаем от MCU, за да активираме първо Booster. Сигналът KEY_IP ще симулира натискане на клавиш към щифта KEY на IP5306 и активира вътрешния 5V усилвател. След това MCU ще активира 3.3V долар, като издърпа RASP_EN щифт високо. И след осигуряване на 3.3V, EN щифтът на 1.8V парите се издърпва високо и дава възможност за 1.8V изход.

Що се отнася до батерията, две 1000mAh литиево-йонни батерии са достатъчни за конзолата. Нормалният размер на този вид батерии е около 50*34*5 мм.

Стъпка 6: Настройване на системата

Настройване на системата
Настройване на системата

В тази стъпка ще съберем всички настройки.

Първо, трябва да изтеглите и прехвърлите образа на RetroPie в нова TF карта. Урок и изтегляне можете да намерите тук. Изтеглете версията на Raspberrypi 2/3. Ще видите 2 дяла след флаш изображението: дял "boot" във формат FAT16 и дял "Retropie" в формат EXT4.

Когато сте го направили, не го вмъквайте незабавно в Raspberry Pi, защото трябва да добавим FAT32 дял за ром. Използвайте инструменти за дялове като DiskGenius, за да настроите дяла EXT4 на около 5-6 GB и да направите нов дял FAT32 с цялото свободно място, останало на вашата TF карта. Вижте снимката, която качих.

Уверете се, че вашата система е в състояние да идентифицира четеца на карти TF като USB-HDD устройство и ще видите 3 дяла във вашия Explorer. Две от тях са достъпни и Windows ще ви помоли да форматирате лявата. НЕ го форматирайте !!

Първо отворете дяла "boot" и следвайте стъпка 2, за да настроите конфигурациите на щифтовете. Или можете просто да разархивирате boot.zip под тази стъпка и да копирате всички файлове и папки в своя зареждащ дял. Не забравяйте да копирате и компилирания скрипт lcd_init в зареждащия дял.

Тук сме готови да извършим първото зареждане, но тъй като няма дисплей силно препоръчвам да използвате RPI-CMIO платка с usb wlan устройство. След това можете да конфигурирате файла wpa_supplicant и да активирате ssh на тази стъпка. Ако обаче не възнамерявате да получите такъв, GPIO32/33 може да се използва като UART терминал. Свържете щифта TX (GPIO32) и RX (GPIO33) към платка usb-to-uart и влезте в терминала със скорост на предаване 115200. Така или иначе, трябва да получите терминален достъп до вашия Pi.

При първото зареждане системата ще заседне при опит за разширяване на файловата система. Игнорирайте го, натиснете старт (клавиш за въвеждане на USB HID клавиатурата) и рестартирайте. На терминала копирайте скрипта lcd_init в домашната папка на потребителя "pi" и следвайте стъпка 3, за да зададете автоматично стартиране. След друго рестартиране трябва да видите екрана, за да светне и да покаже нещо.

В този момент вашата игрална конзола е готова за игра. Въпреки това, за да заредите ROM и BIOS във вашата TF карта, имате нужда от достъп до терминал всеки път. За да стане по -лесно, предлагам да настроите дяла FAT32.

Първо архивирайте папката RetroPie под /home /pi в RetroPie-bck: "cp -r RetroPie RetroPie-bck". След това добавете нов ред в/etc/fstab: "/dev/mmcblk0p3/home/pi/RetroPie по подразбиране, uid = 1000, gid = 1000 0 2" за автоматично монтиране на дяла FAT32 в папката RetroPie с настройка на собственика за потребител "пи". След рестартиране ще откриете, че съдържанието на папката RetroPie е изчезнало (ако не е, рестартирайте отново) и някои грешки се показват на екрана. Копирайте всички файлове в RetroPie-bck обратно в RetroPie и рестартирайте отново. Грешките трябва да изчезнат и можете да конфигурирате входното устройство, като следвате инструкциите на екрана.

Ако искате да добавите ROM или BIOS, изключете TF картата при изключване и я свържете към компютъра. Отворете третия дял (ЗАПОМНЕТЕ, за да ИГНОРИРАТЕ съвета за формат !!!) и копирайте файловете в съответните папки.

Стъпка 7: 3D отпечатаният калъф и бутони

Калъфът и бутоните с 3D печат
Калъфът и бутоните с 3D печат
Калъфът и бутоните с 3D печат
Калъфът и бутоните с 3D печат
Калъфът и бутоните с 3D печат
Калъфът и бутоните с 3D печат

Проектирах калъф в стил GameBoy Micro за игровата конзола.

Просто отпечатайте

4x ABXY. STL

2x LR. STL (Трябва да добавите поддръжка)

1x CROSS. STL

1x TOP. STL

1x BOTTOM. STL

Отпечатвам ги с PLA с 20% запълване, слой 0,2 мм и е достатъчно здрав.

Тъй като кутията е стегната, проверете точността на вашия принтер с някакъв тест куб преди да отпечатате.

И три 5 мм дълги φ3 мм винта и четири 10 мм дълги φ3 мм винта са необходими, за да ги сглобите заедно.

Стъпка 8: Всички заедно и отстраняване на проблеми

Всички заедно и отстраняване на проблеми
Всички заедно и отстраняване на проблеми
Всички заедно и отстраняване на проблеми
Всички заедно и отстраняване на проблеми
Всички заедно и отстраняване на проблеми
Всички заедно и отстраняване на проблеми
Всички заедно и отстраняване на проблеми
Всички заедно и отстраняване на проблеми

Тъй като схемата е доста сложна, е добър избор да се извърши някаква работа с печатни платки. Цялата схема и моята собствена PCB версия се качват в края на тази стъпка. Ако възнамерявате да използвате моята версия на печатна платка, моля, не премахвайте логото ми от слоя Top_Solder. По -добре е да направите своя собствена персонализация и да предадете свой собствен PCB файл на местния производител, за да го направите, защото е наистина трудно да се купят същите части, които използвам на моята печатна платка.

След запояване на всички компоненти на печатната платка и тестване, първото нещо, което трябва да направите, е да изтеглите шестнадесетичен файл в MCU. След това залепете LCD модула върху печатната платка. LCD модулът трябва да е на 3 мм над печатната платка, за да се побере в кутията. Използвайте дебела двойна странична лента, за да я залепите. След това свържете FPC към конектора и поставете CM3L и TF картата. НЕ запоявайте батерията сега, включете USB източник на захранване и я стартирайте!

Проверете всички бутони и дисплея. Измерете напрежението между BAT+ и GND, проверете дали напрежението е около 4.2V. Ако напрежението е наред, изключете USB кабела и запоявайте батерията. Опитайте бутона за захранване.

Поставете бутона CROSS и ABXY в горната кутия и поставете печатната платка в кутията. Използвайте 3 винта, за да фиксирате печатната платка в кутията. Добавете дебела двойна странична лента на гърба на всички бутони SKPDACD010 и залепете батерията върху нея. НЕ използвайте дебела лента, за да избегнете повредата на акумулатора от щифтовете на SKPDACD010. След това залепете високоговорителя към кутията BOTTOM. Преди да го затворите, може да се наложи да изпробвате всички бутони, да проверите дали работят и да отскачате правилно. След това затворете кутията с 4 винта.

Наслади се.

Някои съвети за отстраняване на проблеми:

1) Три пъти проверете щифтовата връзка на LCD модула на схемата и печатната платка.

2) Прокарайте проводниците на LCD сигнала с ограничение по дължина.

3) Когато не сте сигурни за захранващите секции, запоявайте и тествайте всяка секция, следвайки последователността на захранване. Първо 5V, а след това 3.3V и 1.8V. След като всички секции за захранване бъдат тествани, запойте останалите компоненти.

4) Ако дисплеят се размазва често, опитайте да обърнете полярността на PCLK сигнала, като зададете dpi_output_format.

5) Ако дисплеят е много извън центъра, опитайте да обърнете полярността на сигнала HSYNC или VSYNC.

6) Ако дисплеят е леко извън центъра, опитайте да коригирате настройките за прескачане.

7) Ако дисплеят е черен, опитайте се да изчакате системата да се зареди до rc.local скрипта. Ако имате нужда от дисплей от самото начало, опитайте да свържете SPI интерфейса към MCU и използвайте MCU, за да инициализирате LCD модула.

8) Ако дисплеят е черен през цялото време, проверете отново последователността на инициализация.

9) Чувствайте се свободни да задавате въпроси тук или по имейл: [email protected]

Препоръчано: