Retro-CM3: um poderoso console de jogo RetroPie manipulado: 8 etapas (com imagens)
Retro-CM3: um poderoso console de jogo RetroPie manipulado: 8 etapas (com imagens)
Anonim
Retro-CM3: um poderoso console de jogo RetroPie manipulado
Retro-CM3: um poderoso console de jogo RetroPie manipulado
Retro-CM3: um poderoso console de jogo RetroPie manipulado
Retro-CM3: um poderoso console de jogo RetroPie manipulado
Retro-CM3: um poderoso console de jogo RetroPie manipulado
Retro-CM3: um poderoso console de jogo RetroPie manipulado

Este instrutível é inspirado no PiGRRL Zero do adafruit, na compilação Gameboy Zero original do Wermy e no console de jogo Handled do GreatScottLab. Os consoles de jogos baseados em RetroPie usam raspberry pi zero (W) como núcleo. MAS, depois de construir vários consoles Pi Zero, dois problemas principais foram encontrados.

1) O Raspberry Pi Zero (W) tem apenas um único núcleo Cortex-A7 e 512 MB de RAM, o que é OK para o tipo de coisa NES / SNES / GB. No entanto, quando tentei executar o PS / N64 Emus, a experiência foi bastante inaceitável. Mesmo alguns dos jogos GBA não podem ser executados sem problemas (alguns atrasos de áudio, também em alguns jogos NEOGEO como Metal Slug ao lidar com cenas complicadas); 2) A maioria das compilações de console de jogo usa SPI ou saída de TV como interface de exibição. A exibição do SPI precisará da CPU para ajudar com o driver do buffer de quadros, o que tornará a experiência do jogo pior e o fps também é limitado pela velocidade do clock do SPI. E a qualidade de exibição da saída de TV não é boa o suficiente.

Neste instrutível, usaremos o Módulo 3 de computação RaspberryPi e um LCD de interface DPI para construir um console de jogo RetroPie definitivo. Ele deve ser capaz de executar todos os emuladores sem problemas e fornecer uma alta resolução e alta taxa de quadros.

O tamanho final do console de jogo é 152x64x18mm com bateria de até 2000mAh. A construção total custa cerca de US $ 65, incluindo um PCB personalizado, todos os componentes, um cartão TF de 16GB e um módulo de computação 3 Lite do RaspberryPi. Como já tenho uma impressora 3D, a mala custa apenas 64g de filamento PLA.

Vamos começar.

Nota: Como o inglês não é minha primeira língua, se você encontrar algum erro ou algo não estiver claro, por favor, me avise.

Este é meu primeiro post no instructable.com e eu realmente preciso de todo tipo de sugestões de vocês.

Etapa 1: Ingredientes

Ingredientes
Ingredientes
Ingredientes
Ingredientes
Ingredientes
Ingredientes
Ingredientes
Ingredientes

Aqui estão os ingredientes de que você precisa para construir o console de jogo. Algumas das peças podem não estar disponíveis em sua região, tente algumas peças alternativas.

1) O Módulo 3 Lite do Compute RaspberryPi. Compre na loja onde comprou o RaspberryPi 3B ou experimente no ebay.

2) LCD de 3,2 polegadas com interface RGB / DPI. CERTIFIQUE-SE de que tem um módulo LCD de interface RGB / DPI porque é OBRIGATÓRIO construir este console. Eu comprei meu LCD em uma loja virtual local e o mesmo módulo pode ser encontrado no Alibaba. Se você comprar um módulo LCD alternativo, PERGUNTE ao provedor para enviar o parâmetro detalhado e o código de inicialização. Também é uma escolha inteligente comprar os conectores correspondentes na mesma loja, pois existem tantos tipos diferentes de conectores.

3) ALPS SKPDACD010. Interruptor de tato com curso de 1,75 mm. Pesquise em sua loja de componentes eletrônicos local.

4) Algumas outras chaves. Use quaisquer outras teclas táteis que você puder obter para os botões START / SELECT / VOL + / VOL-.

5) Alto-falante. Qualquer alto-falante de 8 ohms, 0,5-1,5 W.

6) Bateria. Eu escolhi bateria de íon-lítio de 34 * 52 * 5,0 mm 1S 1000mAh x2.

7) Alguns ICs. STM32F103C8T6, IP5306, TDA2822, NC7WZ16, SY8113, PT4103 e etc.

8) Alguns conectores. USB-Micro Fêmea, PJ-237 (conector de telefone), TF-Card Jack, DDR2 SODIMM e etc.

9) Alguns componentes passivos. Resistores, capacitores e indutores.

10) Um PCB personalizado. Os arquivos esquemático e PCB são fornecidos no final. Lembre-se de fazer alterações se usar peças alternativas.

11) Uma impressora 3D. Certifique-se de que ele pode imprimir peças até o tamanho 152 * 66 * 10 mm.

12) Suficiente PLA Filament.

Etapa 2: Módulo de computação 3

O Módulo de Computação 3
O Módulo de Computação 3
O Módulo de Computação 3
O Módulo de Computação 3

O Raspberry Pi Compute Module 3 é uma placa central muito poderosa para a prototipagem de alguns gadgets de interesse. A introdução detalhada pode ser encontrada aqui. E algumas informações úteis podem ser encontradas aqui.

O módulo usa um conector do tipo SODIMM DDR2, que é um pouco mais difícil de usar. Além disso, todos os pinos GPIO do núcleo BCM2837 BANK1 e BANK0 são colocados para fora.

Para começar a usar o módulo de computação, precisamos fornecer várias tensões diferentes: 1,8 V, 3,3 V, 2,5 V e 5,0 V. Entre eles, 1,8 V e 3,3 V são usados para alimentar alguns periféricos que precisam de cerca de 350 mA cada. A linha de alimentação de 2,5 V impulsiona o DAC de saída de TV e pode ser conectado a 3,3 V, pois não precisamos do recurso de saída de TV. O 5.0V deve ser conectado aos pinos VBAT e alimenta o Core. A entrada VBAT aceita tensões de 2,5 V a 5,0 V e certifique-se de que a fonte de alimentação pode produzir até 3,5 W. Os pinos VCCIO (GPIO_XX-XX_VREF) podem ser conectados a 3,3V, pois usamos um nível CMOS de 3,3V. O pino SDX_VREF também deve ser conectado a 3,3V.

Todos os pinos HDMI, DSI, CAM não são usados aqui, apenas deixe-os flutuando. Lembre-se de ligar o pino EMMC_DISABLE_N a 3,3 V, pois usaremos um cartão TF como disco rígido em vez do recurso de inicialização USB.

Em seguida, conecte os pinos SDX_XXX aos pinos correspondentes no slot do cartão TF e não são necessários resistores pull-up ou pull-down. Nesta etapa, estamos prontos para inicializar o Módulo de computação Raspberry Pi 3. Ligue a fonte de alimentação em uma ordem decrescente: 5 V, 3,3 V e, em seguida, 1,8 V, o sistema deve ser capaz de inicializar, mas como não há saída dispositivo, só não sabemos se funciona bem. Portanto, precisamos adicionar um display para verificá-lo na próxima etapa.

Mas antes de prosseguirmos, precisamos primeiro dizer ao Pi qual é a função de cada GPIO. Aqui, forneço alguns arquivos, coloco "dt-blob.bin", "bcm2710-rpi-cm3.dtb" e "config.txt" na pasta de inicialização de um cartão TF recém-atualizado. Em seguida, coloque o "dcdpi.dtbo" na pasta / boot / overlay. O dt-blob.bin define a função padrão de cada GPIO. Eu altero o GPIO14 / 15 para GPIO normal e movo a função UART0 para GPIO32 / 33, pois precisamos do GPIO14 / 15 para fazer a interface com o módulo LCD. Também digo ao Pi para usar GPIO40 / 41 como função pwm e torná-los a saída de áudio direita e esquerda. O dcdpi.dtbo é um arquivo de sobreposição de árvore de dispositivo e diz ao Pi que usaremos GPIO0-25 como função DPI. Finalmente, escrevemos "dtoverly = dcdpi" para alertar o Pi para carregar o arquivo de sobreposição que fornecemos.

Neste momento, o Raspberry Pi já entendeu perfeitamente qual função deve ser usada para cada GPIO e estamos prontos para seguir em frente.

Etapa 3: Interface do Módulo LCD

Interface do Módulo LCD
Interface do Módulo LCD
Interface do Módulo LCD
Interface do Módulo LCD
Interface do Módulo LCD
Interface do Módulo LCD

Como diferentes módulos de LCD de interface DPI / RGB podem ser usados neste console, aqui tomamos o módulo usado em minha própria construção como exemplo. E se você escolheu um diferente, verifique a definição dos pinos do seu módulo e apenas faça as conexões de acordo com os nomes dos pinos conforme mostrado no exemplo.

Existem duas interfaces no módulo LCD: um SPI e um DPI. O SPI é usado para definir as configurações iniciais do IC do driver do LCD e podemos conectá-los a qualquer GPIO não usado. Conecte apenas os pinos Reset, CS, MOSI (SDA / SDI) e SCLK (SCL), o pino MISO (SDO) não é usado. Para inicializar o driver LCD, aqui usamos a Biblioteca C BCM2835 para conduzir os GPIOs e gerar uma determinada sequência de inicialização fornecida pelo fornecedor do módulo. O arquivo de origem pode ser encontrado posteriormente neste instrutível.

Instale a Biblioteca C BCM2835 em outro Raspberry Pi 3 de acordo com as instruções aqui. Em seguida, use o comando "gcc -o lcd_init lcd_init.c -lbcm2835" para compilar o arquivo de origem. Em seguida, adicione uma nova linha no arquivo /etc/rc.local antes de "sair 0": "/ home / pi / lcd_init" (suponha que você colocou o aplicativo compilado na pasta / home / pi). Deve-se enfatizar que o arquivo fonte é usado apenas para determinado módulo que usei e para um módulo LCD diferente, basta pedir ao fornecedor uma sequência de inicialização e modificar o arquivo fonte de acordo. Este processo é bastante complicado porque neste ponto nada pode ser visto da tela, é por isso que sugiro fortemente que você faça isso em uma placa RPI-CMIO, pois ela conduz todos os GPIOs para que você possa depurar com uart ou wlan.

A parte a seguir é fácil, basta conectar os pinos esquerdos do módulo LCD de acordo com aqui. Depende do tipo de módulo LCD que você possui, escolha o modo RGB com sabedoria. Para mim, aqui escolhi o DPI_OUTPUT_FORMAT_18BIT_666_CFG2 (modo 6). Altere a linha "dpi_output_format = 0x078206" de acordo com sua escolha. E se o seu módulo LCD usar uma resolução diferente, ajuste "hdmi_timings = 480 0 41 60 20 800 0 5 10 10 0 0 0 0 60 0 32000000" consulte o arquivo aqui.

Se todas as configurações estiverem corretas, na próxima inicialização do seu Pi, você deverá ver o visor na tela após um preto de 30-40s (da alimentação ao sistema carrega seu script de inicialização SPI).

Etapa 4: teclado e áudio

O teclado e o áudio
O teclado e o áudio
O teclado e o áudio
O teclado e o áudio

Concluímos o Core e o Output nas duas últimas etapas. Agora vamos passar para a parte de entrada.

Um console de jogos precisa de teclas e botões. Aqui, precisamos de 10 interruptores ALPS SKPDACD010 como os botões para cima / para baixo / direita / esquerda, LR e A / B / X / Y. E as teclas normais de montagem em superfície 6x6 são usadas para outros botões, como iniciar / selecionar e aumentar / diminuir o volume.

Existem duas maneiras de fazer a interface dos botões com o Raspberry Pi. Uma maneira é conectar os botões diretamente aos GPIOs no Pi e outra maneira é conectar os botões a um MCU e fazer a interface com o Pi por meio do protocolo USB HID. Aqui eu escolhi o segundo, porque precisamos de um MCU para lidar com a sequência de ativação de qualquer maneira e é mais seguro manter o Pi longe do toque humano.

Portanto, conecte as chaves ao STM32F103C8T6 e depois conecte o MCU ao Pi com USB. Um exemplo do programa MCU pode ser encontrado no final desta etapa. Altere as definições de pino em hw_config.c e compile-o com a biblioteca USB do MCU encontrada aqui. Ou você pode simplesmente baixar o arquivo hexadecimal diretamente para o MCU, contanto que você compartilhe as mesmas definições de pinos no esquema no final deste instrutível.

Quanto às saídas de áudio, o esquema oficial do Raspberry Pi 3 B oferece uma boa maneira de filtrar a onda pwm e o mesmo circuito deve funcionar perfeitamente aqui. Uma coisa que deve ser salientada é que lembre-se de adicionar a linha "audio_pwm_mode = 2" no final do config.txt para diminuir o ruído da saída de áudio.

Para acionar o alto-falante, é necessário um driver de alto-falante. Aqui escolhi o TDA2822 e o circuito é o circuito oficial BTL. Observe que o conector de telefone PJ-327 possui um pino de desconexão automática na saída direita. Quando não há fone de ouvido conectado, o pino 3 é conectado ao canal direito. E assim que o fone de ouvido é conectado, esse pino é desconectado do canal direito. Este pino pode ser usado como o pino de entrada do alto-falante e o alto-falante ficará mudo quando o fone de ouvido for conectado.

Etapa 5: o poder

O poder
O poder
O poder
O poder
O poder
O poder

Vamos voltar à seção de energia e verificar o projeto de energia detalhado.

Existem 3 seções de alimentação: a fonte MCU, o carregador / impulsionador e o DC-DC Bucks.

A fonte MCU é dividida de todas as outras fontes de alimentação porque precisamos dela para realizar a sequência de pré-inicialização. Conforme o botão liga / desliga é pressionado, o PMOS conecta o pino EN do LDO à bateria para habilitar o LDO. O MCU é então ligado (o botão ainda está pressionado). Na inicialização do MCU, ele verificará se o botão liga / desliga foi pressionado por tempo suficiente. Após cerca de 2 segundos, se o MCU descobrir que o botão liga / desliga ainda está pressionado, ele puxará o pino "PWR_CTL" para manter o PMOS ligado. Neste momento, o MCU assume o controle da fonte de alimentação do MCU.

Quando o botão liga / desliga é pressionado por 2 segundos novamente, o MCU executará a sequência de desligamento. No final da seqüência de desligamento, o MCU irá liberar o pino "PWR_CTL" para permitir que o PMOS desligue e a alimentação do MCU é então desabilitada.

A parte do carregador / booster usa o IC IP5306. Este IC tem carga 2.4A e descarga 2.1A Soc altamente integrado para uso de banco de potência e é perfeitamente adequado para as nossas necessidades. O IC é capaz de carregar a bateria, fornecer uma saída de 5 V e mostrar o nível da bateria com 4 LEDs ao mesmo tempo.

A peça DC-DC Buck usa dois buck 3A SY8113 de alta eficiência. A tensão de saída pode ser programada por 2 resistores. Para garantir a sequência de alimentação, precisamos que o MCU habilite o Booster primeiro. O sinal KEY_IP simulará um pressionamento de tecla no pino KEY do IP5306 e habilita o booster interno de 5 V. Depois disso, o MCU ativará o buck de 3,3 V puxando o pino RASP_EN para cima. E após o fornecimento de 3,3 V, o pino EN do buck de 1,8 V é puxado para cima e ativa a saída de 1,8 V.

Quanto à bateria, duas baterias de íon-lítio de 1000mAh são suficientes para o console. O tamanho normal deste tipo de bateria é cerca de 50 * 34 * 5 mm.

Etapa 6: Configurando o sistema

Configurando o sistema
Configurando o sistema

Nesta etapa, colocaremos todas as configurações juntas.

Primeiro, você precisa baixar e atualizar a imagem RetroPie em um novo cartão TF. O tutorial e o download podem ser encontrados aqui. Baixe a versão Raspberrypi 2/3. Você verá 2 partições após o flash da imagem: uma partição "boot" do formato FAT16 e uma partição "Retropie" do formato EXT4.

Quando terminar, não o insira no Raspberry Pi instantaneamente porque precisamos adicionar uma partição FAT32 para as roms. Use ferramentas de partição como DiskGenius para ajustar a partição EXT4 para cerca de 5-6 GB e faça uma nova partição FAT32 com todo o espaço livre deixado no seu cartão TF. Consulte a imagem que enviei.

Certifique-se de que seu sistema seja capaz de identificar o leitor de cartão TF como um dispositivo USB-HDD e você verá 3 partições em seu explorer. Dois deles estão acessíveis e o Windows solicitará que você formate o esquerdo. NÃO formate !!

Primeiro abra a partição "boot" e siga a Etapa 2 para definir as configurações de pinos. Ou você pode simplesmente descompactar o boot.zip nesta etapa e copiar todos os arquivos e pastas para sua partição de boot. Lembre-se de copiar o script lcd_init compilado para a partição de inicialização também.

Aqui estamos prontos para realizar a primeira inicialização, mas como não há display, recomendo fortemente que você use uma placa RPI-CMIO com um dispositivo wlan usb. Em seguida, você pode configurar o arquivo wpa_supplicant e habilitar o ssh nesta etapa. No entanto, se você não pretende obter um, o GPIO32 / 33 pode ser usado como um terminal UART. Conecte os pinos TX (GPIO32) e RX (GPIO33) a uma placa usb-to-uart e acesse o terminal com a taxa de transmissão de 115200. De qualquer forma, você precisa obter um acesso de terminal para o seu Pi.

Na primeira inicialização, o sistema travará ao tentar expandir o sistema de arquivos. Ignore-o, pressione start (tecla enter do teclado USB HID) e reinicie. No terminal, copie o script lcd_init para a pasta inicial do usuário "pi" e siga a Etapa 3 para definir a inicialização automática. Após outra reinicialização, você deverá ver a tela acender e mostrar algo.

Neste momento, seu console de jogos está pronto para jogar. No entanto, para carregar roms e BIOS em seu cartão TF, você precisa acessar um terminal a cada vez. Para simplificar, sugiro que você configure a partição FAT32.

Primeiro faça backup da pasta RetroPie em / home / pi para RetroPie-bck: "cp -r RetroPie RetroPie-bck". Em seguida, adicione uma nova linha em / etc / fstab: "/ dev / mmcblk0p3 / home / pi / padrões RetroPie, uid = 1000, gid = 1000 0 2" para montar automaticamente a partição FAT32 na pasta RetroPie com a configuração do proprietário para usuário "pi". Após a reinicialização, você verá que o conteúdo da pasta RetroPie desapareceu (se não for, reinicie novamente) e alguns erros aparecerão na tela. Copie todos os arquivos no RetroPie-bck de volta para o RetroPie e reinicie novamente. Os erros devem desaparecer e você pode configurar o dispositivo de entrada seguindo as instruções na tela.

Se você deseja adicionar ROMs ou BIOSs, desconecte o cartão TF quando desligado e conecte-o ao seu computador. Abra a 3ª partição (LEMBRE-SE de IGNORAR a dica de formatação !!!) e copie os arquivos para as pastas correspondentes.

Etapa 7: A caixa e os botões impressos em 3D

A caixa e botões impressos em 3D
A caixa e botões impressos em 3D
A caixa e botões impressos em 3D
A caixa e botões impressos em 3D
A caixa e botões impressos em 3D
A caixa e botões impressos em 3D

Eu projetei o case estilo GameBoy Micro para o console de jogos.

Basta imprimir

4x ABXY. STL

2x LR. STL (necessário adicionar suporte)

1x CROSS. STL

1x TOP. STL

1x BOTTOM. STL

Eu os imprimo usando PLA com 20% de preenchimento, camada de 0,2 mm e é forte o suficiente.

Como a caixa é justa, verifique a precisão da impressora com algum cubo de teste antes de imprimir.

E três parafusos de φ3 mm de 5 mm de comprimento e quatro parafusos de φ3 mm de 10 mm de comprimento são necessários para montá-los juntos.

Etapa 8: todos juntos e resolução de problemas

Todos juntos e resolução de problemas
Todos juntos e resolução de problemas
Todos juntos e resolução de problemas
Todos juntos e resolução de problemas
Todos juntos e resolução de problemas
Todos juntos e resolução de problemas
Todos juntos e resolução de problemas
Todos juntos e resolução de problemas

Como o circuito é meio complicado, é uma boa escolha fazer algum trabalho no PCB. Todo o esquema e minha própria versão PCB são carregados no final desta etapa. Se você pretende usar minha versão PCB, por favor, não remova meu logotipo na camada Top_Solder. É melhor fazer sua própria personalização e entregar seu próprio arquivo PCB ao fabricante local para fazê-lo, porque é realmente difícil comprar todas as mesmas peças que eu uso na minha PCB.

Depois de soldar todos os componentes no PCB e testá-los, a primeira coisa a fazer é baixar o arquivo hexadecimal para o MCU. Depois disso, cole o módulo LCD no PCB. O módulo LCD deve estar 3 mm acima do PCB para caber na caixa. Use um pouco de fita dupla-face espessa para colar. Em seguida, conecte o FPC ao conector e insira o cartão CM3L e TF. NÃO solde a bateria agora, conecte uma fonte de alimentação USB e inicialize-a!

Verifique todos os botões e display. Meça a tensão entre o BAT + e o GND, verifique se a tensão está em torno de 4,2V. Se a tensão estiver OK, desconecte o cabo USB e solde a bateria. Experimente o botão liga / desliga.

Coloque o botão CROSS e ABXY na caixa TOP e coloque o PCB na caixa. Use 3 parafusos para fixar o PCB na caixa. Adicione um pouco de fita dupla-lateral espessa na parte de trás de todos os botões SKPDACD010 e cole a bateria nela. USE fita grossa para evitar que os pinos do SKPDACD010 danifiquem a bateria. Em seguida, cole o alto-falante na caixa INFERIOR. Antes de fechá-lo, você pode precisar experimentar todos os botões, verificar se eles funcionam e saltam corretamente. Em seguida, feche a caixa com 4 parafusos.

Aproveitar.

Algumas dicas para solução de problemas:

1) Verifique três vezes a conexão do pino do módulo LCD no esquema e na placa de circuito impresso.

2) Passe os fios de sinal do LCD com restrição de comprimento.

3) Quando você não tiver certeza sobre as seções de alimentação, solde e teste cada seção, siga a seqüência de alimentação. 5 V primeiro e depois 3,3 V e 1,8 V. Depois que todas as seções de alimentação forem testadas, solde os outros componentes.

4) Se a tela ficar borrada com frequência, tente inverter a polaridade do sinal PCLK configurando o dpi_output_format.

5) Se o display estiver muito descentralizado, tente inverter a polaridade do sinal HSYNC ou VSYNC.

6) Se a tela estiver ligeiramente descentralizada, tente ajustar as configurações de overscan.

7) Se a tela estiver preta, tente esperar que o sistema inicialize com o script rc.local. Se você precisar exibir desde o início, tente conectar a interface SPI ao MCU e use o MCU para inicializar o módulo LCD.

8) Se o display ficar preto o tempo todo, verifique a sequência de inicialização novamente.

9) Sinta-se à vontade para tirar dúvidas aqui ou por e-mail: [email protected]

Recomendado: