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(7)Lab05b 速度环控制
TI InstaSPIN-FOC(8)Lab07 在线电阻参数设置
【动手学电机驱动】 TI InstaSPIN-FOC(8)Lab07 在线测量定子电阻
LAUNCHXL-F28027F + BOOSTXL-DRV8301 提供了一个完整的电机驱动和控制评估平台,与 TI 公司的 InstaSPIN FOC配合使用,提供无传感器控制解决方案。本节基于 LAUNCHXL-F28027F + BOOSTXL-DRV8301 电机驱动和控制测试平台,介绍 Lab07 实验项目“在线测量定子电阻Rs”。
1. 项目介绍
1.1 Lab07 项目介绍
电机线圈的定子电阻 Rs,会根据线圈(也称为电机绕组)的工作温度而发生剧烈变化。电机在运行中由于多种原因可能导致温度升高,导致电机绕组的电阻增大,例如:线圈电流过大、电机外壳散热不良、操作环境恶劣。这种电阻与温度的关系取决于绕组本身使用的材料。
在本实验中,通过运行电机并启用 Rs Online 功能,来实现定子电阻 Rs 在线测量功能。
学习目标:
- 运行 Rs 在线校准功能。
- 查看电机运行时更新的 Rs 值。
2. Lab07 项目实验内容
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_lab07”。
C:\ti\motorware\motorware_1_01_00_18\sw\solutions\instaspin_foc\boards\boostxldrv8301_revB\f28x\f2802xF\projects
如果使用其它型号的 MCU 和驱动板,则参考以上路径规则,选择相应的项目路径。
2、鼠标选中本项目 “proj_lab07”,右键选择 “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”。
(2)找到定义电机参数的段落 “#elif (USER_MOTOR == My_Motor)”,检查电机极对数、电机参数的值已修改为电机规格书的参数,或通过参数辨识得到的数值。
(3)定义驱动板电压电流偏移量的的段落,检查已修改为测量的偏移值。
4、配置仿真器。
从 “Project Explorer-proj_lab05b” 下找到 “TMS320F28027_xds100v2.ccxml” 并打开目标配置编辑器窗口,可以创建和修改目标配置文件。
TMS320F28027_xds100v2.ccxml 默认的仿真器(调试探针)的类型为:“XDS 100v2 USB Debug Probe”,目标板或器件(Board or Device)的类型为:“Experimenter’s Kit - Piccolo F28027”,都不需要改变。如果使用其它型号的仿真器或目标板,则在该页面修改相应的设置。
3.3 项目构建与加载
5、项目构建(“Build”)。
在 CCS “Project Explorer” 选择本项目 “proj_lab03” 激活(Active)后,通过菜单栏 Project – Build Project 构建(“Build”)项目。也可以点击工具栏上的锤子图标 “Build” 进行构建。
在 CCS 的控制台(Console)窗口栏,将显示构建过程,并最终显示 ”**** Build Finished ****“,说明构建项目成功。
6、项目调试(“Debug”),将程序烧录到 MCU。
注意:在本步骤之前,要USB 连接控制板套件,并给控制板套件通电,否则找不到目标板而加载失败。 相关步骤可以参见上节 “2.1 硬件连接与设置”。
通过菜单栏 Run-- Debug 开始调试(“Debug”)项目。也可以点击工具栏上的昆虫图标 “Debug” 开始调试。
“Debug” 过程中,弹出窗口显示调试进程,并将并将.out文件加载到目标(将程序烧录到 MCU)。 弹出窗口最后显示 "Finished“,说明调试完成和加载成功。
进入调试状态后,CCS透视图将自动变为 “CCS调试”视图布局。
7、加载脚本文件。
通过调用脚本 “proj_lab07.js”,添加适当的监视窗口变量。
loadJSFile “C:\ti\motorware\motorware_1_01_00_18\sw\solutions\instaspin_foc\src\proj_lab07.js”
8、启用实时调试器。
点击工具栏上的实时模式图标(Enable silicon realtime mode),进入实时模式(Realtime mode)。该图标看起来像一个时钟。
9、执行目标程序。
点击工具栏上的 执行(Resume)图标,开始执行目标程序。该图标看起来像一个绿色按键。也可以通过菜单栏 Run-- Resume,或快捷键 F8,开始执行目标程序。
10、启用连续刷新。
点击工具栏上的 连续刷新(Resume)图标,在监视窗口上启用连续刷新。
3.4 项目运行与调试
11、启动电机。
在监视窗口中,检查 gMotorVars.UserErrorCode 的值:如果有错误则该变量值将显示具体的错误内容以供排查,如果没有错误则该变量值为 USER_ErrorCode_NoError,可以继续运行。
在监视窗口中,先将 “Flag_enableSys” 设为 1(True)驱动控制 使能,然后将 “Flag_Run_Identify” 设为 1(True)电机运行 使能。电机开始自动测量定子电阻 Rs。
在监视窗口中观察 gMotorVars.Rs_Ohm 和 gMotorVars.RsOnLine_Ohm 的变化。可以看到,Rs 和 Rs Online 的值相同,并趋于稳定,表明完成了在线测量定子电阻。
14、结束运行。
将变量 “Flag_Run_Identify” 设为 0(False),禁止电机运行。将 “Flag_enableSys” 设为 0(False),禁用驱动控制。
点击工具栏上的 断开(Terminate)图标,断开与所有硬件的连接并终止调试状态。该图标看起来像一个红色方块。也可以通过菜单栏 Run-- Terminate,断开连接并终止调试状态。
15、关闭电源,拆除 USB 连接。
关闭为 DRV8301 驱动板供电的 DC 24V 电源。
拆下连接 计算机(运行 CCS 的计算机) 与 F28027F 控制板的 USB 线缆 。
4. Lab07 程序解读
4.1 包含文件、变量和函数声明
本项目没有新的包含文件和定义新的全局变量。
以下函数是本试验项目涉及的新函数。这些函数都绑定在 runRsOnLine() 函数中,由主循环(main forever loop)调用。该函数包含以下估计器函数:
- EST_getState,获取估计器状态,以确保在启用 RsOnLine 重新校准之前估计器正在运行。
- EST_setFlage_enableRsOnLine,启用 RsOnLine 功能。生成一个新的可变 Id 引用来重新校准Rs。
- EST_setRsOnLineId_mag_pu,用于设置 Id 引用中要生成的电流的缩放单位。
- EST_setFlag_updateRs,用于设置估计器使用Rs在线值。建议仅在Rs在线值稳定时启用。
- EST_setRsOnLineId_pu,用于在电机不运行时清除累积的参考 Id。
- EST_setRsOnLine_pu,用于将Rs在线值初始化为零。
- EST_setRsOnLine_qFmt,用 Rs Q-Format 的值初始化 RsOnline Q-Format 的值。
- EST_getRs_qFmt,Rs 的 Q Format,用于在线初始化 Rs的Q-Format。
4.2 程序结构
以下框图显示了InstaSPIN 的程序结构,并以红色显示了启用 Rs Online 的函数调用。此外,红色表示来自 FAST 的 Id 引用,该引用允许 Rs Online 在启用时工作。
在 Lab07 项目中的状态机如下图所示,以允许从 forever loop 中进入 Rs Online 功能。
4.3 程序运行
构建proj_lab07,连接到目标并加载.out文件。
- 通过调用脚本“proj_lab07.js”添加相应的监视窗口变量。
- 启用实时调试器。
- 单击运行按钮。
- 在监视窗口上启用连续刷新。
一旦电机开始运行,电流就会看起来好像有低频分量。
这意味着 Rs Online 正在运行,Id 参考值正在被算法修改。
在 Rs Online 运行时,示波器的显示如下图所示。此时 Rs Online 的最大振幅为 0.5A。
- 在监视窗口,将变量 gMotorVars.RsOnLineCurrent_A 修改为 1.0 (Q-Value24),来改变测量 Rs Online 所用的最大振幅。
示波器的显示如下图所示,此时 Rs Online 的最大振幅为 1.0A。
- 完成实验后,将gMotorVars.Flag_Run_Identify 标志设为 0,以关闭电机。
4.3 例程分析
在程序 Proj_lab07.c 的主函数 main() 中的轮循逻辑(forever loop)中,当驱动控制使能时,运行 runRsOnLine() 程序在线测量定子电阻 Rs:
void main(void)
{
。。。
for(;;)
{
// Waiting for enable system flag to be set
while(!(gMotorVars.Flag_enableSys));
// Enable the Library internal PI. Iq is referenced by the speed PI now
CTRL_setFlag_enableSpeedCtrl(ctrlHandle, true);
// loop while the enable system flag is true
while(gMotorVars.Flag_enableSys)
{
// enable/disable the use of motor parameters being loaded from user.h
CTRL_setFlag_enableUserMotorParams(ctrlHandle,gMotorVars.Flag_enableUserParams);
// enable/disable Rs recalibration during motor startup
EST_setFlag_enableRsRecalc(obj->estHandle,gMotorVars.Flag_enableRsRecalc);
// enable/disable automatic calculation of bias values
CTRL_setFlag_enableOffset(ctrlHandle,gMotorVars.Flag_enableOffsetcalc);
。。。
// run Rs online
runRsOnLine(ctrlHandle);
// update CPU usage
updateCPUusage();
} // end of while(gFlag_enableSys) loop
} // end of for(;;) loop
。。。
} // end of main() function
runRsOnLine() 程序的内容如下:
void runRsOnLine(CTRL_Handle handle)
{
CTRL_Obj *obj = (CTRL_Obj *)handle;
// execute Rs OnLine code
if(gMotorVars.Flag_Run_Identify == true)
{
if(EST_getState(obj->estHandle) == EST_State_OnLine)
{
float_t RsError_Ohm = gMotorVars.RsOnLine_Ohm - gMotorVars.Rs_Ohm;
EST_setFlag_enableRsOnLine(obj->estHandle,true);
EST_setRsOnLineId_mag_pu(obj->estHandle,_IQmpy(gMotorVars.RsOnLineCurrent_A,_IQ(1.0/USER_IQ_FULL_SCALE_CURRENT_A)));
if(abs(RsError_Ohm) < (gMotorVars.Rs_Ohm * 0.05))
{
EST_setFlag_updateRs(obj->estHandle,true);
}
}
else
{
EST_setRsOnLineId_mag_pu(obj->estHandle,_IQ(0.0));
EST_setRsOnLineId_pu(obj->estHandle,_IQ(0.0));
EST_setRsOnLine_pu(obj->estHandle, EST_getRs_pu(obj->estHandle));
EST_setFlag_enableRsOnLine(obj->estHandle,false);
EST_setFlag_updateRs(obj->estHandle,false);
EST_setRsOnLine_qFmt(obj->estHandle,EST_getRs_qFmt(obj->estHandle));
}
}
return;
} // end of runRsOnLine() function
5. Lab07 项目总结
在很多应用中,电机发热的温升会导致电机中的定子电阻发生变化。
本项目介绍 InstaSPIN 的 Rs Online 功能。通过 Rs Online 功能,电机定子电阻 Rs 可以在电机运行时更新。如果电阻值因温度变化而上升或下降,可以实时更新 Rs在线值供估计器使用。
推荐从 TI 官网下载 【InstaSPIN 实验项目用户手册】(InstaSPIN Projects and Labs User’s Guide),进行学习。