自制maimaiDX灯板的尝试
在完成了之前的各种逆向后,我开始考虑能否自行制作核心硬件与官方完全一致的电路板,算是一次心血来潮的尝试。从画图到打板到出成品,加起来只花掉了四天,没想到居然可以一次成功。当然,说是完全成功肯定是不可能的,这块板子还有一些小毛病,在完全修复之后,我会将全部的设计文件公开。
(原谅我的焊接水平XD)
这块板子约等于两块837-15070和837-15067的合体,仅需要一块板子就可以控制maimai机台两个P位的全部灯光(顶部的RGB billboard除外,这部分由IO4控制)。由于一块15070只能提供32个LED通道,而maimai的按键灯共需要3 * 8 * 2 = 48个通道,因此每台机台都使用了两块15070,每个P位各一块。由于maimai和maimaiDX使用的灯板均属于15070的衍生型号,替换固件即可完美兼容,因此这块板子同样适用于maimai。
另外,我特意在这块板子上使用了官方的USB转串口芯片,即编号为837-15067的转接板。如果你不知道15067是什么的话,这是一块USB转4串口的转接板,使用了FTDI的FT4232HL芯片,并写入了SEGA自定义的配置,这使得这块板子需要使用定制化的驱动。在maimai机台里,这块转接板用于给两块灯板提供串口通信。诚然,我可以使用其他更廉价的USB转串口芯片,但为了能够让这块板子可以直连基板,我还是干脆一不做二不休,把15067的完整配置也搬了上去,而且意外的没有增加太多成本。因此,这篇流水账除了介绍一下自己制作的这块板子,也会顺便介绍一下837-15067。
15070
供电
这块板子除了需要使用Type-C连接PC外,还需要接入供LED使用的12V电源。之所以选择使用12V,一方面是因为机台的LED统一使用12V,另一方面也是因为如果插满全部LED灯带,包括按键灯和框体的白色氛围灯,功耗会轻易提升到几十瓦,如果使用5V的LED灯带,各个接口和电路板需要成熟的电流将会翻一倍还多,因此在设计时还是采用了LED供电与IC供电分离的方式。
12V供电上,我采用了两种接口,一个是5.5*2.5mm的圆形DC口,一个是6P的XH2.54接口,其中12V和GND各占用3P,这是考虑到一根线可能无法在安全的温升内承受足够大的电流。这个6P接口是为我正在设计的IO4预留的,二者可以通过这种方式共享一个12V电源;如果不打算使用IO4,DC口也可以保证这块板子可以独立使用。
LED控制
如上文所述,这块板子使用了两套15070的硬件,因此这里暂时只介绍其中的一套。
LED的控制有两个部分,具体可以参考我之前的笔记。
两颗TLC5940提供了总计32通道的RGB LED控制,在maimaiDX里,每个P位使用了24通道。由于我并没有像官方那样使用4层板进行设计,因此走线空间非常局促,于是决定通过延长线的方式将各个按键灯的接口从这块板子上分离,并且干脆没有引出未使用的LED通道。
不过,虽然TLC5940可以提供相当多的通道,但能够驱动的电流只有毫安级,对于机台氛围灯这种动辄几米的灯带就显得力不从心。因此,15070还提供了四个由独立的mosfet控制的通道,支持PWM调光。对于这四个通道,我使用了四个标称电流10.5A的UMW AO4468,足以应对所需的电流。这些接口统一使用4P XH2.54接口连接,其中2P为12V,2P为GND,理由与供电接口一样,为了保证单条导线承载的电流不会太高。
(在设计这两块板子的时候,我采用了很多UMW的电源IC和MOS,价格适中,性能也不错,好感UP)
杂项
为了方便给MCU刷写固件,我还增加了标准的6P ICSP编程接口,这下终于直接用杜邦线刷机了XD
837-15067:USB-四通道串口转接板
正如它的名字一样,这块板子的意义在于通过USB转接出四个串口,并且似乎可以通过驱动由AMDaemon自动分配串口号,但我对此的了解不多。
众所周知,FTDI的串口芯片一直都是性能最优、稳定性最好的一档,因此SEGA选择他们家的芯片也无可厚非。不过,837-15067上使用的FT4232HL要比一般的串口芯片更特殊一点,它允许外接一颗使用MICROWIRE总线的EEPROM芯片,用于存储一些厂商的自定义配置,包括厂商ID和产品ID、供电方式和供电电流、序列号、USB描述等等。我选用了一颗datasheet里列举的M93C46WP,一颗来自意法半导体的EEPROM。
提取官方的配置文件
如果不需要连接基板,这块板子完全可以不写入任何内容,安装官方的驱动后直接使用,但本着来都来了的精神,我还是提取了15067中的配置文件。
读写FT4232HL的配置文件极其简单,使用FTDI官方的FT_PROG即可。读取后的配置文件使用XML保存,在写入别的芯片时时将这个文件作为模板导入即可。写入之后,由于Vendor ID改变,官方的驱动将不再支持这块板子,需要使用SEGA定制的驱动。
在官方配置文件的基础上,我还手动修改了USB的供电模式:在15067中,USB是不参与5V供电的,供电由单独的电源提供,因此官方的配置文件里将USB供电设置为了自主供电,而我的板子在设计之初便依赖于USB提供5V供电,因此我手动将供电模式改成了总线供电,并把最大电流拉高到了500mA,以满足全部芯片的消耗(这几颗芯片的待机功耗就可以消耗掉0.1A的电流,已经蛮恐怖的了)。
另外,如果你愿意,你还可以开启序列号自动生成,从此你的“15067”也多了一个唯一的,可以被ALLS读取的序列号。
线路设计
其实线路设计本身并不难,唯一比较麻烦的地方在于FT4232HL只支持3.3V供电,为此还需要使用一个独立的LDO进行供电。虽然我在IO4里使用了LM1117,不过考虑到价格,最后还是在这里用了ASM1117。好在4232HL的功耗并不高,虽然我用的ASM1117并不难判断是否为真品,但对于这里的用途来说也足够了。
由于maimaiDX只用掉了4232HL的两个通道,我还考虑过要不要把没有使用的两个通道也引出来,不过碍于板子的尺寸限制只好作罢。
物料成本
在设计之初,我以为占据成本的大头会是4232HL,可没想到这块芯片8.5元钱就可以买到原装的条带包装版本,反而是TLC5940和MEGA32M1,前者可以卖到7元一颗,后者更是连正常的购买途径都没有,最后还是在闲鱼上按15元一颗的样品价才买到手(卖家甚至是用胶带把MCU粘到纸板上再发货的)。与之相比,AO4468居然只需要0.3元一颗,简直是白菜价。最终,一块这样的灯板仅主要芯片的成本大约为70元,再加上其它的物料,如果不考虑使用SMT,单板的成本大概在90元左右。当然,这个价格还没有考虑按键灯的转接板和线材等各种材料,不过就结果而言我认为是相当可以接受的,尤其是考虑到如果只焊接一个P位的话,物料成本可以控制在60元左右,还是相当有诱惑力的。
不过。如果需要考虑小批量生产的话问题就很大了,这块板子的大部分IC都需要额外采购(立创商城上,一颗TLC5940 25元,一颗FT4232HL 56元),甚至有的芯片已经无法保留原本的包装,即使嘉立创之类的工厂支持邮寄元件,这些没有包装的IC依旧需要手工拖焊,时间成本是相当高的。