【Quad FPV】BLDC:BLHeli_S从硬件PCB设计到Keil编译、下载

前言

大学接触到多旋翼无人机以来,飞行水平未见提高,倒是一直在关注遥控设计和机体设计方面。本文记录关于BLHeli电调设计开发过程中的一些坑。

参考文档:

  • timegate 墨鸢,[email protected]《无感无刷直流电机之电调设计全攻略 》
  • 逗倪豌儿,联系方式现已失效,《编译 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信号

硬件

原理图

【Quad FPV】BLDC:BLHeli_S从硬件PCB设计到Keil编译、下载_第1张图片
注意根据硬件设计来选取后续软件的编译选项,错误搭配会烧MOS

换相检测电路【Quad FPV】BLDC:BLHeli_S从硬件PCB设计到Keil编译、下载_第2张图片

此处可以谈一下这个反馈电阻网络。不同于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} 47KBATUA47K0UB47KUiUC10KUAUM++++10KUMUA=4.7KUA10KUMUB=4.7KUB10KUMUC=4.7KUC10KUCUM=10KUMUB
    联立后可得
    { 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.7UM4.7UM4.7UM3UM=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调试器:
    1. 安装Keil的C8051调试器插件SiC8051F_uVision
    2. 安装UtilDLL
  • 新建工程
    1. 到BLHeli的官方页面down下来源码
    2. 启动Keil C51,new一个Project
    3. Option - Device选项卡中选择器件EFM8BB21F16G-QFN20
    4. 将.\BLHeli-master\BLHeli_S SiLabs路径下的BLHeli_S.asm文件添加到工程中。其中是BLHeli的主要业务代码。
    5. 将上述.asm文件所在路径加入到到C51选项卡中includePath
  • 修改编译选项
    【Quad FPV】BLDC:BLHeli_S从硬件PCB设计到Keil编译、下载_第3张图片
  1. 反注释“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桥下管;
  2. 反注释“MCU_48MHZ EQU 1”一行,如果主控MCU是EFM8BB1则不需要注释
  3. 反注释“FETON_DELAY EQU 15”一行。
  • 编译【Quad FPV】BLDC:BLHeli_S从硬件PCB设计到Keil编译、下载_第4张图片
  • 插入调试器。设备管理器中只显示一个USB Device,而不显示具体的设备名称。调试器本身会自动安装驱动。
  • 配置工程的Debug选项。【Quad FPV】BLDC:BLHeli_S从硬件PCB设计到Keil编译、下载_第5张图片
    打开Option - Debug,选择右侧Use:…,下拉后选择Silicon Lab C8051Fxxx Driver调试器(就是日常选择JLink的那个下拉菜单,若无该调试器则说明第1步失败),然后点击右侧Settings,选择“USB Debug Adapter”(若为灰色请检查调试器是否正常工作,可以尝试用USB Debug Adapter Firmware Reset.exe 软件来重置烧录器固件)。选好以后点击OK。
  • 配置工程的Utilities选项。
    【Quad FPV】BLDC:BLHeli_S从硬件PCB设计到Keil编译、下载_第6张图片
    再到Debug选项卡右侧的Utilities选项卡,选择Use Target Driver For Flash Programming,并在底下的下拉菜单中选择Silicon Labs C8051Fxxx Driver。此时,下载器就绪。
  • 下载
    【Quad FPV】BLDC:BLHeli_S从硬件PCB设计到Keil编译、下载_第7张图片
    【Quad FPV】BLDC:BLHeli_S从硬件PCB设计到Keil编译、下载_第8张图片
    【Quad FPV】BLDC:BLHeli_S从硬件PCB设计到Keil编译、下载_第9张图片
    【Quad FPV】BLDC:BLHeli_S从硬件PCB设计到Keil编译、下载_第10张图片
    此时可能要求更新固件到40,更新即可。但若调试器过于古早,更新后会提示UE-C5断开连接,此时可以通过USB Debug Adapter Firmware Reset.exe重置固件来使重新连接调试器,但无法给目标MCU下载固件,请考虑换一家店购买调试器。另外,C2调试器向外供电能力孱弱,非常不建议用C2调试器给目标电调供电。

BLHeli上位机BLHeliSuite

  • 上位机的若干种连接方式(参考BLHeli文档《BLHeli programming adapters》,或者翻译帖Blheli的编程适配器及编程方式简介(基于BlHeli13.2).
  1. 通过Arduino来制作C2调试器
  2. 魔改CP2102等USB转串口芯片来制作单线双工USB串口
  3. 直接使用U-EC5调试器连接上位机
  4. 较新的固件可以直接用Betaflight Configuator来读写多个电调的固件
  • 配置
    参考文章BLHeli无刷电调的固件烧写及调参介绍(解决电机低速抖动及正反转问题).

你可能感兴趣的:(单片机,嵌入式,硬件工程)