TI InstaSPIN-FOC(1)电机驱动和控制测试平台
TI InstaSPIN-FOC(2)Lab01 闪灯实验
TI InstaSPIN-FOC(3)Lab03a 测量电压电流漂移量
TI InstaSPIN-FOC(4)Lab02b 电机参数辨识
TI InstaSPIN-FOC(5)Lab04 力矩控制
TI InstaSPIN-FOC(6)Lab05a 电流环控制
【动手学电机驱动】 TI InstaSPIN-FOC(3)Lab03a 测量电压电流漂移量
LAUNCHXL-F28027F + BOOSTXL-DRV8301 提供了一个完整的电机驱动和控制评估平台,与 TI 公司的 InstaSPIN FOC配合使用,提供无传感器控制解决方案。
本节基于 LAUNCHXL-F28027F + BOOSTXL-DRV8301 电机驱动和控制测试平台,介绍 Lab03b 实验项目“测量电压电流漂移值”,实现跳过自动校准并使用自己的电流和电压偏移继续减少启动时间。
推荐从 TI 官网下载 【InstaSPIN 实验项目用户手册】(InstaSPIN Projects and Labs User’s Guide),进行学习。
1. Lab03a 项目介绍
Lab03a 项目对电压电流的偏移量进行自动校准,测量并记录电流和电压反馈电路的偏移量,将测量的偏移量存储在 user.h 文件中。以后就可以跳过自动校准,减少了启动电机所需的时间。
默认情况下,当 InstaSPIN 启动时,会立即对电流和电压偏移量进行自动校准,并测量并记录电流和电压反馈电路的偏移,在运行时从ADC测量值中减去这些偏移。
在电机和驱动器正常运行期间,这些偏移量变化不大。如果已知电路板偏移,则不需要在启动时进行自动校准。本实验测量电压电流漂移量,将其写入 user.h文件中。以后就可以跳过偏移量自动校准过程,以减少启动电机所需的时间。
学习目标:
- 将电流和电压偏移写入HAL对象,以减少电机启动前的校准时间。
- 绕过Rs精细重新估计(也称为Rs重新校准),这也减少了电机启动前的校准时间。
背景:
Lab03a 添加了使用user.h文件中记录的电流和电压偏移的函数调用。
user.h 用于保存缩放因子、电机参数和逆变器参数,以便为任何电机控制系统定制 InstaSPIN。下图显示了代码中添加新内容的位置。
2. Lab03a 项目实验内容
2.1 硬件连接与设置
本项目使用 LAUNCHXL-F28027F + BOOSTXL-DRV8301 电机驱动和控制测试平台,相关的软件安装和配置,详见上节 【动手学电机驱动】 TI InstaSPIN-FOC(1)电机驱动和控制测试平台。
硬件连接与设置的步骤如下:
- 对于 F28027F 控制板,拆除 JP1、JP2 跳线帽,由驱动板提供 3.3V 电源。
- 对于 F28027F 控制板,将开关 S1 设置为 ON-ON-ON(向上),UART 开关 S4 设置为 OFF(向下)。
- 如下图所示,将 DRV8301 驱动板 插入 F28027F 控制板。注意:接线端子插头应朝向USB连接器。
- 将三相 PMSM 电机连接到 DRV8301 驱动板的 3-pin 接线端子 J11。电机连接标记为 A、B、C,但可以以任何顺序连接。
- 将直流电源连接到 DRV8301 驱动板的 2-pin 接线端子 J2,注意电源正负极不要接反(正极接 PVDD,负极接 GND)。推荐使用 24V/10A 直流稳压电源。
- 打开连接到 DRV8301 驱动板的直流稳压电源。
2.2 修改用户数据文件 user.h
1、打开 IDE 软件 CCStudio,从 MotorWare 导入例程项目,在 CCS 侧边栏 “Project Explorer” 选择本项目 “proj_lab03a”。
C:\ti\motorware\motorware_1_01_00_18\sw\solutions\instaspin_foc\boards\boostxldrv8301_revB\f28x\f2802xF\projects
如果使用其它型号的 MCU 和驱动板,则参考以上路径规则,选择相应的项目路径。
2、鼠标选中本项目 “proj_lab03a”,右键选择 “Properties” 打开属性窗口,添加包含文件 user.h:
Build – C2000 Compiler – Include Options – Add dir to #include search path (–include_path, -I)
添加 user.h 文件的路径:
C:\ti\motorware\motorware_1_01_00_18\sw\modules\hal\boards\boostxldrv8301_revB\f28x\f2802xF\src
注意:如果没有正确导入 user.h,构建项目或编译时将会报错。
3、修改用户数据文件 user.h。
在 CCS “Project Explorer” 选择本项目 “proj_lab03” 激活(Active)后,打开 user.c 文件,在文件开头找到声明的包含文件 user.h(以高亮显示)。鼠标移动到高亮的包含文件上,按 F3 就自动打开用户数据文件 user.h。
找到定义电机类型的段落,将 “USER_MOTOR” 定义为 “My_Motor”,内容如下:
//! \brief Uncomment the motor which should be included at compile
//! \brief These motor ID settings and motor parameters are then available to be used by the control system
//! \brief Once your ideal settings and parameters are identified update the motor section here so it is available in the binary code
#define USER_MOTOR My_Motor
保存修改的用户数据文件 user.h。
2.3 项目构建与加载
4、项目构建(“Build”)。
在 CCS “Project Explorer” 选择本项目 “proj_lab03” 激活(Active)后,通过菜单栏 Project – Build Project 构建(“Build”)项目。也可以点击工具栏上的锤子图标 “Build” 进行构建。
在 CCS 的控制台(Console)窗口栏,将显示构建过程,并最终显示 ”**** Build Finished ****“,说明构建项目成功。
5、项目调试(“Debug”),将程序烧录到 MCU。
注意:在本步骤之前,要USB 连接控制板套件,并给控制板套件通电,否则找不到目标板而加载失败。 相关步骤可以参见上节 “2.1 硬件连接与设置”。
通过菜单栏 Run-- Debug 开始调试(“Debug”)项目。也可以点击工具栏上的昆虫图标 “Debug” 开始调试。
“Debug” 过程中,弹出窗口显示调试进程,并将并将.out文件加载到目标(将程序烧录到 MCU)。 弹出窗口最后显示 "Finished“,说明调试完成和加载成功。
进入调试状态后,CCS透视图将自动变为 “CCS调试”视图布局,如下图所示。
6、加载脚本文件。
通过调用脚本 “proj_lab03a.js”,添加适当的监视窗口变量。
loadJSFile “C:\ti\motorware\motorware_1_01_00_18\sw\solutions\instaspin_foc\src\proj_lab03a.js”
在监视窗口 Expressions,添加结构体 hal。
7、启用实时调试器。
点击工具栏上的实时模式图标(Enable silicon realtime mode),进入实时模式(Realtime mode)。该图标看起来像一个时钟。
8、执行目标程序。
点击工具栏上的 执行(Resume)图标,开始执行目标程序。该图标看起来像一个绿色按键。也可以通过菜单栏 Run-- Resume,或快捷键 F8,开始执行目标程序。
9、启用连续刷新。
点击工具栏上的 连续刷新(Resume)图标,在监视窗口上启用连续刷新。
此时,观察窗口如下图所示。检查数值格式正确,例如 gMotorVars.I_bias 数组值采用 Q24格式(Q-Value(24))。注意启动前的偏差值应为 0.0。
2.4 项目运行与调试
在开始运行调试之前,我们先介绍这个实验要做什么以及要观察的变量。
我们将 “Flag_enableSys” 和 “Flag_Run_Identify” 设置为 真(True),程序将进行:
- 测量电压和电流偏移(偏置)
- 重新估算电机的Rs值
接下来,将 “Flag_Run_Identify” 设置为 真(True),观察偏差值如何更新,然后立即重新估计Rs_Ohm值。
10、启动偏移量测量和Rs校准。
(1)将 gMotorVars.Flag_enableUserParams 的值设为 1(True),这是实验的默认值。
(2)在监视窗口中,将 “Flag_enableSys” 设为 1(True),然后将“Flag_Run_Identify” 设为 1(True)。
观察窗口将如下图所示。
程序立即执行测量电压和电流偏移量和重新校准 Rs。
偏置值更新和Rs重新校准后的观察窗口如下图所示。注意:gMotorVars.I_bias、gMotorVars.V_bias 和 gMotorVars.Rs_Ohm 的值都发生了变化。
11、更新用户数据文件 user.h。
将测量的电压电流偏移量 I_bias 和 V_bias 的值从监视窗口复制并粘贴到 user.h 文件中相应的参数定义语句 #define 中,如下所示。
从监视窗口复制的数据为:
gMotorVars.I_bias struct MATH_vec3_ {
value=[14151927,14116850,13927398]} (Q-Value(24)) 0x0000009E@Data
value long[3] [14151927,14116850,13927398] (Q-Value(24)) 0x0000009E@Data
[0] long 0.8435205817 (Q-Value(24)) 0x0000009E@Data
[1] long 0.8414298296 (Q-Value(24)) 0x000000A0@Data
[2] long 0.8301376104 (Q-Value(24)) 0x000000A2@Data
gMotorVars.V_bias struct MATH_vec3_ {
value=[8273611,8256195,8228107]} (Q-Value(24)) 0x000000A4@Data
value long[3] [8273611,8256195,8228107] (Q-Value(24)) 0x000000A4@Data
[0] long 0.4931456447 (Q-Value(24)) 0x000000A4@Data
[1] long 0.4921075702 (Q-Value(24)) 0x000000A6@Data
[2] long 0.4904333949 (Q-Value(24)) 0x000000A8@Data
由此修改用户数据文件 user.h 中电压、电流的偏移量为:
//! \brief ADC current offsets for A, B, and C phases
//! \brief One-time hardware dependent, though the calibration can be done at run-time as well
//! \brief After initial board calibration these values should be updated for your specific hardware so they are available after compile in the binary to be loaded to the controller
#define I_A_offset (0.8435205817)
#define I_B_offset (0.8414298296)
#define I_C_offset (0.8301376104)
//! \brief ADC voltage offsets for A, B, and C phases
//! \brief One-time hardware dependent, though the calibration can be done at run-time as well
//! \brief After initial board calibration these values should be updated for your specific hardware so they are available after compile in the binary to be loaded to the controller
#define V_A_offset (0.4931456447)
#define V_B_offset (0.4921075702)
#define V_C_offset (0.4921075702)
12、结束运行。
将变量 “Flag_Run_Identify” 设为 0(False),将 “Flag_enableSys” 设为 0(False),停止运行校准程序。
点击工具栏上的 断开(Terminate)图标,断开与所有硬件的连接并终止调试状态。该图标看起来像一个红色方块。也可以通过菜单栏 Run-- Terminate,断开连接并终止调试状态。
13、关闭电源,拆除 USB 连接。
关闭为 DRV8301 驱动板供电的 DC 24V 电源。
拆下连接 计算机(运行 CCS 的计算机) 与 F28027F 控制板的 USB 线缆 。
3. Lab03a 程序解读
3.1 软件流程图
3.2 包含文件、变量和函数声明
“proj_lab03a.c” 的开头声明包含或引用的文件,例如数学库 <math.h>、引用文件 “main.h”,这些包含文件、变量和函数都以高亮方式显示。
//! \defgroup PROJ_LAB03a PROJ_LAB03a
//! \defgroup PROJ_LAB03a_OVERVIEW Project Overview
//! Saving your motor parameters and loading from user.h
// **************************************************************************
// the includes
// system includes
#include <math.h>
#include "main.h"
#ifdef FLASH
#pragma CODE_SECTION(mainISR,"ramfuncs");
#endif
// Include header files used in the main function
// **************************************************************************
// the defines
#define LED_BLINK_FREQ_Hz 5
函数说明如下:
-
HAL_init():初始化微控制器外设的所有句柄。返回 HAL 对象的句柄。
-
USER_setParams():将文件user.h中的所有比例因子复制到 USER_Params 定义的结构中。
-
HAL_setParams():设置微控制器外设。创建 ADC 电压和电流转换的所有比例因子。设置电压和电流测量的初始偏移值。
-
HAL_initIntVectorTable():将 ISR 指向函数 mainISR。
-
HAL_enableAdcInts():启用 PIE 和 CPU 中的 ADC 中断。允许从 ADC 外设发送中断。
-
HAL_enableGlobalInts():启用全局中断。
-
HAL_disablePwm():将逆变器电源开关设置为高阻抗。
-
HAL_getBias():返回逆变器电流和电压电路中的电流和电压偏移值。
-
HAL_setBias():手动设置逆变器电流和电压电路中的电流和电压偏移值。
-
CTRL_initCtrl():函数的参数为true时,控制器从user.h读取电机参数,而不执行电机调试。
-
CTRL_setParams():返回驱动板的电流和电压偏移值。
-
CTRL_run():实现了面向字段的控制。CTRL_run有三个部分:CTRL_runOffline、CTRL_runOnline和CTRL_runOnlineUser。
-
CTRL_setup():负责更新CTRL状态机,并且必须以与CTRL_run()相同的时序调用。
-
CTRL_setFlag_enableOffset():函数的参数为false时,控制器绕过偏移校准。
-
CTRL_setFlag_enableUserMotorParams():函数的参数为true时,控制器从user.h读取电机参数,而不执行电机调试。
4. Lab03a 项目总结
本实验展示了如何测量电流和电压偏量、读取并复制到 用户数据文件 user.h 中,以便在今后的实验中直接从用户数据文件加载电机参数,跳过电机校准和识别过程。