本帖最后由 骑着蜗牛狂奔O 于 2023-3-16 17:30 编辑
AN0167 AT32F413 BLDC Hall 1-Shunt Demo
前言
这篇应用笔记描述了怎么使用 AT32F413RCT7 搭配 AT-MOTOR-EVB 电机开发板,使用霍尔传感器 六步方波控制算法搭配 1-Shunt 电阻检测电路驱动三相永磁同步电动机(直流无刷电动机)。这篇文 档也描述了如何操作以及透过上位机 ArteryMotorMonitor.exe 实现电机控制与参数调试。
支持型号 AT32F413xx
1.电机库算法概述
这篇应用笔记使用电机库相关算法主要内容如下
目标电机:三相永磁同步电动机(直流无刷电动机)
控制模式:
120°方波控制
三相 PWM 调制模式:
120°导通 PWM 控制
相电流检测模式:
单电阻电流检测和重构方式
转子位置检测模式:
霍尔效应位置传感器
有传感器 120方波控制模式:
120°方波电压控制
转矩控制 (120°方波电流控制)
转速控制
弱磁控制
回生刹车
2.环境准备
2.1 硬件环境准备
需要准备硬件项目主要包括 PMSM(BLDC)电机、AT-Link 或第三方调试下载器以及一块电机开发控制板 AT-MOTOR-EVB,相关硬件配置可参考 UM0011 低压电机控制开发板使用手册。
PMSM(BLDC)电机: JK42BLS01-X056ED
调试下载器
电机控制开发板: AT-MOTOR-EVB (含 AT32F413RCT7 转板)
软件环境准备
1) 开启 bldc_1shunt_hall_sensor 范例工程
2) 电机应用 PC 软件 ArteryMotorMonitor.exe(本软件不需安装,只需直接运行可执行程序)。
3) 根据各个 AT32 MCU 的闪存存储大小设置 ROM,详细参照表 2,例:AT32F413RCT7 的闪存存储大小为 256 K 字节,则其 IROM1 的起始位置为 0x8000000,大小为 0x3F800,其 IROM2的起始位置为 0x803F800,大小为 0x800,并确认 linker 中的 Use Memory Layout from Target Dialog 选项有打勾,如图 3。
注[1]:使用 keil v5.33 版本,因 AT32 BSP 源码不支持 V6.15 编译器,请使用 keil complier version 5 版本进行编
译。
3 BLDC 电机库文档说明
图 4.为电机库文档结构说明图,说明电机库文档中各文件之间的关系,其中 mc_lib.h、mc_motor_param.h、mc_drive_param.h、mc_ctrl_param.h 等 4 个头文件提供用户自行输入电机控制型式、电机参数、控制板参数、控制器参数等,以及 mc_hwio.h 头文件可根据 MCU 外设与控制板连结的接脚对应关系,设定 MCU 外设规划参数。相关的设定参数于 mc_bldc_globals.h 整合后,于mc_bldc_globals.c 中的函数设定变量初值,提供电机库函数使用。而在 MCU 外设规划部分,则由mc_hwio.c 文件执行相关外设初使化设定。
开启 bldc_1shunt_hall_sensor 范例工程,文挡工程结构如图 5 所示。user 文件夹为自撰程序包含主程序、外设规划程序、参数存入 flash 程序以及参数定义头文件。firmware 文件夹为 BSP 程序文件,电机库程序放置在 mclib 文件夹, 包含延时函数、通讯函数、全局变量设定与电机库函数。详细电机库函数说明可参考 AN0064 电机库使用指南。
表 3 即为电机库文档说明总表,以下对于不同文档分别进行说明。
1) mc_lib.h 文档
表 4 为模式宏定义,基于用户的硬件与电机配置,可定义适当的模式。此工程范例配置为六步
方波控制模式、单电阻电流采样、霍尔传感器。
2) mc_ctrl_param.h 文档
相关电机的控制参数定义在此文档,表 5 为控制参数宏定义的说明。根据不同的硬件、电机需求与控制特性,可定义相对应的参数。亦可进行调试,如:Is 电流 PI 控制器、速度 PI 控制器等,在此仅列出此工程范例相关参数定义。
3) mc_drive_param.h 文档
此文文件主要关于驱动器的相关参数定义,如死区时间、电流检测电阻、电流放大增益…等等。在此仅列出此工程范例相关参数定义如表 6 所示,若使用不同电机驱动板,则需修改相对应的参数。
注[2]:电压与温度关系之近似曲线方程式 V[V]=V0+dV/dT[V/Celsius]*(T-T0)[Celsius]
4) mc_motor_param.h 文档
此文档主要为相关电机参数的宏定义,如极对数、编码器参数、霍尔传感器参数等。在此仅列出此工程范例相关参数,如表 7 所示。
图 6 为 BLDC 反电势、霍尔状态与 MOS 导通状态的关系图。以此图为例,A 相反电势最大且 B 相反电势最小所对应到的电机状态为 4,因此于 OUTPUT_AH_BL_HALL_STATE 参数定义为 4,同理,A 相反电势最大且 C 相反电势最小所对应到的电机状态为 6,因此于OUTPUT_AH_BL_HALL_STATE 参数定义为 6,以此类推将对应的 6 个霍尔状态填入定义后即可配合不同电机输出正确的 PWM 波形。
此图例的 PWM 输出状态为一般下臂无反向输出的闸极驱动器(Gate driver)且上臂 PWM 切换时下臂不开互补的示意图,可以透过修改 mc_lib.h 文档内的定义修改成用户想要输出的模式,六步方波控制的三个范例工程内所采用的为下臂有反向输出且开启互补的模式。
5) mc_hwio.h 文档
此文档主要根据用户的硬件 IO 接口、周边进行宏定义配置。同时也包含 mc_hwio.c 文件的函数声明。此工程范例相关外设配置包含外设 ADC、TMR、USART、EXINT 等配置与中断函数以及 DMA 通道的对应关系如表 8 所示。
6) mc_hwio.c 文档
此文档主要依据用户的硬件周边进行配置。如 TMR、ADC、DMA、GPIO…等等,可根据不同的硬件来进行配置。同时也包含按钮、LED 灯、PWM 开启/关闭等函数。在此仅列出此工程范例相关函数定义如表 9 所示。
7) mc_isr.c 文档
此文档主要为中断函数,包含 ADC、TMR、SYSTICK 等中断。此仅列出此工程范例相关中断函数如表 10 所示。
4 电机控制状态机
4.1 状态机描述
此电机工程范例的状态流程如图 7 中所示的状态机流程图,各个状态机的初始设置由主程序(Main)不断的循环检查,当状态改变时则设置新状态的初始设定。此外,状态机的运行在 Systick Handler 中断函数里,每一微秒运行一次以确保实时检查状态机。在每个状态进行故障检测,一旦发生故障状态机则进入 Error 状态停止驱动以免发生电机或电机驱动板损毁,直到故障被清除电机才能再次运行。
它由以下状态组成:Idle、Safety ready、Running、Free run、I_tune 以及 Error。各个状态的描述如下:
Idle
此为状态机的初始状态,此状态下马达为静止状态,遇警示状况解除后或马达停止也会回到此状态。
Safety ready
于初始状态(Idle)时确认所有参数已被设置、已取得电流 offset 的值,确认电机可以安全被启动的状态。
Running
运转模式,在此模式下马达为运转状态。用户可于 UI 界面实时调整参数(如目标速度、目标电流等)、或下命令停止马达。
Free run
相当于停止模式,在此模式下驱动器将停止输出,马达将由原速度慢慢降为 0,在马达完全停止前将会在这个状态,马达完全停止时则会回到初始模式(Idle)。
I_tune
此为调整电流 PID 控制器参数的模式,在此模式下可通过 UI 界面调整目标电流、电流环之 KP、KI值,将会产生一步阶电流,可经由观察电流响应于此状态调整至适合参数。
Error
当有错误发生时将会跳至这个状态。此电机工程范例各状态的起始状态、结束状态以及切换条件的详细说明如表 11 所示。
5 工程使用说明
5.1 建立连接
在确保完成硬件准备和软件环境准备后,我们可以进行以下操作建立 UI 与控制版的连接。详细电机UI 使用说明请参照 AN0063 文挡。
STEP-1
正确将电机、AT_Link/Jlink、开发板电源接到电机开发板上,将 USART 接口同 USB 线接入 PC。
STEP-2
使用 MDK 编译 demo 工程代码,使用 Jlink 或 AT_Link 下载到开发板的芯片中。
STEP-3
执行程序 ArteryMotorMonitor_V2.0.2.exe(V2.0.2 为软件版本号),在 File -> Open Porject 选项中选择 ArteryMotorMonitor_V2.0.2.atmcx->开启。
STEP-4
点选 Serial Port 更新图标(1.)并选取对应的串口号(2.),选完点选 Open(3.)即可开启串口实时通信。
STEP-5
按下播放键(4.)即可周期性更新 UI 接口的数据以及与目标板通过串口实时通信, 操作步骤如图 8。
Q 轴电流调试
此模式下会产生一个步阶的电流,如图 9,可以调整步阶电流的相关参数,产生步阶电流的目的是为了查看调整 Q 轴电流的 PID 电流环参数后的电流响应。
绘图时Y轴的电流值为转换后的数位值,转换公式如下:
实际电流值(A)=(数位电流值/32767) ∗ 最大电流值( |