一、前言
上回FastBond2阶段2的文档中,展示了使用Scheme-it绘制的原理图,游戏摇杆的方法以及原理,也说明了项目中所使用到的活动规定厂家的芯片。
想了解阶段1的具体内容可以通过链接跳转:
https://www.eetree.cn/project/detail/1902
本文之后的内容将展示使用kicad继续修缮的原理图及PCB,成品的功能测试和主要程序的说明。
二、流程图及原理介绍
流程图及原理图初步设计都是在Scheme-it网页上绘制的,还挺方便的。使用了FastBond活动中要求的厂商的芯片Microchip
链接附在这里:
https://www.digikey.cn/schemeit/project/detail/a48f5b79eea04fec8ab1ad79a74db9d4
如图所示,由RP2040作为主控芯片,通过SPI协议来驱动MCP3204芯片,并且给整个扩展版进行供电,MCP3204芯片在对2765这个双轴电位器进行ADC读取后,把所获取的电压模拟值经过SPI协议回传给RP2040主控芯片,RP2040主控芯片对数据进行处理,来达到对电脑控制的目的。
三、原理图及芯片介绍
使用Scheme-it设计的原理图导出到KiCad后,有一些地方并不匹配,比如网络标签并不识别,用户自定义的符号引脚未分配等等,因此需要继续更改加以完善。经过完善的原理图如下,与阶段1中并没有什么改动,整个扩展板原理图设计如下所示,使用了FastBond活动中要求的Microchip厂家的MCP3204芯片,
绘制PCB如下
四、成品功能测试
首先是板卡焊接之后装配完成的样子,与12指神探紧密贴合:
焊好的板子上电就能亮,主要本身这个板子也不是很复杂,只有一个芯片,几个元器件。而且元件间的间距也比较远,不是很难焊。本身使用rp2040供电,所以电路电压经测量也是很稳定的在3.3V。
五、程序功能说明
程序控制主要是针对rp2040的,在Thonny编译器下使用micropython语言进行编程,首先需要对SPI接口和ADC接口进行初始化,因为是使用SPI协议在rp2040和MCP3204这个款ADC采集芯片进行数据通信与传输,12指神探共引出12个引脚,其中两个是3.3 5V供电,一个是GND,还有9个引脚做IO,其中有4个脚是SPI1的端口,分别是SCK-26,MOSI-27,MISO-28,CS-25。对应端口初始化。
import machine
import time
from machine import Pin
spi = machine.SPI(1, 10_000_000, sck=Pin(26), mosi=Pin(27), miso=Pin(28))
cs = machine.Pin(25, machine.Pin.OUT) # 定义片选引脚
def read_adc(channel):
# 从MCP3204读取ADC值
cs.value(0) # 启用片选引脚
cmd = bytes([0b00000110 | ((channel & 0b111) >> 2), ((channel & 0b111) << 6), 0x00]) # 发送读取命令
result = bytearray(3)
spi.write_readinto(cmd, result) # 发送命令并读取响应
cs.value(1) # 禁用片选引脚
return ((result[1] & 0b1111) << 8) | result[2] # 将读取的结果转换为ADC值
while True:
adc_value0 = read_adc(0) # 读取通道0的ADC值
print("ADC Value0: ", adc_value0)
adc_value1 = read_adc(1) # 读取通道1的ADC值
print("ADC Value1: ", adc_value1)
time.sleep(0.1)
编写MCP3204读取ADC函数,MCP3204读取自己引脚通道的过程是这样的:
Rp2040将CS片选位拉低,选中MCP3204芯片,紧接着发送读取命令,将读取出来的模拟值在MCP3204内部转换为数字值,然后将数字值存在Buffer中,等待rp2040读取Buffer。
主函数:
读取两个通道的ADC值,分别是电位器的X轴和Y轴。将读取出来的ADC值打印在屏幕上。
以上就是主要程序的说明,实现电位器的ADC读取。下面是效果图:
六、结语
很感谢硬禾学堂举办的FastBond2活动,让我有机会通过这个活动使用一些未曾尝试过的芯片来做一些不大但很有意义的制作。