本帖最后由 wytalfred 于 2014-6-13 12:57 编辑
经过连续半个多月每天10多个小时的努力,终于画完了IO cape(以后不再叫BBB Development Kit了,因为不是kit,而是一块板子了)的电路图,算是阶段性成果吧。不过本文不是来讲电路图的,而是打算详细介绍一下IO cape的设计想法和功能。
我开发IO cape的初衷是因为BBB自带的外设太少了,作为一款geek的玩具,我认为它应当有一些基本的外设和安排更加合理的接口,当哪天我们灵机一动想实现一个新功能的时候,只需要做很小的硬件改动就能实现,而不至于必须得自己画一块很复杂的PCB板,或者在面包板上插得到处都是线。
另一个考虑是我觉得市面上的开发板都太“开发板”了,特别是那些功能很全的开发板,往往是一个四四方方的大板子,很难直接用它们做出像产品一样外形漂亮体积小巧的可以玩的东西。因为一件产品中包含的不仅仅是电路设计、软件设计,它的外形,手感也很重要。我希望这款IO cape可以既是一块开发板,同时又可以直接拿来做“属于自己的产品”,能比用别的开发板做出来的东西更好看好用一些。
OK,大方向定下来以后,接下来要确定IO cape上要添加些什么外设。因为IO cape主要面向的是个人玩家,所以上面的外设主要是偏娱乐和个人使用方面的。之所以起名为“IO cape”,是因为这块板子大体上是把各种接口按照“输入”和“输出”分类,分别放到板子两边的。以下是板子上外设的列表:
Input:
- 2个按键
- IMU传感器(3轴加速度计和陀螺仪)
- 音频:耳机输入和mic输入(做语音控制什么的无需外接麦克风了)
- 3个USB HUB输入(再也不用拖一根长长线的外接USB HUB了)
- USB转debug串口(买BBB自带的USB连接线可以直接拿来做串口连接了,而且串口连接时直接从电脑取电,无需再外接5V电源)
- ADC输入接口(除了自带的可怜的1.8V输入ADC,还增加了4通道16位最大输入5V的ADC输入端,可以单独4通道或2个差分输入)
Output:
- RGB LED(用PWM控制,一个LED显示成千上万种颜色,浓缩的都是精华)
- 音频:耳机输出和喇叭功放(喇叭是一左一右立体声的哦)
- 震动马达
- 电机驱动(可驱动两个直流电机或1个步进电机)
- 舵机接口或当做单纯的PWM输出接口(可同时接3个舵机)
I/O:
- 各种总线接口有序排放(UART、I2C、SPI、CAN等,引脚按2.54间距矩阵形式排放,既可以用杜邦线也可以直接焊洞洞板)
- 对称的扩展口(2.0间距排座对称放置,具体下面再说)
其他:
- EEPROM
- RTC(每次makefile都会遇到clock skew,以后再也不会了)
- 锂电池供电(跟我前面的日志不一样哦,电池不是直接插到BBB的接口上,而是经过板上的升压芯片变成5V供电)
- LCD cape完全适配(是我做的那个LCD cape哦,无论引脚功能还是外形上都完美适配)
呼~终于介绍差不多了,下面挑几个重点的详细说一下。
首先是外形。必须不是四四方方的。而是……长条形的!具体来说,是与BBB等宽,以及刚好两倍的长度。正面:
背面:
前面说到与LCD cape“完美适配”是什么意思呢?就是插上LCD cape以后是这个样子的(LCD刚好在正中间,而且左右两侧可以用作手柄。可以直接拿来开发游戏机了!相信握持手感还是不错的):
然后是2.0mm扩展口,如正面图中左右的蓝色和紫色框框所示。左侧的两排是一组,右侧的是另一组。这里的巧妙之处在于,左右两组扩展口“大部分”是相同的,而且是左右对称的!即左边的蓝色和右边的蓝色是完全一样的,左边的紫色和右边的紫色除了4个引脚之外,其余也都是一样的。
为什么这样设计呢?我认为扩展口其实是玩家对其进行再次开发的核心,所以必须足够人性化。假设某种情况下你需要接两个相同的外设,那么你只需要做同样的两个就可以一左一右都插上了(只要没用到那4个不同的引脚)。亦或者需要接两个很相似的外设,那么在画板子的时候也可以只画一款板子,只需要增加一些类似跳线帽之类的切换功能就可以了。
另外,我们知道在外面做板子的话是按尺寸收费的,5cm*5cm是一个坎,BBB的宽度刚好大于5cm,所以做cape的话至少得按10*10cm收费。所以我把左右两组接口的间距缩小到了5cm以内,只要电路能塞下,你只需要做一块小于5*5cm的板子就可以了。
那么这4个左右不同的引脚是什么呢?根据我的设定,板子左侧大部分是Input接口,右侧大部分是Output接口。所以左侧的4个引脚是2个BBB的ADC和2个外接芯片的ADC输入;右侧的4个引脚是4个PWM输出。
除了这4个引脚之外,其他的引脚包含的功能有(因为功能复用的关系,不一定能同时实现):
- GND / VDD_3.3 / VDD_5V / SYS_5V
- UART1 / 2
- I2C1 / 2
- SPI0 / 1
- 普通IO口
这两组扩展口是专门为做板子而设计的,所以采用了更紧凑的2.0mm间距的排座。如果想用杜邦线连接外设的话就要用到右侧的接口阵列了:
可以看到接口从上到下分成了3块,分别是总线接口、电机输出和PWM输出(舵机接口)。其中中间的电机输出和右边的端子是直接相连的,主要是为了提供多种电机连接方。另外这三块接口各个引脚的间距都是2.54mm的整数倍,所以也可以做一块板子同时插到这3块接口上。
重点是上面的5x5总线阵列。因为BBB的引脚功能是可以复用的,而各种总线刚好都分布在那几个引脚上,因此通过各种复用,这个总线阵列可以实现(但不一定能同时实现)下列几个接口:
- UART1 / 2 / 4
- I2C1 / 2
- SPI0
- CAN0 / 1
OK,基本功能和接口就是这样。下面展示一下PCB板的样子,毕竟花了太多时间把这么多元件和线塞到这双层板上面。
正面:
背面:
之所以现在交作业,是因为现在在采购元件。因为好多元件是我第一次用,尺寸什么的也许会考虑不周到,所以元件未到我不敢去刷板子……而且焊板子、测试各部分功能也是个大工程。等全部完工时恐怕BBB开发比赛已经结束了……所以在此特提前交一次作业。。。