为BPI-BIT设计一块扩展板【示例向】


#1

为BPI-BIT设计一块扩展板

工具

本文用到的主要layout工具KiCAD,这是一款开源的EDA软件,大家如果不了解这个软件也没有关系,可以跟着野驴我一起学习这个软件

野驴KiCAD系列

前言

  • 首先了解下什么是BPI-BIT:
    BPI-BIT是一块采用ESP-WROOM-32模组作为核心进行设计,支持Wi-Fi、BLE等多种通信方式的STEAM教育的学习板。它可以做到的事情将远远超乎你的想象。详细内容可以浏览产品Github:BPI-BIT Github,可以关注下组织号:BPI-STEAM,这里面会持续更新关于BPI-BIT的更多玩法与各种开发方式。
  • 为什么要开发扩展板:
    作为电子相关爱好者,一块核心板(BPI-BIT)可以展示它的部分功能,但是并没有乐趣,电子的乐趣就在于折腾外设,我们可以靠着我们的想象力给它赋予更多好玩的玩法。这就是我开发这块扩展板的核心动力,当然也是作为一个样例项目和大家一同学习,为其他想折腾外设的开发者们指一条路(当然,这并非是一个规范,仅仅是一个例子,我进行尝试的例子,也是我的一个学习的过程)。

设计

有了设计一块板子的动力,那么接下来就进入到设计步骤。那么设定一个目标就眼前最重要的事情,没有目标的无头苍蝇只是白费精力。

设计功能

这块板子我的期望是它是一辆小车(核心功能),但是也要能扩展其他外设(延伸功能)。因为这个板子我给它的目标就是一台小车,那么接下来,我会更多偏向于小车的方向,对于延伸功能,我会选择预留其他外设接口。

物料选定

这一步主要就是为了不让我们的设计变成纸上谈兵,我们需要了解很多东西,先是实现功能需要用到的芯片等元器件。还有就是组成一辆小车的核心,电机和轮胎。然后就是,我们小车的组成方式,是在成品车架上面构建,还是采用pcb板作为结构的核心支撑呢?这是一个难以抉择的问题。采用成品车架,它的结构方面可能更加成熟,但是那样的话,我们完全可以采用分离式电路模块来搭建,这没有乐趣,放弃。那么接下来就是选择使用扩展的PCB作为小车的结构核心。但是这样就有另外一个问题了,经费问题,我们可以做的很大,但是PCB打样来说要贵很多,最基本的打样尺寸是100mm*100mm以内,那我们的电机就不能再使用TT马达了,它太大了。那电机怎么选呢?来看一下我们的需求:直流电机、尺寸够小、驱动电流要小还有最好是减速电机(能提供更大的扭矩),那无刷电机和空心杯电机就排除在外了。这期间我逛了某宝,发现要给好玩的电机,那就是N20电机。几乎量身定做,于是我就买了几个回来看看。回来发现了一个略微有点尴尬的小问题,减速比太大,扭矩是不成问题了,但是速度下来了,可是又没有其他更好的选择,就选它吧。那么小车的定性可能要稍微做出修改了,不再追求速度,而是地形通过能力,这样一想也还可以接受,hah(苦笑)。电机如下图所示:
N20

电机尺寸图:
N20

同时,它的驱动只需要一个H桥电路即可,当然这可选择的范围也很大,可以自己用三极管搭建,也可以选择多种多样的芯片来简化设计,例如大家可能很了解的TB6612芯片,但是我并不喜欢这个芯片,首先电机消耗很低,TB6612可以承载更大的电机,我们可以选择其他的。最终,我东找西找发现了另一个H桥驱动芯片,那就是: AM1016A,它非常的小巧,同时外部电路也足够简单。然后就是小车需要几个轮子,不考虑平衡车的话,加上上面提到了,我们想要做一个高通过性的小车,四驱似乎是必选的选项,那就选定这个小车用四个轮子作为动力。到这里,野驴小车1号的轮子和电动机都找好了,我们继续进行下一步,BPI-BIT的IO口资源是非常宝贵的,我不想因为四个电机而占用掉8个IO,那么就需要考虑IO扩展芯片,而使用目的是为了控制电机,我们就可以非常容易的找到它们。又经过一阵东看西看,我选择了一块I2C扩展16路PWM芯片: PCA9685,I2C可以通过不同的地址来进行复用,那么我们四个电机控制可以看作没有占用一个IO,Very Nice哦,兄dei。
作为一个独立满世界跑的小车,一个可靠的电源供应是非常重要的,那么我觉得除了3.7v的锂聚合物电池别无二选,这种电池日常使用也非常常见,同时各种配合电路都很成熟,那就选它了,bingo!
选择锂电池之后,有两点需要考虑了,一是充电电路,当然这部分也可以独立出来,使用单独的充电器,但是不完美,我们就选择板载的方案吧,最为大家熟知的电路方案就是TP4056,那就它了。二是稳压电路,大家如果对锂电池有了解应该都知道,锂电池电压会随着电量而变化的。一般锂电池的范围就是3.5V-4.2V,但是常用的电子相关外设电压多为3.3V和5V,这就需要先将电池升压至5V,再降回3.3V。也因为现在相关电路的转化效率都再可接受范围内,这样先升再降的方式是可行的。接下来的重点就是选择一块升压IC,降压IC的应用很广,直接AMS1117-3.3搞起就可以了。升压IC的选择需要多做一些功课,主要还是功率问题,最终选择了这一块IC: MT3608
到这里,关于物料选择的部分就基本全部完成了,可以进入到下一个阶段了。

电路设计

这一部分的主要工作就是绘制电路图,我采用的是一个开源EDA软件:KiCAD,当然如果你选择AD或者其他软件也可以,但是我现在无力负担版权费,就以开源软件为主,并且功能也足够满足我的需求,同时它也在开源社区的所有人的努力变得更好。
电路设计的核心就是根据各个芯片的指导电路设计来构建整个小车的电路图。小车电路图,这是我绘制一份电路图,大家可以参考一下,如果有设计缺陷也请提出来,共同学习。
我的设计核心思想,主体是小车相关电路,其他扩展部分,因为暂未选定其他任何功能,所以就用插针引出即可。

电路layout

这部分的工作也不可小觑,因为我功力浅显,需要特别注意。早有耳闻升压电路对layout的要求较高,但是我没有实操经验,在我第一版打样回来之后就发生了一个尴尬的事情,我的升压电路带负载立马会降压,这这这…
然后我马上去网上查找相关资料,同时想各路群里大佬请教,最终整理了如下经验:

  • 电感附近应该设置禁布区,不然覆铜会变为一个大天线
  • 开关信号线要特别注意避免引入干扰,这决定了输出电压的稳定性,同时它也是非常严重的干扰源,远离其他信号
  • 电感选用屏蔽电感
  • 电容与电感根据手册选择并尽可能的靠近芯片

踩过的坑是非常好的学习过程,因为这会记得更牢固,同时也是给他做一个反面例子。MT3608的layout的坑,可以看我的一篇博文,里面有我实际的布局
[post cid=“447” cover=“http://pic.yelvlab.cn/mt3608-3.png”/]

关于layout其他部分坑应该小很多,应为毕竟都有过实操经验。然后给大家看下我的打样,第一版是红色的(jlc打样便宜,杂色不收费),就是升压有严重问题的一版,白色的是第二版,这一版经过测试可以达到功能,但是最后觉得布局不满意(这是后话,主要是功能验证OK了)。

在上面的图中也可以看出,我的电机固定孔放大了,通孔直径设成了半径…我自己尴尬一会。

电路驱动

其实这一步也可叫做功能性验证阶段,通过驱动电路的方式来交叉验证设计。这里的驱动主要就是I2C扩展芯片的驱动,我们要通过I2C发送PWM信号控制小车,这里我选择了Adafruit家的驱动库,因为这个库用下来感觉最顺手。这个库是ESP32-Arduino语法的,开发工具,我选择了VS Code+PlatformIO,不选择Arduino IDE是因为功能太少无法满足日常开发需求,当然要使用也是可以的。因为库的使用很简单,这里不多做赘述,后面有机会我会详细写一篇博客摸透这个库(给自挖个坑),然后顺便做一波广告,大家可以关注下我的博客:YelvLab Blog,我会在这里大家一同探索世界。

电路各项参数

测试项目 测试结果
USB充电电流 5.17V *0.7A
MT3608升压输出 4.99V(带负载)
H桥供电 V<sub>Hb</sub>=V<sub>BAT</sub>-0.33V
BIT供电 3.299V
PCA9685供电 3.306V
4路电机(无载重)满速电池电流 0.227A
2路电机(无载重)满速电池电流 0.177A

实物图

最后,我的这一次设计过程就结束了,给大家看看我的实物(图片可能会加载有一点点满,采用的七牛免费空间):