【极海 APM32M3514 电机通用评估板测评】介绍、工程测试
本文介绍了极海 APM32M3514 电机驱动开发板的资源等相关信息、软件开发环境搭建、工程测试。
1 简介
介绍了主控和开发板的相关信息和资源等。
主控
开发板主控为 AMP32M3514 电机控制专用SoC 。产品基于 Arm® Cortex®-M0+ 内核,32位高性能 SoC,工作频率可达 72MHz。内置协处理器,支持和 TMR1进行交互,提高 PWM参数的计算速度,从而提高 PWM的配置速度。内置高速存储器(高达 64KB 的 Flash 和 10KB的 SRAM),芯片管脚复用了大量增强的外设和 I/O。提供标准的通信接口: I2C接口、 SPI I2S 接口 、 USART接口 、 CAN接口。在芯片安全方面,支持 96位唯一 UID。工作环境温度范围:-40℃ 至 +105℃(精度为 3℃),电压范围: 2.0-3.6V ,多个省电模式保证了低功耗应用的要求。
封装和引脚
QFN 封装

引脚定义

APM32M3514×8 系统框图

产品特性
系统与架构
- 32位 Arm® Cortex®-M0+ 内核 最高 72MHz 工作频率 ,支持单周期 32 位硬件乘法器
- M0CP协处理器,其硬件包括:移位单元、 32bit/32bit除法器、可选带饱和的乘加运算、开方(寄存器形式)、三角函数、 SVPWM(移相功能由软件实现)
存储器
- Flash 64KB
- SRAM 10KB(8KB + 2KB 协处理器专用空间)
通信接口
- 1个 I2C接口
- 2个 U(S)ART接口,支持全双工通信
- 1个 SPI接口 ,支持 I2S功能
- 1个 CAN接口
定时器
- 1个 16位高级控制定时器 TMR1,有 7个通道可提供给 PWM输出,其中 6个通道实现互补 PWM输出,支持刹车功能,支持与 M0CP协处理器交互
- 1个 32位通用定时器 TMR2 2个 16位通用定时器 TMR3/4
- 2个 16位 基本 定时器 TMR6/7
- 2个看门狗定时器: 1个 独立 看门狗 IWDT和 1个窗口看门狗 WWDT
- 1个 24位自减型 SysTick
- 支持红外接收功能,用于遥控
时钟
- HSECLK:支持 4-32MHz外部晶振
- LSECLK:支持 32.768KHz外部 晶振(仅 F035支持)
- HSICLK 内部 8MHz RC振荡器
- HSICLK14 内部 14MHz RC振荡器
- LSICLK 内部 40KHz RC振荡器
- PLL:锁相环,支持 2-16倍
电源与电源管理
- 外部供电电压: VDD=2.0-3.6V
- 模拟 供电电压: VDDA=VDD-3.6V
- 支持上电 /掉电复位(POR/PDR)
模拟外设
- 1个 12位 ADC,支持可编程转换分辨率、提高转换速率,最多支持 16 个外部通道(M3514 最多 13 个),支持内部 3个通道, 转换范围 0-3.6V 独立模拟电源 输入: 2.4-3.6V
- 2个可编程模拟比较器
- 4个通用运算放大器,可通过外接电阻调整运放增益,也可以通过设置选择内部预设的增益档位。转换速率高达 10v/us,增益带宽积高达 10MHz
- 内置 1个温度传感器
实时时钟 RTC
- 支持日历功能
- 在 停机、待机 模式下可 用于警报和周期唤醒
BootLoader
支持 USART升级
启动配置

APM32M3514 芯片功能和外设资源

硬件
硬件框图

时钟树

时钟源按速度分为高速时钟、低速时钟,高速时钟有 HSICLK、HSICLK14、HSECLK,低速时钟有LSECLK、LSICLK;按片内/外分为个、外部时钟,内部时钟有 LSICLK、HSICLK、HSICLK14,外部时钟有HSECLK、LSECLK,其中 HSICLK 在出厂时会校准。
软件
整体代码架构可划分为4 层,用户层、外设驱动层、电机控制驱动层、电机算法层。
参数配置
USER 用户
main.c:主函数入口,负责初始化电机参数、底层外设、中断优先级、while 循环及低速状态机环路的切换;
APM32M3514_int.c:所有的中断处理函数,重点包括 TMR1 中断函数、ADC 中断处理函数;
user_function.c:包括电机参数的初始化配置、参数复位等处理函数;
parameter.h:包括了所有的需要配置参数信息;
HARDWARE 硬件
外设驱动层主要负责 APM32M3514 芯片的外设驱动函数及配置,主要包括 GPIO 、P WM 、ADC 、OPA 、COMP 、M0CP 协处理器等。
MOTOR_CONTROL 电机控制
电机控制驱动层主要负责电机的控制运行逻辑及核心处理算法调用。
Geehy_MCLIB 极海电机算法层
电机算法层包括坐标变换、矢量控制等相关函数,数学库,滑模观测器等库函数。
开发板

性能特点
- 12V 至 72V 直流 DC 宽电压输入
- 最大功率 100W
- 支持电机类型: BLDC、PMSM
- 支持编码器类型: 霍尔、光电、磁编码器
- 通讯接口: SCI、SPI、I2C、CAN
- 单/双电阻采样、三相反电动势采样
- 芯片优势:内置 200V 6N Gate Driver 和 3.3V LDO
原理图
MCU

供电

Bemf & 霍尔

霍尔

MOS

通信

硬件接口
(1) 电源输入接口(接入24V24V,注意正负)
(2) 三相电机接口(相序只会影响旋转方向)
(3) HALL 输入接口
(4) S WD 调试接口
(5) USB type c 接口
调试步骤
1.参数预配置
测量电机的相关参数(可通过电桥及万用表等设备),包括相电阻、电感、极对数、额定转速等,并在parameter.h文件中修改相关参数,并结合“3.5章节关键参数设置”进行配置。
需注意的点,结合实际电机的额定功率确认额定电流大小,需选取合适的三相采样电阻,确认电流基准。
2.硬件验证
板子确认上电后系统各个电压稳定(12V、5、3.3V),同时包括母线电压、运放偏置电压1.6V(上下波动±0.05V),PWM驱动芯片供电电压12V,同时可以先不接电机进行PWM输出验证(duty&deadtime),确认死区及死区时间是否与预期设定相符合(修改PWM duty发50%duty零矢量,验证上下互补波形及死区时间),以及硬件过流保护功能验证(模拟过流信号发生,观察PWM是否自动开启硬件过流保护)等。
过流保护:1 、采用比较器硬件过流保护;2 、采用运放 比较器硬件过流保护;3 、采用IPM 的FO 信号硬件过流保护。具体结合实际硬件进行分析验证。
3.预定位及电流环PI调试
在给定固定Q轴电流,且对电机初始定位0°,定位电流结合电机额定电流参考从小到大逐渐调节,并在此预定位Align状态下调节DQ轴电流环PI参数,可结合实际设定定位电流的斜波加减速,同时观察Vq以及Iq波形是否稳定,PI调节器从小到大,先调节Kp后再加入Ki。所需调试参数及实际效果图如下图所示。
4.开环加速运行
在Startup开环阶段,给定固定Q轴电流,沿着预先设定斜率加速,此处核心点在于固定Q轴电流与斜率加速度需要适配,不同电机情况不一致,具体得测试验证确认,常规方式是先确认好斜率加速度,而后再设定给定Q轴电流,从小到大逐渐测试确认电机已运行。同时,可以开启观测器,并在当前Startup开环阶段调节观测器参数及锁相环PLL的PI参数,观察对应的角度及速度是否与开环给定接近。所需调试参数如下图所示。
5.闭环运行
软件中支持2种闭环切换逻辑,即软件过渡切换模式以及直接过渡切换,默认采用软件过渡切换模式(本质两种切换逻辑没有优劣之分,结合不同应用参数需求选用)。切换闭环运行的最低转速要求是电机额定的10%以上,切换闭环后同步观察转速及给地转速的跟随情况,调节速度环PI参数,进而调节速度跟踪响应。
6.报错处理
若运行过程中程序报错,则可以通过观测 “M1FaultID_Record” 故障标识确认报错代码,进而定位到问题所在,进行分析及排查。参数如下图所示。
7.测试
至此,电机已可以闭环运行,核心的几个点主要也在于电机核心参数、电流环PI、速度环PI、观测器参数、锁相环PLL参数等。
2 开发环境搭建
介绍了 IDE 编译环境的搭建流程,编译工程并上传固件。
编译器安装
使用 Keil MDK IDE 作为编译软件,步骤如下
1.下载并安装 Keil MDK IDE 软件;
2.下载并安装芯片的 Keil 设备支持包 APM32M35xx_DFP.pack ;
3.下载 APM32M35xx_SDK_V1.0.0 开发例程(包含 Demo 工程);
4.下载 APM32M3514_FOC 电机驱动工程示例。
3 工程测试
介绍了示例工程的代码及编译、工程调试、固件烧录等流程。
代码
打开 GPIO 示例工程 APM32M35xx_SDK_V1.0.0\Examples\Board_APM32M35XX\GPIO\GPIO_Toggle
#include "main.h"
#include "bsp_delay.h"
#include "apm32m35xx_rcm.h"
#include "apm32m35xx_gpio.h"
#include "apm32m35xx_misc.h"
#include <stdio.h>
#include <string.h>
#define DEBUG_USART USART1
void APM_MINI_Init(void);
void GPIO_Init(void);
int main(void)
{
APM_MINI_Init();
GPIO_Init();
printf("This is an example of GPIO toggle \r\n");
while (1)
{
/* Turn LED2 on */
GPIO_ClearBit(LED2_GPIO_PORT, LED2_PIN);
/* Turn LED3 off */
GPIO_SetBit(LED3_GPIO_PORT, LED3_PIN);
APM_DelayMs(200);
/* Turn LED2 off */
GPIO_SetBit(LED2_GPIO_PORT, LED2_PIN);
/* Turn LED3 on */
GPIO_ClearBit(LED3_GPIO_PORT, LED3_PIN);
APM_DelayMs(200);
}
}
void APM_MINI_Init(void)
{
/* Init delay function */
APM_DelayInit();
APM_MINI_PBInit(BUTTON_KEY1, BUTTON_MODE_GPIO);
APM_MINI_COMInit(COM1);
}
void GPIO_Init(void)
{
GPIO_Config_T gpioConfig;
RCM_EnableAHBPeriphClock(LED2_GPIO_CLK | LED3_GPIO_CLK);
/* LED2 GPIO configuration */
gpioConfig.pin = LED2_PIN;
gpioConfig.mode = GPIO_MODE_OUT;
gpioConfig.outtype = GPIO_OUT_TYPE_PP;
gpioConfig.speed = GPIO_SPEED_50MHz;
gpioConfig.pupd = GPIO_PUPD_NO;
GPIO_Config(LED2_GPIO_PORT, &gpioConfig);
/* LED3 GPIO configuration */
gpioConfig.pin = LED3_PIN;
GPIO_Config(LED3_GPIO_PORT, &gpioConfig);
}
#if defined (__CC_ARM) || defined (__ICCARM__) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
int fputc(int ch, FILE* f)
{
/* send a byte of data to the serial port */
USART_TxData(DEBUG_USART, (uint8_t)ch);
/* wait for the data to be send */
while (USART_ReadStatusFlag(DEBUG_USART, USART_FLAG_TXBE) == RESET);
return (ch);
}
#elif defined (__GNUC__)
int __io_putchar(int ch)
{
/* send a byte of data to the serial port */
USART_TxData(DEBUG_USART, ch);
/* wait for the data to be send */
while (USART_ReadStatusFlag(DEBUG_USART, USART_FLAG_TXBE) == RESET);
return ch;
}
int _write(int file, char* ptr, int len)
{
int i;
for (i = 0; i < len; i++)
{
__io_putchar(*ptr++);
}
return len;
}
#else
#warning Not supported compiler type
#endif
根据开发板原理图, PA12 为用户 LED,


将工程中的 GPIO 输出引脚修改为 PA12
#define LEDn 2
#define LED2_PIN GPIO_PIN_12
#define LED2_GPIO_PORT GPIOA
#define LED2_GPIO_CLK RCM_AHB_PERIPH_GPIOC
#define LED3_PIN GPIO_PIN_1
#define LED3_GPIO_PORT GPIOC
#define LED3_GPIO_CLK RCM_AHB_PERIPH_GPIOC
延时控制芯片的 GPIO 输出电平反转,即可实现板载 LED 的闪烁。
工程编译
打开工程,修改代码,点击 Rebuild 按钮

固件上传
点击魔术棒,进入 Debug 调试设置界面,选择 J-LINK 调试,点击 Setting 识别目标芯片

点击 Download 按钮实现固件烧录;

调试运行
点击 Start/Stop Debug Session 按钮实现调试。

效果
板载 LED 闪烁,间隔为 200 ms

4 总结
本文介绍了开发板和主控芯片的基本信息,包括芯片性能、特点、开发板资源、原理图等;完成开发环境的搭建,结合板载资源实现 Demo 工程编译、固件上传、工程调试等测试,为后续电机驱动的实现打好基础。