- 概述
本文使用树莓派RP2040,设计了一个游戏机开发板,计划实现经典游戏机功能。
系统主要由电源、单片机最小系统、开关量输入、LED显示、PWM输出、SPI屏幕接口、MP3播放器接口等部分组成。
目前已经完成打板,并初步调试完成了按键输入及LED显示功能。其它功能需要后续逐步完善。
- 搜集素材
搜集素材主要参考了以下资料
树莓派官网 ,PICO开发板的设计文档
【核心板】RP2040最小系统
https://oshwhub.com/course-examples/he-xin-ban-rp2040-zui-xiao-xi-tong
该资料比较全面,对硬件设计及软件调试有很大帮助。
电子森林网站 基于树莓派PICO的一些项目创意
https://www.eetree.cn/doc/detail/2293
下面是microPython开发的几个例程
https://blog.csdn.net/qq_50955050/article/details/121085780
https://bytesnbits.co.uk/raspberry-pi-pico-spi-lcd-display/
https://www.instructables.com/Mandelbrot-Set-on-Pi-Pico-ILI9341/
- 硬件设计
硬件设计方案如下图所示
电路原理图主要参考了树莓派PICO,另外增加了一些外围电路和接口。
电源电路
按键输入
手柄输入
LED及PWM输出
SPI屏幕
MP3播放模块接口
单片机最小系统
PCB效果图
下面是焊接效果
- 软件设计
软件设计,目前使用microPython进行开发。首先需要下载并刷入固件。
按住bootsel按钮,将板子通过USB连接电脑,就能发现电脑多出了一个USB设备,此时已经进入bootloader模式,松开按钮,将下载的uf2文件拖入U盘即可。
然后板子会自动重启,如果发现设备管理器增加了一个串口,说明固件更新成功。
然后使用Thonny软件即可进行开发。下面是测试例程。控制两个指示灯交替闪烁
from machine import Pin
import time #导入时间包
led1=Pin(21,Pin.OUT) #定义引脚编号21(LED灯1),引脚模式为输出#
led2=Pin(22,Pin.OUT) #定义引脚编号21(LED灯2),引脚模式为输出#
while True:
led1.value(1)
led2.value(0)
time.sleep(1)
led1.value(0)
led2.value(1)
time.sleep(1)
下面是按键控制指示灯的程序
from machine import Pin
import time #导入时间包
key1=Pin(11, Pin.IN, Pin.PULL_UP)
key2=Pin(12, Pin.IN, Pin.PULL_UP)
key3=Pin(13, Pin.IN, Pin.PULL_UP)
key4=Pin(14, Pin.IN, Pin.PULL_UP)
key5=Pin(15, Pin.IN, Pin.PULL_UP)
key6=Pin(16, Pin.IN, Pin.PULL_UP)
key7=Pin(17, Pin.IN, Pin.PULL_UP)
key8=Pin(18, Pin.IN, Pin.PULL_UP)
led1=Pin(21,Pin.OUT)
led2=Pin(22,Pin.OUT)
while True:
if (key1.value() & key2.value() & key3.value() & key4.value() )== 0:
led1.value(1)
else:
led1.value(0)
if key5.value() == 0 or key6.value() == 0 or key7.value() == 0 or key8.value() == 0:
led2.value(1)
else:
led2.value(0)
效果演示
使用指示灯测试程序时,绿色和红色指示灯会交替闪烁。
使用按键测试程序时,按下左侧4个按键,绿色灯亮,按下按下右侧4个按键,红色灯亮。
- 心得体会
RP2040芯片的优势是GPIO资源比较丰富,价格比较便宜。
遇到的主要问题是树莓派RP2040封装为7×7 mm QFN-56 封装,引脚间距只有约0.2mm,而且引脚藏在芯片底部,手工焊接难度较大。勉强焊接好了一块板子,但仍有个别引脚虚焊。
开始准备不足,只是完成了电源部分及芯片最小系统的焊接,开发板USB连接电脑后,可以发现U盘。但更新UF2固件后,无法显示虚拟串口。后来焊接外部Flash芯片后问题解决。
在软件调试方面,USB刷入固件只找到了microPython的uf2文件,此前没有microPython开发经验,使用Thonny软件还不熟悉如何导入第三方库,所以只使用自带基础库实现了按键和指示灯测试。
对Arduino开发这方面,没找到对应的uf2固件,所以没有进一步测试。总之,对软件开发环境的搭建方面还需要进一步学习。
- 彩蛋
由于RP2040手工焊接难度较大,本人又做了一个基于PICO的扩展板,功能和此次做的板子类似,已完成了初步调试。实物图如下,视频末尾有分享。