Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:05
Это руководство вдохновлено разработкой Adafruit PiGRRL Zero, оригинальной сборкой Wermy Gameboy Zero и игровой консолью GreatScottLab. Эти игровые приставки на основе RetroPie используют в качестве ядра raspberry pi zero (W). НО после того, как я построил несколько консолей Pi Zero, были обнаружены две основные проблемы.
1) Raspberry Pi Zero (W) имеет только одноядерный Cortex-A7 и 512 МБ оперативной памяти, что нормально для NES / SNES / GB. Однако, когда я попытался запустить эмулятор PS / N64 Emus, это было совершенно неприемлемо. Даже некоторые из игр GBA не могут работать плавно (некоторые звуковые задержки, также в некоторых играх NEOGEO, таких как Metal Slug, при работе со сложными сценами); 2) Большинство сборок игровых консолей используют SPI или TV-out в качестве интерфейса дисплея. Дисплей SPI будет нуждаться в ЦП для помощи с драйвером буфера кадра, что ухудшит игровой процесс, а частота кадров в секунду также ограничена скоростью тактовой частоты SPI. Да и качество отображения ТВ-выхода оставляет желать лучшего.
В этом руководстве мы будем использовать вычислительный модуль RaspberryPi 3 и ЖК-дисплей интерфейса DPI, чтобы создать совершенную игровую консоль RetroPie. Он должен обеспечивать бесперебойную работу всех эмуляторов и обеспечивать высокое разрешение и высокую частоту кадров.
Окончательный размер игровой консоли составляет 152x64x18 мм с аккумулятором до 2000 мАч. Полная сборка стоит около 65 долларов, включая специальную печатную плату, все компоненты, карту TF на 16 ГБ и вычислительный модуль RaspberryPi 3 Lite. Поскольку у меня уже есть 3D-принтер, чехол стоит мне всего 64 г PLA-нити.
Давай начнем.
Примечание. Так как английский не является моим родным языком, если вы обнаружите какие-либо ошибки или что-то непонятное, пожалуйста, дайте мне знать.
Это мой первый пост на Instructable.com, и мне действительно нужны всевозможные предложения от вас, ребята.
Шаг 1: ингредиенты
Вот ингредиенты, которые вам понадобятся для сборки игровой консоли. Некоторые детали могут быть недоступны в вашем регионе. Попробуйте использовать альтернативные детали.
1) Вычислительный модуль RaspberryPi 3 Lite. Купите его в магазине, где вы купили RaspberryPi 3B, или попробуйте на ebay.
2) 3,2-дюймовый ЖК-дисплей с интерфейсом RGB / DPI. УБЕДИТЕСЬ, что у вас есть ЖК-модуль с интерфейсом RGB / DPI, потому что он НЕОБХОДИМ для сборки этой консоли. Я купил свой ЖК-дисплей в местном интернет-магазине, и такой же модуль можно найти на alibaba. Если вы покупаете альтернативный ЖК-модуль, ПОПРОСИТЕ поставщика прислать вам подробный параметр и код инициализации. Также разумно купить соответствующие разъемы в том же магазине, поскольку существует очень много разных типов разъемов.
3) АЛЬПЫ SKPDACD010. Тактовый переключатель с ходом 1,75 мм. Найдите его в местном магазине электронных компонентов.
4) Некоторые другие ключи. Используйте любые другие тактовые клавиши, которые вы можете получить для кнопок START / SELECT / VOL + / VOL-.
5) Спикер. Любой динамик на 8 Ом, 0,5–1,5 Вт.
6) Аккумулятор. Я выбрал литий-ионный аккумулятор 34 * 52 * 5,0 мм 1S 1000 мАч x2.
7) Некоторые микросхемы. STM32F103C8T6, IP5306, TDA2822, NC7WZ16, SY8113, PT4103 и др.
8) Некоторые разъемы. Гнездо USB-Micro, PJ-237 (телефонный разъем), разъем для TF-карты, DDR2 SODIMM и т. Д.
9) Некоторые пассивные компоненты. Резисторы, конденсаторы и индукторы.
10) Изготовленная на заказ печатная плата. Файлы схемы и печатной платы представлены в конце. Не забудьте внести в него изменения, если вы используете какие-либо альтернативные детали.
11) 3D-принтер. Убедитесь, что он может печатать детали размером до 152 * 66 * 10 мм.
12) Достаточно нити PLA.
Шаг 2: вычислительный модуль 3
Raspberry Pi Compute Module 3 - это очень мощная основная плата для прототипирования некоторых интересных гаджетов. Подробное введение можно найти здесь. И некоторую полезную информацию можно найти здесь.
В модуле используется разъем типа DDR2 SODIMM, который немного сложнее использовать. Кроме того, все выводы GPIO BANK1 и BANK0 ядра BCM2837 выведены наружу.
Чтобы начать использовать вычислительный модуль, нам нужно обеспечить несколько различных напряжений: 1,8 В, 3,3 В, 2,5 В и 5,0 В. Среди них 1,8 В и 3,3 В используются для питания некоторых периферийных устройств, каждое из которых требует около 350 мА. Линия питания 2,5 В питает ЦАП TV-out, и его можно подключить к 3,3 В, поскольку нам не нужна функция TV-выхода. 5,0 В должен быть подключен к контактам VBAT и питает ядро. Вход VBAT допускает диапазон напряжений от 2,5 В до 5,0 В, и просто убедитесь, что источник питания может выдавать до 3,5 Вт. Контакты VCCIO (GPIO_XX-XX_VREF) могут быть подключены к 3,3 В, поскольку мы используем уровень CMOS 3,3 В. Вывод SDX_VREF также должен быть подключен к 3,3 В.
Все контакты HDMI, DSI, CAM здесь не используются, просто оставьте их плавающими. Не забудьте связать контакт EMMC_DISABLE_N с напряжением 3,3 В, поскольку мы будем использовать TF-карту в качестве жесткого диска вместо функции загрузки через USB.
Затем подключите контакты SDX_XXX к соответствующим контактам в слоте для карт TF, и никаких подтягивающих или понижающих резисторов не требуется. На этом этапе мы готовы загрузить вычислительный модуль Raspberry Pi 3. Включите источник питания в порядке убывания: 5 В, 3,3 В, а затем 1,8 В, система должна иметь возможность загрузиться, но так как выходных сигналов нет. устройство, мы просто не знаем, нормально ли оно работает. Итак, нам нужно добавить дисплей, чтобы проверить его на следующем шаге.
Но прежде чем мы продолжим, нам нужно сначала сообщить 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 для взаимодействия с ЖК-модулем. Я также говорю Pi использовать GPIO40 / 41 в качестве функции pwm и сделать их правым и левым аудиовыходом. Dcdpi.dtbo - это файл наложения дерева устройств, который сообщает Pi, что мы будем использовать GPIO0-25 в качестве функции DPI. Наконец, мы пишем «dtoverly = dcdpi», чтобы знать, что Pi загружает предоставленный нами оверлейный файл.
На данный момент Raspberry Pi полностью понимают, какую функцию следует использовать для каждого GPIO, и мы готовы двигаться дальше.
Шаг 3: Подключение ЖК-модуля
Поскольку в этой консоли может использоваться другой ЖК-модуль с интерфейсом DPI / RGB, здесь в качестве примера мы возьмем модуль, используемый в моей собственной сборке. И если вы выбрали другой, проверьте определение контактов вашего модуля и просто выполните соединения в соответствии с именами контактов, как показано в примере.
На ЖК-модуле есть два интерфейса: SPI и DPI. SPI используется для настройки начальных настроек IC драйвера ЖК-дисплея, и мы можем подключить их к любому неиспользуемому GPIO. Подключайте только выводы Reset, CS, MOSI (SDA / SDI) и SCLK (SCL), вывод MISO (SDO) не используется. Для инициализации драйвера ЖК-дисплея мы используем библиотеку 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). Следует подчеркнуть, что исходный файл используется только для определенного модуля, который я использовал, и для другого ЖК-модуля, просто запросите у поставщика последовательность инициализации и соответствующим образом измените исходный файл. Этот процесс довольно сложен, потому что на данный момент ничего не видно с экрана, поэтому я настоятельно рекомендую вам сделать это на плате RPI-CMIO, поскольку она выводит все GPIO, чтобы вы могли отлаживать его с помощью uart или wlan.
Следующая часть проста, просто подключите левые контакты ЖК-модуля в соответствии с здесь. В зависимости от того, какой у вас ЖК-модуль, выбирайте режим RGB с умом. Для меня здесь я выбрал DPI_OUTPUT_FORMAT_18BIT_666_CFG2 (режим 6). Измените строку «dpi_output_format = 0x078206» по своему выбору. А если ваш ЖК-модуль использует другое разрешение, настройте «hdmi_timings = 480 0 41 60 20 800 0 5 10 10 0 0 0 60 0 32000000», см. Файл здесь.
Если все настройки верны, при следующей загрузке вашего Pi вы должны увидеть дисплей на экране после 30-40-секундного черного (от питания до системы загружается ваш сценарий инициализации SPI).
Шаг 4: клавиатура и аудио
Мы закончили с Ядром и Выходом на последних двух шагах. Теперь перейдем к части ввода.
Игровой консоли нужны ключи и кнопки. Здесь нам понадобится 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 дает хороший способ фильтрации волны ШИМ, и та же схема должна отлично работать здесь. Следует отметить одну вещь: не забудьте добавить строку «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 отключится.
В части зарядного устройства / усилителя используется микросхема IP5306. Эта микросхема имеет заряд 2,4 А и разряд 2,1 А, высокоинтегрированный Soc для использования в качестве источника питания, и он идеально подходит для наших нужд. Микросхема способна заряжать аккумулятор, обеспечивать выходное напряжение 5 В и одновременно отображать уровень заряда аккумулятора с помощью 4 светодиодов.
В понижающей части DC-DC используются два высокоэффективных понижающих преобразователя SY8113 на 3 А. Выходное напряжение можно программировать с помощью 2 резисторов. Чтобы обеспечить последовательность питания, нам нужно, чтобы MCU сначала включил Booster. Сигнал KEY_IP имитирует нажатие клавиши на выводе KEY IP5306 и включает внутренний усилитель 5 В. После этого микроконтроллер включит понижающий преобразователь 3,3 В, подтянув вывод RASP_EN к высокому уровню. И после того, как подается напряжение 3,3 В, вывод EN понижающего преобразователя 1,8 В подтягивается к высокому уровню и включает выход 1,8 В.
Что касается аккумулятора, то для приставки достаточно двух литий-ионных аккумуляторов емкостью 1000 мАч. Нормальный размер такой батареи составляет около 50 * 34 * 5 мм.
Шаг 6: Настройка системы
На этом этапе мы соберем все настройки вместе.
Во-первых, вам нужно загрузить и прошить образ RetroPie на новую TF-карту. Учебное пособие и загрузку можно найти здесь. Загрузите версию Raspberrypi 2/3. После прошивки образа вы увидите 2 раздела: «загрузочный» раздел формата FAT16 и раздел «Retropie» формата EXT4.
Когда вы это сделаете, не вставляйте его в Raspberry Pi сразу, потому что нам нужно добавить раздел FAT32 для ромов. Используйте инструменты разделения, такие как DiskGenius, чтобы настроить раздел EXT4 примерно до 5-6 ГБ и создать новый раздел FAT32 со всем свободным пространством, оставшимся на вашей TF-карте. См. Загруженное мной изображение.
Убедитесь, что ваша система может идентифицировать устройство чтения карт TF как устройство USB-HDD, и вы увидите 3 раздела в вашем проводнике. Два из них доступны, и Windows попросит вас отформатировать левый. НЕ форматируйте !!
Сначала откройте «загрузочный» раздел и выполните шаг 2, чтобы настроить конфигурацию контактов. Или вы можете просто разархивировать boot.zip на этом шаге и скопировать все файлы и папки в свой загрузочный раздел. Не забудьте также скопировать скомпилированный скрипт lcd_init в загрузочный раздел.
Здесь мы готовы выполнить первую загрузку, но, поскольку дисплея нет, я настоятельно рекомендую вам использовать плату RPI-CMIO с устройством wlan usb. Затем вы можете настроить файл wpa_supplicant и включить ssh на этом этапе. Однако, если вы не собираетесь его получать, GPIO32 / 33 можно использовать в качестве терминала UART. Подключите контакты TX (GPIO32) и RX (GPIO33) к плате usb-to-uart и получите доступ к терминалу со скоростью 115200 бод. В любом случае вам необходимо получить терминальный доступ к вашему Pi.
При первой загрузке система зависнет при попытке расширить файловую систему. Игнорируйте это, нажмите старт (клавиша ввода на USB HID клавиатуре) и перезагрузитесь. На терминале скопируйте сценарий lcd_init в домашнюю папку пользователя «pi» и выполните шаг 3, чтобы установить автоматический запуск. После очередной перезагрузки вы должны увидеть экран, который загорится и что-то покажет.
Теперь ваша игровая консоль готова к игре. Однако для того, чтобы загрузить ромы и BIOS на карту TF, вам каждый раз требуется доступ к терминалу. Для простоты я предлагаю вам настроить раздел FAT32.
Сначала сделайте резервную копию папки RetroPie в / home / pi в RetroPie-bck: «cp -r RetroPie RetroPie-bck». Затем добавьте новую строку в / etc / fstab: «/ dev / mmcblk0p3 / home / pi / RetroPie defaults, uid = 1000, gid = 1000 0 2» для автоматического монтирования раздела FAT32 в папку RetroPie с установкой владельца для пользователя. "Пи". После перезагрузки вы обнаружите, что все содержимое папки RetroPie исчезло (если это не так, перезагрузитесь снова), и на экране появятся некоторые ошибки. Скопируйте все файлы из RetroPie-bck обратно в RetroPie и снова перезагрузитесь. Ошибки должны исчезнуть, и вы сможете настроить устройство ввода, следуя инструкциям на экране.
Если вы хотите добавить ромы или BIOS, отключите TF-карту при выключении и подключите ее к компьютеру. Откройте 3-й раздел (НЕ ЗАПУСКАЙТЕ совет по форматированию !!!) и скопируйте файлы в соответствующие папки.
Шаг 7: чехол и кнопки с 3D-печатью
Я разработал футляр в стиле GameBoy Micro для игровой консоли.
Просто распечатайте
4x ABXY. STL
2x LR. STL (необходимо добавить поддержку)
1x CROSS. STL
1x TOP. STL
1x BOTTOM. STL
Я печатаю их с помощью PLA с 20% -ным заполнением, толщиной 0,2 мм, и он достаточно прочный.
Поскольку корпус плотный, перед печатью проверьте точность вашего принтера с помощью тестового куба.
И три винта диаметром 5 мм диаметром 3 мм и четыре винта диаметром 3 мм длиной 10 мм необходимы, чтобы собрать их вместе.
Шаг 8: Все вместе и устранение неполадок
Поскольку схема довольно сложная, это хороший выбор для работы с печатной платой. Вся схема и моя собственная версия печатной платы загружаются в конце этого шага. Если вы собираетесь использовать мою версию печатной платы, пожалуйста, не удаляйте мой логотип на слое Top_Solder. Лучше сделать свою индивидуальную настройку и передать свой собственный файл печатной платы местному производителю, чтобы он разобрался, потому что действительно сложно купить все те же детали, которые я использую на своей печатной плате.
После того, как все компоненты спаяны на печатной плате и протестированы, первое, что нужно сделать, это загрузить шестнадцатеричный файл в MCU. После этого приклеиваем ЖК-модуль к плате. ЖК-модуль должен быть на 3 мм выше печатной платы, чтобы поместиться в корпус. Используйте толстый двусторонний скотч, чтобы приклеить его. Затем подключите FPC к разъему и вставьте карту CM3L и TF. НЕ припаивайте аккумулятор сейчас, подключите источник питания USB и загрузите его!
Проверьте все кнопки и дисплей. Измерьте напряжение между BAT + и GND, проверьте, составляет ли напряжение около 4,2 В. Если напряжение в норме, отключите кабель usb и припаяйте аккумулятор. Попробуй кнопку включения.
Поместите кнопки CROSS и ABXY в верхний корпус, а плату - в корпус. Используйте 3 винта, чтобы закрепить плату в корпусе. Наклейте толстую двустороннюю ленту на заднюю часть всех кнопок SKPDACD010 и приклейте к ней аккумулятор. ОБЯЗАТЕЛЬНО используйте толстую ленту, чтобы контакты SKPDACD010 не повредили аккумулятор. Затем приклейте динамик к НИЖНЕМУ корпусу. Прежде чем закрыть его, вам может потребоваться опробовать все кнопки, проверить, работают ли они и правильно ли отскакивают. Затем закройте корпус 4 винтами.
Наслаждаться.
Некоторые советы по устранению неполадок:
1) Трижды проверьте соединение контактов ЖК-модуля на схеме и печатной плате.
2) Проложите сигнальные провода ЖК-дисплея с учетом ограничений по длине.
3) Если вы не уверены насчет силовых секций, припаяйте и протестируйте каждую секцию, следуя последовательности включения питания. Сначала 5 В, затем 3,3 В и 1,8 В. После проверки всех силовых секций припаяйте остальные компоненты.
4) Если изображение на дисплее часто размывается, попробуйте изменить полярность сигнала PCLK, установив dpi_output_format.
5) Если дисплей сильно смещен по центру, попробуйте поменять полярность сигнала HSYNC или VSYNC.
6) Если дисплей немного смещен по центру, попробуйте отрегулировать настройки переразвертки.
7) Если дисплей черный, попробуйте дождаться загрузки системы с помощью сценария rc.local. Если вам нужен дисплей с самого начала, попробуйте подключить интерфейс SPI к MCU и использовать MCU для инициализации ЖК-модуля.
8) Если дисплей все время черный, проверьте последовательность инициализации еще раз.
9) Не стесняйтесь задавать любые вопросы здесь или по электронной почте: [email protected]
Рекомендуемые:
Игровая консоль ATBOY Minimal Retro: 5 шагов
Игровая консоль ATBOY Minimal Retro: небольшая консоль в стиле ретро, основанная на OLED ATtiny85 x 0,96 для игры в космические захватчики, тетрис и т. Д
Портативная игровая консоль своими руками с использованием RetroPie: 7 шагов
Портативная игровая консоль DIY с использованием RetroPie: посмотрите видео выше, чтобы лучше понять этот проект. Отлично. Пора начать! Прежде всего, мы собираемся использовать RetroPie. Это оставляет нам два варианта. Если мы уже установили Raspbian на нашу SD-карту, мы можем установить RetroP
Портативная игровая консоль DIY Raspberry Pi Zero: 6 шагов (с изображениями)
Портативная игровая консоль DIY Raspberry Pi Zero: в этом проекте я покажу вам, как я использовал Raspberry Pi Zero, NiMH батареи, самодельную схему защиты от переразряда, ЖК-дисплей заднего вида и аудиоусилитель для создания портативной игровой консоли, которая может играть ретро игры. Давайте начнем
Игровая консоль Pi Tourer 1963 года: 9 шагов (с изображениями)
Игровая консоль Pi Tourer 1963 года: это автомобильный радиоприемник Sky Tourer 1963 года выпуска, который я переделал в удобную портативную игровую приставку в стиле ретро. Он имеет встроенный Raspberry Pi 3 с 6 аркадными кнопками и джойстиком, управляющим этими винтажными спрайтами RetroPie через плату контроллера Picade
Игровая консоль Retro (мод N64) с KODI: 7 шагов (с изображениями)
Игровая консоль в стиле ретро (мод N64) с KODI: играть в ретро-игры на старых школьных консолях - это очень весело, однако покупать отдельные консоли и все игры, которые к ним прилагаются, слишком громоздко и дорого! Не говоря уже о том, что вы студент колледжа / университета и переезжаете накануне