单片机请购买24年10月之后生产的(最下方丝印前四位数>=2442)
介绍
AM32 固件原为 ARM 处理器设计,现成功移植到强大的 Ai8051U,用于控制无刷电机 (BLDC)。该固件旨在安全、快速、平滑、快速启动和线性油门。它适用于多种车辆类型和飞行控制器。
AM32具有以下特点:
- 可通过 betaflight 直通、单线串行或 arduino 升级固件
- 伺服 PWM、Dshot(300, 600) 电机协议支持
- 双向控制
- KISS 标准 ESC 遥测
- 可变 PWM 频率
- 正弦启动模式,旨在让更大的电机加速
主控及外设配置
使用AI8051U作为主控芯片,AI8051U具有充足的外设资源和优异的性能表现。
MCU

MCU引脚图

使用 PWMA 输出 3 组互补 PWM 来驱动 MOSFEET,使用 PWMB 捕获外部油门信号,使用 ADC 对电压和电流进行采样,用于低电压保护和过流保护。使用内部 OPA 和 BEMF 估计转子位置。TMR0 和 TMR1 用于计算换向时间,TMR2 用于串口,TMR3 和 TMR11 用于延迟功能(实际上,只需要一个),TMR4 用于完成一些周期性任务。
引脚选择

AH AL BH BL CH CL : PWMA 输出
INPUT: PWMB 外部输入触发
A_BEMF: A相反电动势
B_BEMF: B相反电动势
C_BEMF: C相反电动势
CC_BEMF: 反电动势中电
CMP_OUT:比较器输出
ADC_V: 电压检测口
ADC_I: 电流检测口
为了统一 OPA 的中断入口,将 OPA 的输出到 P41 中,使用 P41 的引脚中断进行过零比较处理
P30 和 P31 用于通过 STC-LINK1、UART 或内部 USB 下载 bootloader
初始化(板子仅供参考)
烧录Bootloader
- 对于空芯片,BootLoader 需要通过 STC-LINK1、UART 或内部 USB 进行烧录,如下图所示进行连

-
使用 AIapp-ISP 打开 Bootloader(
附件:AM32_Bootloader_AI8051U.zip) 工程,编译后直接下载。

-
使用单线串口(可以将 USB 转串口芯片的 RX 和 TX 连接在一起,比如 CH340,然后连接到板子上)连接到 ESC,并使用工具配置和更新固件。我用 CH340 来表现,接线如下图所示。


如果 Bootloader 烧录正确,打开 Esc_Config_Tool_1_82_WIN.exe(
附件:Esc_Config_Tool_1_82_WIN.zip) 配置工具并打开 ESC 电源。按照下图中的步骤进行单击。首次连接时,将显示 No EEprom!

直接点击下面的 发送默认设置 以烧写默认值。烧录成功后,重新开机。再次连接并单击 M1。将显示我们刚刚烧录的默认参数。

-
刷写固件和配置固件可以使用 Keil C251 进行编译,编译后的固件位于 Objects 文件夹中。
使用文本编辑器打开 HEX 文件(我更喜欢使用 VScode),为了更好的支持 HEX 文件编辑,需要安装 Hex Editor 或 Intel HEX 格式插件,该插件可以在扩展市场中找到。安装后,打开 HEX 文件。

在这个 HEX 文件中,请注意第一行。
:03000000023E5865
将 0000H 的值更改为 1000H,将 65H 的值更改为 55H。
:03100000023E5855
请注意,0000H 的值是程序的起始地址,65H 的值是校验和。1000H 的值是烧录 bootloader 后程序的起始地址。55H 的值是新的校验和。烧录 bootloader 后程序的起始地址是 0x1000H,因此 0000H 的值更改为 1000H。校验和的计算方法是将行中除起始冒号和校验和本身之外的所有数据相加,然后取总和最后一个字节的二进制补码。65H 的值更改为 55H,一般来讲,上面这个改动导致的校验位变化可以直接在校验位上面减去10H。具体计算方法可以在网上找到。如果 VScode 配合插件使用,可以直接点击地址值进行修改,插件可能会自动计算新的校验和。


回到工具的 FLASH 界面,我们点击 Load Firmware,选择我们刚刚修改的固件,会弹出 FLash Firmware 按钮。单击以开始更新程序。

更新完成后,重新上电并重新连接 ESC 以配置 ESC。

测试
我移植的版本是 V2.16,支持 dshot300、dshot600、PWM 等信号。(但出于某种原因,我只实现了 PWM,不能使用 dshot)。