前情回顾:之前已经分别介绍过 BLHeli_S 电调固件烧录与调参——BLHeliSuite 软件使用教程 和 BLHeli_S 电调固件调参教程。
从 GitHub 下载到 BLHeli-master 之后,打开 BLHeli_S SiLabs 目录下的 Hex files 文件夹,会看到一长串不同版本的固件烧录文件。那么问题来了:这些 hex 文件到底该怎么选?

这些固件的命名形式基本一致,结构可以拆成一个字母、另一个字母、两位数字,再加上 REV16.7 版本号和 .HEX 后缀。在《BLHeli_S manual SiLabs Rev16.x.pdf》这份手册里,恰好能找到官方对命名规则的说明。

按照手册的解释:第一个字母代表 MCU 的引脚分配,更准确地说,是引脚排布方案;第二个字母只有 L 和 H 两种,L 对应 24 MHz 的 EFM8BB1 系列 MCU,H 对应 48 MHz 的 EFM8BB2 系列;后面两位数字则表示 FET 开关死区时间,单位是 20.4 ns。有的 FET 预驱动器内部已经集成了死区时间控制,这种情况下可以直接写 00。
看到这里可能还有一个疑问:第一个字母所代表的“引脚分配”到底指什么?

注意观察 BLHeli-master\BLHeli_S SiLabs 路径下这些以单个字母开头的 .inc 文件,比如 A.inc、B.inc、C.inc 等,其实就对应了固件名称中的第一个字母。随便打开一个,比如《A.inc》,第 32 到 39 行就是根据 24 MHz / 48 MHz 选择对应 MCU 定义文件的条件编译逻辑。

再看第 46 到 77 行,这里定义的是死区时间。从代码里的 ELSEIF FETON_DELAY == 5、== 10 一直到 == 90 可以看出,死区时间只有 0、5、10、15、20、25、30、40、50、70、90 这几种取值。同时,Eep_ESC_Layout 这一行定义了对应的 #A_L_xx# 字符串,因为当前打开的是《A.inc》,所以前缀是 A_L。

这时候再回看固件命名,会发现确实只有 0、5、10、15、20、25、30、40、50、70、90 这几种死区数字可选。
接下来对比一下《A.inc》和《B.inc》的 PORT 1 definitions 部分,区别就非常直观了。

可以看到,两个文件里 ABC 三相的桥臂 MOS 控制信号定义的引脚序号不同。这就是不同固件对应不同引脚分配的含义。为什么需要这么多套引脚方案?原因在于电调普遍要求体积小、集成度高,而且市面上的电调外形和 PCB 设计各不相同。为了方便实际布线,Layout 时对引脚排序做了调整,方便布局布线,于是就有了多种可选的引脚排布固件。
前面提到的 48 MHz MCU,具体对应的型号就是 EFM8BB21F16G-C-QFN20。

从数据手册的引脚定义可以看到,inc 文件中 PORT 1 definitions、P0、P1 这些引脚分配,就是把 EQU 后面的数字与芯片实际的物理引脚序号对应起来。

搞清楚这些固件命名的含义之后,至少能带来两个好处:
- 给现成的 BLHeli_S 电调刷固件时,知道怎么选择对应版本。 产品详情页一般会标明所使用的固件版本,如果没有标注,最稳妥的方式是直接向卖家确认。
- 自己动手 DIY BLHeli_S 电调时,可以选择 PCB 布线更顺手的固件方案。 不必为了固定引脚分配而把走线绕得七扭八歪。
如果你也准备自己画一块 BLHeli_S 电调板,或者想围绕无刷电机驱动做点实际项目,不妨到云栈社区翻一翻其他开发者的经验分享,会有不少启发。
|