AM32-MultiRotor-ESC项目固件编译和烧录方法介绍

AM32-MultiRotor-ESC项目固件编译和烧录方法介绍


  • 📍AM32-MultiRotor-ESC项目地址:https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware
  • 🎈针对 不同MUC AM32 Bootloader固件和源码地址:
//包含AT32F421/F415、STM32F051/L321/G071
Updater with V8 Bootloader:https://github.com/AlkaMotors/F051_Bootloader_Updater
//包含GD32E230、STM32F031
AM32-bootloader:https://github.com/am32-firmware/AM32-bootloader/releases
  • 📌AM32 ESC固件在线烧录(提供Bootloader和固件下载以及离线串口烧录工具
    Esc_Config_Tool_1_82_WIN):https://am32.ca/
  • 资源下载页:
https://am32.ca/downloads

其它在线烧录:https://esc-configurator.com/

在线烧录都需要配合支持的飞控板并连接好,才能烧录固件。

  • 🔧烧录Bootloader和固件所需固件:USB转TTL串口工具(例如ch340)、或者DAPLINK/JLINK。
  • ✨如果你手上有ESC电调板子,至少还需要要准备一个USB转TTL串口工具(例如ch340)才能完成全部的Bootloader和固件程序的烧录工作。

📑项目简介

AM32-MultiRotor-ESC-firmware AM32固件原专为STM32 ARM处理器设计,用于控制无刷电机(BLDC)。该固件旨在通过平稳快速的启动和线性油门实现安全快速。它适用于多种车辆类型和飞行控制器。

AM32 has the following features:
  • Firmware upgradable via betaflight passthrough, single wire serial or arduino
    固件可通过betaflight直通、单线串行或arduino升级
  • Servo PWM, Dshot(300, 600) motor protocol support
    舵机控制信号、Dshot(300、600)电机协议支持
  • Bi-directional Dshot
    双向Dshot
  • KISS standard ESC telemetry
    KISS标准ESC遥测
  • Variable PWM frequency
    可变PWM频率
  • Sinusoidal startup mode, which is designed to get larger motors up to speed
    正弦启动模式,旨在让更大的电机达到速度

📘硬件型号支持

AM32目前支持STSPIN32F0、STM32F051、STM32G071、GD32E230、AT32F415和AT32F421。由于随机问题太多,不推荐使用CKS32F051。目标兼容性列表可在此处找到(2021年4月)。

📗运行固件和Bootloader固件说明

要在空白ESC上使用AM32运行固件,必须首先使用ST-LINK、GD-LINK、CMIS-DAP或AT-LINK安装Bootloader引导加载程序。引导加载程序将取决于esc上使用的MCU。选择与ESC的MCU类型和信号输入引脚匹配的引导加载程序。

✨安装引导加载程序后,可以使用配置工具和Betaflight飞行控制器,安装主运行固件,也可以直接连接修改为单线的USB串行适配器。

  • 🔗🖇烧录流程顺序图:先烧写Bootloader程序才能烧写AM32固件
    在这里插入图片描述

  • 🌟如果手上有一个USB转TTL串口工具(例如ch340),那么恭喜你,可以实现Bootloader程序和固件烧录的全部烧录工作。

  • 👉通过Betaflight飞行控制器,可以使用网页版在线安装主运行固件页面:https://esc-configurator.com/

  • 🥕有控制器的,推荐使用am32.ca网站,进行在线烧录。固件和Bootloader上面都可以找的到。
    在这里插入图片描述
    在这里插入图片描述

运行固件编译

    1. 先将项目工程git克隆下来:https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware.git
    1. 下载并解压arm-none-eabi-gcc编译器,将对应bin目录添加到电脑的系统环境变量中。(默认使用的是10.2.0,(Version 10.3-2021.10):gcc-arm-none-eabi:https://developer.arm.com/downloads/-/gnu-rm
      AM32-MultiRotor-ESC-firmware\make\tools.mk,修改版本:10.3.1来匹配当前使用的版本。
    1. 下载并解压mingw64,将对应的bin目录添加到电脑的系统环境变量中。

在项目文件夹,直接使用make,即可进行编译。将会生成所有型号的固件。
在这里插入图片描述

在这里插入图片描述

  • 单独编译指定型号的固件:
//不知道为什么会全部的固件出来
make MCU_TYPE=F421 TARGET=AM32_4IN1
  • 可以通过查看 Makefile 文件来了解所有支持的型号。常见的型号包括:
  • AM32_4IN1
  • AM32_SINGLE
  • AM32_8IN1

📗Bootloader固件烧写

根据mcu的不同选择烧录工具有所不同,如果是通过SWD接口烧录,使用ST-LINK、GD-LINK、CMIS-DAP或AT-LINK烧录Bootloader引导加载程序。如果是通过串口烧录方式,那么所选择的上位机软件不同,需要配合USB转串口工具(例如ch340)进行烧录。

🔧SWD接口烧录

AM32-MultiRotor-ESC项目所支持的mcu都支持使用swd接口烧录,通过SWD接口通用的烧录器有dap-link和jlink.特定的烧录器ST-LINK、AT-LINK等这些烧录工具只支持对应厂商的烧录芯片烧录。

  • MCU为STM32的,例如STSPIN32F0、STM32F051、STM32G071,可以使用ST-LINK、dap-link、jlink。
  • MCU为AT32的,例如:AT32F421可以使用dap-link、jlink、AT-LINK。
🔧SWD烧录上位机软件选择
  • 🌿如果使用openocd烧录,可以直接使用命令行烧录。
  • jlink烧录:

jlink使用openocd烧录,需要将默认的jlink driver驱动更换为libusbK驱动才能使用。

//jlink烧录命令参考格式
openocd -f interface/jlink_swd.cfg -f target/stm32f4x.cfg -c "program STM32F405VG_DEMO.hex verify reset exit"
  • daplink烧录
//daplink烧录命令参考格式
openocd -f interface/cmsis-dap.cfg -f target/stm32f4x.cfg -c "program STM32F405VG_DEMO.hex verify reset exit"
  • 🔨借用相对应的上位机软件烧录方式
    推荐使用mcu厂商的上位机烧录软件进行烧录,当然也可以借助第三方个人制作的MCUProg软件进行烧录。

如果是AT32可以使用ArteryICPProgrammer,支持jlink和ATLINK烧录Bootloader程序。不支持dap-link.
在这里插入图片描述

  • 如果是ST32,上位机可以选择当前官方推荐的STM32CubeProgrammer,支持串口、USB DFU、JLINK、ST-LINK或者老款烧录软件STM32 ST-LINK Utility仅支持ST-LINK烧录方式,两者都不支持daplink.
    在这里插入图片描述
    在这里插入图片描述
📙串口烧录方式介绍:

AM32-MultiRotor-ESC项目所支持的mcu通过串口方式烧录接口,串口方式烧录Bootloader引导加载程序前,需要先将mcu的Boot0引脚接高电平(3.3V).

  • 🌿如果是AT32,就使用Artery_ISP_Programmer上位机软件,默认串口1(PA2、PA3)进行串口下载Bootloader引导加载程序
    在这里插入图片描述

  • 🌿如果是STM32就选择STM32CubeProgrammer上位机软件,默认串口1(PA9、PA10)
    在这里插入图片描述

📒运行固件烧录

运行固件烧录可以使用配置工具和Betaflight飞行控制器,安装主运行固件,也可以直接连接修改为单线的USB串行适配器。以及借助Arduino UNO/nano板子实现运行固件的烧录。

📓借助Betaflight飞行控制器烧录
  • 👉如果手上有Betaflight飞行控制器的,可以通过Betaflight支持的飞行控制器连接ESC电调板子,直接使用网页版,网页在线烧录主运行固件。
    在这里插入图片描述

  • 🌿在线烧录网址:
    需要配合飞线控制器,将已经烧录好Bootloader或带升级的ESC电调的通讯线连接好。

  • 🌿网址一::https://esc-configurator.com/
    在这里插入图片描述

在这里插入图片描述
点击将固件刷入到此ESC
在这里插入图片描述

  • 📍在线烧录网址二:https://am32.ca/
    在线烧录都需要配合飞控板才能烧录。
📘单线的USB串行烧录
  • 🌿单线的USB串行烧录,需要USB转TTL串口工具。常见的CH340的USB转TTL工具。
  • 🖇连接方式:
    在这里插入图片描述
  • 也可以直接将USB转TTL串口工具的RxD和TxD引脚连接到一块,也就是短接起来。
  • 在连接到已经烧录过Bootloader程序的ESC电调板的信号引脚上,如果烧录的是F421_PB4_BOOTLOADER_V2.hex固件,那么信号引脚就是PB4.然后使用Esc_Config_Tool软件进行固件的烧写。
    在这里插入图片描述

在这里插入图片描述

  • 烧录成功后,断开重新连接
    在这里插入图片描述
    如果后续有新版的固件,可以以同样的步骤升级固件。
🌿Arduino烧录方式

是借助Arduino UNO/nano板子,烧录好特定的程序,通过上位机软件借助 UNO/nano板子来上传运行固件到MCU中。

  • Arduino烧录方式介绍:https://github.com/am32-firmware/am32-wiki/blob/main/docs/guides/Arduino-PC-Link.md
  1. Arduino烧录方式,可以使用上位机软件BLHeliSuite烧录Arduino程序: (软件自带UNO/nano编译好的固件)https://www.mediafire.com/folder/dx6kfaasyo24l/BLHeliSuite
    在这里插入图片描述
  2. 方法二使用Arduino IDE上传代码到UNO/nano上。
//如果是nan板子D3引脚连接到ESC电调上的PB4信号接收引脚上(具体引脚看型号和固件),用来给ESC电调传固件用
// This should work conecting signal to pin D3 and ground to ground
/*
    This file is part of the BlHeliSuite interface solutions for AVR
    Copyright (C) 2014  by 4712
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
    File: Arduino1Wire.c
    Author: 4712
*/
/*
 * Arduino1Wire.c //Method I in C
 *
 * Rev 1: Initial realease
 * Rev 1.1: Set ow pull up at startup  
*/

#include <avr/io.h>

//1-Wire Pin:
//Arduino Nano only -> PD3=D3
//MEGA boards -> PB2=D51=MOSI 
//all other -> PB3=D11=MOSI
#define OW_PIND3

#if defined OW_PIND3
#define OW_DDR DDRD
#define OW_PORT PORTD
#define OW_PIN PIND
#define OW PIND3
#elif defined OW_PINB3
#define OW_DDR DDRB
#define OW_PORT PORTB
#define OW_PIN PINB
#define OW PINB3
#elif defined OW_PINB2
#define OW_DDR DDRB
#define OW_PORT PORTB
#define OW_PIN PINB
#define OW PINB2
#endif


#if (defined (__AVR_ATmega2560__) || defined (__AVR_ATmega1280__))
#define IN_DDR DDRE
#define IN_PORT PORTE
#define IN_PIN PINE

#define IN_RX PINE0
#define IN_TX PINE1
#else

#define IN_DDR DDRD
#define IN_PORT PORTD
#define IN_PIN PIND

#define IN_RX PIND0 
#define IN_TX PIND1

#endif 
 
#define SetOWout (OW_DDR|= (1<< OW))
#define SetOWin (OW_DDR &= ~(1<< OW))
#define SetOWlow (OW_PORT &= ~(1<< OW))
#define SetOWhigh (OW_PORT |= (1<< OW))
#define IsOWhigh (OW_PIN & (1<< OW))
#define IsOWlow (!(OW_PIN & (1<< OW)))

#define SetTXlow (IN_PORT &= ~(1<< IN_TX))
#define SetTXhigh (IN_PORT |= (1<< IN_TX))
#define IsRXhigh (IN_PIN & (1<< IN_RX))
#define IsRXlow (!(IN_PIN & (1<< IN_RX)))

int main(void)
{
   
  //Very important disable hardware UART
  UCSR0B =0;
  IN_DDR |=  (1<<IN_TX );
  IN_DDR &= ~(0<< IN_RX);
  IN_PORT|= (1<<IN_TX )|(1<< IN_RX); //pullup RX ;TX high
  //SetOWin;//Set OW as input / default
  SetOWhigh; //pull up on

  while(IsRXhigh); //wait for RX go Low = 1 Incoming data
  while(1)
  {
    //RX low = 1 -> set oneWire to output 
    SetOWout;
    SetOWlow; //Set oneWire low =1
    SetTXlow;  //Echo low to TX 
    
    //Wait RX go high = 0 again
    while(IsRXlow);
    
    // input // RX is high (or high again) = 0 end of bit or idle - so listen to data from TRX 
    SetOWhigh;  //Set OneWire High = 0 for sharper edge //can be skipped?
    //and Echo low to TX  
    SetOWin;
    SetOWhigh;  //Set OneWire pull up
    
    while (IsRXhigh) //while RX high (no incoming bytes)
    {
      if  (IsOWhigh) SetTXhigh; //Set TX High = 0
      else SetTXlow; //Set TX Low = 1 
    }   
  }    
}

  • 🍁 Arduino nano给目标板烧录连接示意图:(建议在Arduino UNO/nano 连接引脚D3到ESC电调板直接串连一个1K的电阻,ESC电调板上的MCU一般都是3.3V电平,Arduino UNO/nano为5V,虽然电调板mcu GPIO引脚可能忍耐5V,为了不损坏io口保险起见)
    在这里插入图片描述

  • 烧录软件:Esc_Config_Tool_1_82_WINhttps://drive.google.com/file/d/1XACXV4w1ldtp71KJtZOjKVYttHv50o5C/view)(软件下不了就去立创开源工程搜索相关AT32电调,一般都上传有该软件)
    在这里插入图片描述
    在这里插入图片描述

等待进度条走完:

在这里插入图片描述

  • 烧录固件成功后,可以切换界面到Settings,可以显示出固件信息以及配置参数界面
    在这里插入图片描述

📄AM32电调部分参数说明参考

  • 🌿相关参考:https://www.modb.pro/db/129992
  • 反向旋转
  • 互补 PWM
  • 可变 PWM

变频PWM是指,PWM驱动频率随着换向频率的提高而同步提高,这可以确保每次换向周期内的PWM脉冲总数一致,理论上“绝对线性”。
一旦开启变频PWM,下方的PWM频率滑槽就会被自动隐藏。

  • 双向控制
  • 堵转保护停机刹车
  • 启动功率(Startup Power):电机启动时的初始功率,避免堵转。
  • 失速保护
  • 正弦启动
  • 提前进角(延时换向度数):Timing Advance
  • 电机KV值
  • 电机极对数
  • PWM频率: PWM Frequency

PWM Frequency(PWM驱动频率),在AM32中,指的是BLDC电机六步换相驱动中,MOSFET一秒钟开关操作的次数。它与电调协议(Dshot300/600)、飞控的控制频率完全没有关系。

  • 电机提示音音量:Beep Volume
### AM32 开源电调 上位机软件 开发教程 下载 对于AM32开源电调项目的开发,尤其是涉及到上位机软件的选择开发资源获取方面,有多种途径可以获得所需资料支持。 #### 使用的编程环境与工具链 为了方便开发人员进行固件编写以及调试工作,推荐使用Keil MDK作为主要IDE来完成C/C++代码编辑、编译等工作[^3]。此外,STM32CubeMX也是一个非常有用的图形化配置工具,它可以帮助快速初始化外设并生成初始项目框架。 #### 烧录方式及工具介绍 针对不同接口类型的烧写需求,提供了两种方案供选择: - 对于采用串口或USB DFU模式进行程序加载的情况,建议选用`Artery_ISP_Programmer`这款官方支持的应用程序来进行操作; - 若是通过SWD硬件接口实施,则应考虑利用`ArteryICPProgrammer`配合AT-LINK或J-LINK仿真器实现高效稳定的在线调试体验[^1]。 #### 通信协议解析 当涉及具体应用层面上的数据交互时,通常会借助UART(Universal Asynchronous Receiver Transmitter)总线完成主机间的信息传递任务。在此过程中,需注意设定正确的波特率参数(如本案例中的256000bps),并通过特定命令序列触发目标设备响应机制——例如连续发送多字节FF指令以达成初步握手目的。 #### 关键特性概述 值得注意的是,在实际运行状态下,该型号ESC具备良好的兼容性扩展能力,不仅能够良好适配各类主流无人机平台架构下的飞行控制系统,而且允许用户自定义调整PWM信号周期内的占空比比例从而精确控制电机运转状态(-2000至+2000区间范围内)。 #### 获取更多帮助 除了上述提及的内容之外,还可以关注DroneCAN社区动态及其关联的技术文档库,那里或许能找到关于如何构建更复杂应用场景方面的指导性意见或是最佳实践分享[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值