前言
大学接触到多旋翼无人机以来,飞行水平未见提高,倒是一直在关注遥控设计和机体设计方面。本文记录关于BLHeli电调设计开发过程中的一些坑。
参考文档:
- timegate 墨鸢,moyuan2000@163.com《无感无刷直流电机之电调设计全攻略 》
- 逗倪豌儿,联系方式现已失效,《编译 BLHeli_S 的正确方式》
- BLHeli固件开源地址:https://github.com/bitdump/BLHeli.git
- BLHeli上位机:https://github.com/blheli-configurator/blheli-configurator.git
开发环境和固件版本:
- Keil版本:C51V960,注意V960版本之前可能并无EFM8BB2x器件包
- BLHeli版本:Rev16.7,采用J.inc头文件
- MCU:EFM8BB21F15G,QFN20封装
- 栅极驱动器:FD6288Q
- MOS:NCEP30T12G,封装DFN8_5x6mm,30V 120A NMOS-FET
- 调试器:U-EC6,C2调试器,注意必须要能够升级到v50固件
- 控制信号:2kHz,占空比大于50%PWM信号
硬件
原理图
注意根据硬件设计来选取后续软件的编译选项,错误搭配会烧MOS
换相检测电路
此处可以谈一下这个反馈电阻网络。不同于FOC,BLDC不加装额外的转子位置传感器,而是通过三相过零事件来判断换相时机。根据基尔霍夫定律,假定目前AB导通(Q1、Q4),即:
- pA=BAT(Q1导通),pB=0(Q4导通)
- pC的电压由C相绕组的反电动势和绕组中点叠加而成,取pC = Ui,作为自变量
- 转子旋转过程中,pC点电压从起始的BAT降低,过零时等于BAT/2,过零后进一步降低
- 按照图中的电阻阻值设置,根据基尔霍夫定律可以列出:
{
B
A
T
?
U
A
47
K
+
U
M
?
U
A
10
K
=
U
A
4.7
K
0
?
U
B
47
K
+
U
M
?
U
B
10
K
=
U
B
4.7
K
U
i
?
U
C
47
K
+
U
M
?
U
C
10
K
=
U
C
4.7
K
U
A
?
U
M
10
K
+
U
C
?
U
M
10
K
=
U
M
?
U
B
10
K
\begin{cases} \frac{BAT-U_A}{47K}&+&\frac{U_M-U_A}{10K}=\frac{U_A}{4.7K}\\ \frac{0-U_B}{47K}&+&\frac{U_M-U_B}{10K}=\frac{U_B}{4.7K}\\ \frac{U_i-U_C}{47K}&+&\frac{U_M-U_C}{10K}=\frac{U_C}{4.7K}\\ \frac{U_A-U_M}{10K}&+&\frac{U_C-U_M}{10K}=\frac{U_M-U_B}{10K} \end{cases}
??????????47KBAT?UA??47K0?UB??47KUi??UC??10KUA??UM???++++?10KUM??UA??=4.7KUA??10KUM??UB??=4.7KUB??10KUM??UC??=4.7KUC??10KUC??UM??=10KUM??UB??? 联立后可得
{
B
A
T
+
4.7
U
M
=
15.7
U
A
4.7
U
M
=
15.7
U
B
U
i
+
4.7
U
M
=
15.7
U
C
3
U
M
=
U
A
+
U
B
+
U
C
\begin{cases} BAT&+&4.7U_M&=15.7U_A\\ &&4.7U_M&=15.7U_B\\ U_i&+&4.7U_M&=15.7U_C\\ &&3U_M&=U_A+U_B+U_C \end{cases}
??????????BATUi??++?4.7UM?4.7UM?4.7UM?3UM??=15.7UA?=15.7UB?=15.7UC?=UA?+UB?+UC?? 最终,可以导出
{
U
M
=
0.030
U
i
+
0.030
B
A
T
U
C
=
0.065
U
i
+
0.001
B
A
T
\begin{cases} U_M=0.030U_i+0.030BAT\\ U_C=0.065U_i+0.001BAT \end{cases}
{UM?=0.030Ui?+0.030BATUC?=0.065Ui?+0.001BAT? 可以看出,U_M截距较大,U_C斜率较大,当C绕组平行于磁场方向时,反向电动势为0,将产生过零事件,MCU换相。
自举电路
由于采用双NMOS全桥驱动,所以每一相都设计了自举电路。
软件环境搭建
- 关于MCU和调试器
本文的硬件方案使用了EFM8BB2作为控制器。BLHeli项目发展至今,前后用过多款控制器,从最初的德国MK电调迁移来的ATmega8系列的BLHeli,到SiLab魔改的C8051内核的F系列(较旧)和EFM8BB2系列的BLHeli_S(也是某宝绝大多数电调所用的控制器),目前已经发展到基于ST的32位MCU的BLHlei_32。 虽然另一个基于STM32F103的无刷电调项目ESC32也能在网上找到制作资料,但目前ST的单片机涨价过于离谱,且STM32F103不管哪种封装,占地面积都要远大于EFM8BB2的QFN20 3x3mm,因此我还是更愿意选择本文的EFM8BB2硬件方案。 51单片机作为一种上世纪的技术,如今在成本(涨价前)和性能上受到ST、TI等32位MCU的全方位碾压。不过C8051显然还没有完全退出历史舞台。 EFM8BB2是SilLab推出的一种魔改C8051,3.3V供电,主频可达50MHz,可以由内部RC产生时钟,支持C2接口的调试器进行在线Debug。我想,除了这个电调项目以外,任何需要逻辑电路但又不值得上STM32的需求场合,其实都不妨用这款单片机来完成。 BLHeli_S固件则采用活跃在本科课堂上的C8051汇编语言编写。下面我们使用熟悉的Keil环境来进行编译下载。 调试器方面,使用C2调试器,某宝搜索关键词“U-EC5”能搜到很多25元左右的C2调试器,但一定要问清楚,调试器是否支持固件升级。调试器连接目标MCU时会要求升级,一些调试器由于版本过于古早,是不能升级使用的。 - 安装Keil、配置下载器
在官网下载Keil c51v960或更新版本(旧版本Keil的Devices中没有EFM8系列单片机)。按照下列步骤在Keil中配置C2调试器:
- 安装Keil的C8051调试器插件SiC8051F_uVision
- 安装UtilDLL
- 新建工程
- 到BLHeli的官方页面down下来源码
- 启动Keil C51,new一个Project
- 在Option - Device选项卡中选择器件EFM8BB21F16G-QFN20
- 将.\BLHeli-master\BLHeli_S SiLabs路径下的BLHeli_S.asm文件添加到工程中。其中是BLHeli的主要业务代码。
- 将上述.asm文件所在路径加入到到C51选项卡中的includePath
- 修改编译选项
- 反注释“ESCNO EQU J_”这一行代码,选择port mapping文件J。具体解释一下,请翻到“; List of enumerated supported ESCs”行注释,注释底下的A_~W_指的是不同硬件方案下的IO分配,以J_ EQU 10这一行为例,行注释中L2=P0.7,L1=P0.6,L0=P0.5,RC即信号输入IO,本方案是P0.4;CC是上面提到的电阻反馈网络公共端,对应P0.3;MB是B相反馈,对应P0.2;MA是A相反馈,对应P0.1;MC是C相反馈,对应P0.0;接下来2个X是未使用;Ac ~ Cc是P1.0 ~ P1.2,分别是三相H桥上管;Cp ~ Ap是P1.3 ~ P1.5,分别是三相H桥下管;
- 反注释“MCU_48MHZ EQU 1”一行,如果主控MCU是EFM8BB1则不需要注释
- 反注释“FETON_DELAY EQU 15”一行。
- 编译
- 插入调试器。设备管理器中只显示一个USB Device,而不显示具体的设备名称。调试器本身会自动安装驱动。
- 配置工程的Debug选项。
打开Option - Debug,选择右侧Use:…,下拉后选择Silicon Lab C8051Fxxx Driver调试器(就是日常选择JLink的那个下拉菜单,若无该调试器则说明第1步失败),然后点击右侧Settings,选择“USB Debug Adapter”(若为灰色请检查调试器是否正常工作,可以尝试用USB Debug Adapter Firmware Reset.exe 软件来重置烧录器固件)。选好以后点击OK。 - 配置工程的Utilities选项。
再到Debug选项卡右侧的Utilities选项卡,选择Use Target Driver For Flash Programming,并在底下的下拉菜单中选择Silicon Labs C8051Fxxx Driver。此时,下载器就绪。 - 下载
此时可能要求更新固件到40,更新即可。但若调试器过于古早,更新后会提示UE-C5断开连接,此时可以通过USB Debug Adapter Firmware Reset.exe重置固件来使重新连接调试器,但无法给目标MCU下载固件,请考虑换一家店购买调试器。另外,C2调试器向外供电能力孱弱,非常不建议用C2调试器给目标电调供电。
BLHeli上位机BLHeliSuite
- 通过Arduino来制作C2调试器
- 魔改CP2102等USB转串口芯片来制作单线双工USB串口
- 直接使用U-EC5调试器连接上位机
- 较新的固件可以直接用Betaflight Configuator来读写多个电调的固件
|