【动手学电机驱动】 TI InstaSPIN-FOC(3)Lab03a 测量电压电流漂移量

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 电流环控制


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)电机驱动和控制测试平台

硬件连接与设置的步骤如下:

  1. 对于 F28027F 控制板,拆除 JP1、JP2 跳线帽,由驱动板提供 3.3V 电源。
  2. 对于 F28027F 控制板,将开关 S1 设置为 ON-ON-ON(向上),UART 开关 S4 设置为 OFF(向下)。
  3. 如下图所示,将 DRV8301 驱动板 插入 F28027F 控制板。注意:接线端子插头应朝向USB连接器。
  4. 将三相 PMSM 电机连接到 DRV8301 驱动板的 3-pin 接线端子 J11。电机连接标记为 A、B、C,但可以以任何顺序连接。
  5. 将直流电源连接到 DRV8301 驱动板的 2-pin 接线端子 J2,注意电源正负极不要接反(正极接 PVDD,负极接 GND)。推荐使用 24V/10A 直流稳压电源。
  6. 打开连接到 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 中,以便在今后的实验中直接从用户数据文件加载电机参数,跳过电机校准和识别过程。


猜你喜欢

转载自blog.csdn.net/youcans/article/details/142878565
TI