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(5)Lab04 电机力矩闭环控制
- 1. 项目介绍
- 1.1 Lab04 项目介绍
- 2. Lab04 项目实验内容
- 2.1 硬件连接与设置
- 2.2 加载用户数据文件
- 2.3 项目构建与加载
- 2.4 项目运行与调试
- 3. Lab02b 程序解读
- 3.1 程序框图
- 3.2 包含文件、变量和函数声明
- 4. Lab04 项目总结
LAUNCHXL-F28027F + BOOSTXL-DRV8301 提供了一个完整的电机驱动和控制评估平台,与 TI 公司的 InstaSPIN FOC配合使用,提供无传感器控制解决方案。
本节基于 LAUNCHXL-F28027F + BOOSTXL-DRV8301 电机驱动和控制测试平台,介绍 Lab04 实验项目“电流环控制”,即电机力矩闭环控制方法。
推荐从 TI 官网下载 【InstaSPIN 实验项目用户手册】(InstaSPIN Projects and Labs User’s Guide),进行学习。
1. 项目介绍
1.1 Lab04 项目介绍
本实验的力矩控制,将 InstaSPIN FOC 或 InstaSPIN MOTION 框架纯粹用作扭矩控制器。
本项目采用单电流环控制,速度环被禁用(通常速度环路作为控制外环),直接将电流参考值 i q , r e f i_{q,ref} iq,ref 发送到 Iq 电流反馈控制器。
学习目标:
- 如何通过将 InstaSPIN FOC 或 InstaSPIN MOTION 置于用户外部速度控制模式,并直接提供 Iq 参考值来启用直接扭矩命令
- 如何从 FAST 获取扭矩信息
“用户外部速度控制模式” 禁用提供的速度控制器,并将 FOC 控制系统设置为期望 Iq 扭矩命令作为输入。该扭矩指令输入可以由用户提供,也可以是用户提供的速度环控制器的输出(即速度电流双闭环控制,在下一篇实验中介绍)。
2. Lab04 项目实验内容
FOC 的核心是扭矩控制。扭矩控制经常作为控制内环,而将速度控制环路或位置控制环路作为控制外环。添加控制外环后,系统的不稳定更差。因此,在扭矩控制模式下,才能真正判断FAST 算法及其估计和角度跟踪能力。
你可以设计完美的扭矩控制器。但如果给出阻尼不足、振荡的扭矩参考信号,控制系统的整体性能仍然会很差。速度控制系统也掩盖了FAST-FOC系统的真实性能。添加速度控制器后,FAST FOC 系统的总响应降低。
在 Lab04项目中,我们的目的是将 InstaSPIN FOC 置于用户外部速度控制模式,并直接给定 Iq 的参考值来启用扭矩命令。
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 加载用户数据文件
1、打开 IDE 软件 CCStudio,从 MotorWare 导入例程项目,在 CCS 侧边栏 “Project Explorer” 选择本项目 “proj_lab04”。
C:\ti\motorware\motorware_1_01_00_18\sw\solutions\instaspin_foc\boards\boostxldrv8301_revB\f28x\f2802xF\projects
如果使用其它型号的 MCU 和驱动板,则参考以上路径规则,选择相应的项目路径。
2、鼠标选中本项目 “proj_lab04”,右键选择 “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_lab02b” 激活(Active)后,打开 user.c 文件,在文件开头找到声明的包含文件 user.h(以高亮显示)。鼠标移动到高亮的包含文件上,按 F3 就自动打开用户数据文件 user.h。
(1)找到定义电机类型的段落,检查 “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
(2)找到定义电机参数的段落 “#elif (USER_MOTOR == My_Motor)”,检查电机极对数、电机参数的值已修改为电机规格书的参数,或通过参数辨识得到的数值。例如:
#elif (USER_MOTOR == My_Motor)
#define USER_MOTOR_TYPE MOTOR_Type_Pm
#define USER_MOTOR_NUM_POLE_PAIRS (2)
#define USER_MOTOR_Rr (NULL)
#define USER_MOTOR_Rs (0.6958)
#define USER_MOTOR_Ls_d (0.001885)
#define USER_MOTOR_Ls_q (0.001885)
#define USER_MOTOR_RATED_FLUX (0.1518)
#define USER_MOTOR_MAGNETIZING_CURRENT (NULL)
#define USER_MOTOR_RES_EST_CURRENT (0.2)
#define USER_MOTOR_IND_EST_CURRENT (-0.2)
#define USER_MOTOR_MAX_CURRENT (1.0)
#define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0)
说明:电机参数与具体电机有关,仅供参考。电机参数辨识过程,详见 TI InstaSPIN-FOC(4)Lab02b 电机参数辨识。
(3)定义驱动板电压电流偏移量的的段落,检查已修改为测量的偏移值。
//! \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.8387260437)
#define I_B_offset (0.8367524147)
#define I_C_offset (0.8327225447)//! \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.498126924)
#define V_B_offset (0.4988828897)
#define V_C_offset (0.4985800385)
说明:电压电流偏移量与具体驱动控制板有关,仅供参考。电压电流偏移量测试过程,详见 TI InstaSPIN-FOC(3)Lab03a 测量电压电流漂移量。
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_lab04.js”,添加适当的监视窗口变量。
loadJSFile “C:\ti\motorware\motorware_1_01_00_18\sw\solutions\instaspin_foc\src\proj_lab04.js”
7、启用实时调试器。
点击工具栏上的实时模式图标(Enable silicon realtime mode),进入实时模式(Realtime mode)。该图标看起来像一个时钟。
8、执行目标程序。
点击工具栏上的 执行(Resume)图标,开始执行目标程序。该图标看起来像一个绿色按键。也可以通过菜单栏 Run-- Resume,或快捷键 F8,开始执行目标程序。
9、启用连续刷新。
点击工具栏上的 连续刷新(Resume)图标,在监视窗口上启用连续刷新。
2.4 项目运行与调试
10、启动电机。
在监视窗口中,检查 gMotorVars.UserErrorCode 的值:如果有错误则该变量值将显示具体的错误内容以供排查,如果没有错误则该变量值为 USER_ErrorCode_NoError,可以继续运行。
在监视窗口中,先将 “Flag_enableSys” 设为 1(True)驱动控制 使能,然后将 “Flag_Run_Identify” 设为 1(True)电机运行 使能。
10、强制启动程序。
此时 IqRef 值为 0(默认值),电机并没有开始旋转,但电机轴缓慢振荡。这是由于执行 “强制角度” 的强制启动程序。
观察窗口如下图所示:
- Flag_enableSys = 1,驱动控制 使能;
- Flag_Run_Identify = 1,电机运行 使能;
- Flag_EnableUserParams = 1,控制器从 user.h 读取电机参数;
- Flag_EnableForceAngle = 1,控制器执行 “强制角度” 的强制启动程序;
- CtrlState = CTRL_State_Online,CTRL_run 状态机处于 Online 状态;
- IqRef_A = 0.0,默认的电流参考值 IqRef_A 为 0;
- Speed_krpm = 0.0,测量的电机转速为 0;
- Troque_Nm = 0.0,测量的电机转矩为 0;
由于零速度启动时的观测器的反馈不稳定,转子角度和转速信号的估计值精度较差,因此电机很难甚至无法从零速启动。因此设置了 “强制角度” 的强制启动程序,允许 InstaSPIN 在全电机扭矩下从零速度启动。
当电机在 1Hz 以上旋转时,则强制角度关闭,执行真正的闭环控制。强制角度也可以手动关闭。
11、手动改变设定值 IqRef。
(1)在监视窗口中,将 “IqRef_A” 的值修改为 0.1,电机轴缓慢振荡,但电机仍没有开始旋转。观察窗口如下图所示:
(2)将 “IqRef_A” 的值修改为 0.2,电机开始旋转。观察窗口如下图所示:
(3)将 “IqRef_A” 的值修改为 0.25,电机旋转速度更高,直到达到最大转速。观察窗口如下图所示:
由于本实验的控制策略为扭矩控制器,电机空载时,转速将不断增大直到全速(电压限制)。
(4)将 “IqRef_A” 的值修改为 0.5,电机旋转速度仍处于最大转速。观察窗口如下图所示:
Iq 参考值可以设置为高于最大电机电流,但控制器不允许超过 “user.h” 设置中列出的电流。
这是由于本实验的控制策略为扭矩控制器,电机空载时,转速不断增大直到全速(电压限制)。
12、将设定值 IqRef 设为负值。
将设定值 Iqref 设为负值,可以让电机反向旋转运行。
先将 Iqref 设为 0,使电机停止运行,再将 Iqref 设为负值。观察窗口如下图所示: Iqref=-0.2,电机反向旋转。
13、结束运行。
将变量 “Flag_Run_Identify” 设为 0(False),禁止电机运行。将 “Flag_enableSys” 设为 1(True)设为 0(False),禁用驱动控制。
点击工具栏上的 断开(Terminate)图标,断开与所有硬件的连接并终止调试状态。该图标看起来像一个红色方块。也可以通过菜单栏 Run-- Terminate,断开连接并终止调试状态。
14、关闭电源,拆除 USB 连接。
关闭为 DRV8301 驱动板供电的 DC 24V 电源。
拆下连接 计算机(运行 CCS 的计算机) 与 F28027F 控制板的 USB 线缆 。
3. Lab02b 程序解读
3.1 程序框图
本项目的程序框图如下图所示。ROM 中只运行 FAST,InstaSPIN FOC 的其余部分程序在用户RAM 中运行。
在主程序中的轮询(forever loop)中,通过以下代码 从用户输入的安培数(gMotorVars.IqRef_a)转换 得到参考值 Iq_ref 。
_iq iq_ref = _IQmpy(gMotorVars.IqRef_A,_IQ(1.0/USER_IQ_FULL_SCALE_CURRENT_A));
为了在 FOC 控制中设置 Iq 参考,函数 CTRL_setIq_ref_pu()使用以下代码将 Iq 参考值传递给 Iq 电流环 PI控制器作为控制器的设定值。
// Set the Iq reference that use to come out of the PI speed control
CTRL_setIq_ref_pu(handle, iq_ref);
在进行扭矩控制时,还需要完成另一项任务。当电机运行时,控制器需要知道电机将要施加扭矩的方向。函数 CTRL_setSpd_ref_krpm()用于设置电机是顺时针还是逆时针启动。
// set the speed reference so that the forced angle rotates in the correct direction
// for startup.
if(_IQabs(gMotorVars.Speed_krpm) < _IQ(0.01))
{
if(iq_ref < 0)
CTRL_setSpd_ref_krpm(handle,_IQ(-0.01));
else if(iq_ref > 0)
CTRL_setSpd_ref_krpm(handle,_IQ(0.01));
}
另一点需要注意的是在零速穿越期间。在实际速度为零之前,速度参考值的符号不要取错误的方向。为了强调这一点,如下流程图显示,当速度降至10 RPM 以下时,软件会使用 IqRef 的符号设置速度参考值的方向。
3.2 包含文件、变量和函数声明
本项目没有新的包含文件和定义新的全局变量。
在初始化过程中,会调用一个函数来禁用速度环 PI 和 SpinTAC 速度控制器。
- CTRL_setFlag_enableSpeedCtrl(),在该函数的参数中发送错误将导致控制器绕过速度PI控制器,并允许将Iq参考直接发送到Iq PI控制器。
下表列出了实施扭矩控制器所需的主回路中的新函数。
- CTRL_setIq_ref_pu(),以 Iq 电流参考值作为参数,设置 Iq 电流环 PI 控制器的输入。
4. Lab04 项目总结
一些应用只需要扭矩控制器。InstaSPIN可以很容易地将电机控制器设置为速度控制或扭矩控制。
在本实验室中,电机控制器被设置为扭矩控制器。对于FOC系统,q轴电流 Iq 与扭矩直接相关,因此可以通过设置 IqRef 实现对扭矩的控制。