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(2)Lab01 闪灯实验
LAUNCHXL-F28027F + BOOSTXL-DRV8301 提供了一个完整的电机驱动和控制评估平台,与 TI 公司的 InstaSPIN FOC配合使用,提供无传感器控制解决方案。
本节基于 LAUNCHXL-F28027F + BOOSTXL-DRV8301 电机驱动和控制测试平台,通过第一个实验项目“闪灯”,实现闪烁 LED 并读取 ADC值。通过本项目介绍 MCU 处理器的时钟、GPIO、看门狗和其他外围设备的使用。
推荐从 TI 官网下载 【InstaSPIN 实验项目用户手册】(InstaSPIN Projects and Labs User’s Guide),进行学习。
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. Lab01:闪灯实验
2.1 项目简介
第一个项目“闪灯”实验介绍如何使用 MotorWare软件,如何使用“硬件抽象层”(HAL)对象来设置 2802xF(也适用于 2806xF/M、2805xF/M )和逆变器硬件。
InstaSPIN系列实验中的所有实验项目都建立在本实验的基础上,因此建议先进行这个实验。
MotorWare API 函数用于进行 MCU外设设置逆变器的设置,特别是 HAI对象和 API。
- HAL 对象是控制 MCU 外围设备和逆变器设置的 MotorWare 接口。
- 2802xF 处理器的时钟、GPIO、看门狗和其他外围设备是使用HAL对象和API设置的。
文件和项目位于 MotorWare 目录中,具体取决于用户安装 MotorWare 的目录路径和正在使用的 MCU 型号。
2.2 导入项目
1、打开 TI 的 IDE 软件 CCStudio(安装详见上节)。
2、从 MotorWare(安装详见上节)导入例程项目:
点击:CCS 菜单“Project” – Import CCS Project – Select search-directory,选择例程项目路径。
具体路径取决于 MotorWare 的安装位置和使用的硬件型号。以 MotorWare 安装位置"C:\TI\Motorware" 和使用 MCU 型号 F28027F、驱动板型号 BoostXL-DRV8301 为例,例程的项目路径为:
C:\ti\motorware\motorware_1_01_00_18\sw\solutions\instaspin_foc\boards\boostxldrv8301_revB\f28x\f2802xF\projects
该目录下有十几个项目,可以全部导入。注意不要勾选“Automatically import referenced projects found in same search-directory”、“Copy projects into workspace” 选项框。
如果使用其它型号的 MCU 和驱动板,则参考以上路径规则,选择相应的项目路径。
3、在 CCS 侧边栏 “Project Explorer” 选择本项目 “proj_lab01”,展开项目文件。
4、从 “Project Explorer-proj_lab01” 下找到 “proj_lab01.c” 并打开文件。程序的入口函数 “main(void)” 和中断处理函数 “mainISR(void)” 就在该文件中,如下图所示。
“proj_lab01.c” 的开头声明包含或引用的文件,例如数学库 <math.h>、引用文件 “main.h”,这些包含文件、函数、变量都以高亮方式显示。
用鼠标选中某个高亮显示的包含文件或函数、变量,按 F3 可以自动打开该文件,方便查看。
5、测试硬件连接和目标配置。
从 “Project Explorer-proj_lab01” 下找到 “TMS320F28027_xds100v2.ccxml” 并打开目标配置编辑器窗口,可以创建和修改目标配置文件。
.ccxml 是项目的配置文件。目标配置文件是一个扩展名为 .ccxml 的纯文本 XML 文件,其中包含调试会话的所有必要信息:调试探针的类型、目标板或器件(甚至多个器件),以及(可选)GEL(通用扩展语言)脚本路径,该脚本负责执行器件和/或硬件初始化。
TMS320F28027_xds100v2.ccxml 默认的仿真器(调试探针)的类型为:“XDS 100v2 USB Debug Probe”,目标板或器件(Board or Device)的类型为:“Experimenter’s Kit - Piccolo F28027”,都不需要改变。如果使用其它型号的仿真器或目标板,则在该页面修改相应的设置。
使用 “Test Connection” 可以测试和验证 JTAG 连接。点击 “Test Connection” 按键,将在配置的器件上执行各种低级 JTAG 测试。
结果如下图所示,显示“The JTAG DR Integrity scan-test has succeeded.”,表明硬件连接和目标配置成功。
2.3 调试和运行
Lab01是一个类似于 “Hello World” 程序的快速实验。相应的嵌入式编程代码是闪烁 ControlCARD 上的 LED #2。目标是检查MCU和逆变器设置功能,特别是HAL对象,并确保LED闪烁。
运行步骤如下:
1、USB 连接控制板套件。
将 DRV8301 驱动板 插入 F28027F 控制板(详见”硬件连接“)。
用 USB 线缆 连接 计算机(运行 CCS 的计算机) 与 F28027F 控制板。
计算机发出一声“叮”,控制板上的红色 LED灯亮起。
2、给控制板套件通电。
DRV8301 驱动板接通 DC 24V电源,注意上电前交叉电源正负极不要接反。
上电后上层 DRV8301 驱动板上的黄绿色 LED 灯亮,下层 F28027F 控制板一侧的 4颗 蓝色 LED灯亮。如下图所示。
3、构建(“Build”)项目。
在 CCS “Project Explorer” 选择本项目 “proj_lab01” 激活(Active)后,通过菜单栏 Project – Build Project 构建(“Build”)项目。也可以点击工具栏上的锤子图标 “Build” 进行构建。
在 CCS 的控制台(Console)窗口栏,将显示构建过程,并最终显示 ”**** Build Finished ****“,说明构建项目成功。
**** Build of configuration Flash for project proj_lab01 ****
"C:\\ti\\ccs1240\\ccs\\utils\\bin\\gmake" -k all
Building file: "C:/ti/motorware/motorware_1_01_00_18/sw/solutions/instaspin_foc/src/proj_lab01.c"
Building target: "proj_lab01.out"
Finished building target: "proj_lab01.out"
**** Build Finished ****
构建完成后,控制台(Console)窗口栏显示如下图所示。
4、调试(“Debug”)项目,将程序烧录到 MCU。
通过菜单栏 Run-- Debug 开始调试(“Debug”)项目。也可以点击工具栏上的昆虫图标 “Debug” 开始调试。
“Debug” 过程中,弹出窗口显示调试进程,并将并将.out文件加载到目标(将程序烧录到 MCU)。
弹出窗口最后显示 "Finished“,如下图所示,说明调试完成和加载成功。
进入调试状态后,CCS透视图将自动更改为 “CCS调试”视图布局,如下图所示。
“CCS调试”视图布局如下,上方左侧是 “Debug View”,上方右侧是 “Variables, Expressions and Registers”,中部是 “Source code view”,下方是 “Console”。
5、进入实时模式(Realtime mode)。
点击工具栏上的实时模式图标(Enable silicon realtime mode),进入实时模式。该图标看起来像一个时钟。
点击后如果弹出窗口如下,请选择 “是(Yes)”。
6、执行程序。
基本调试功能位于 Debug 视图顶部的工具栏中。
第 1 个图标是 执行(Resume),开始执行目标内核。第 2 个图标是 暂停(Suspend),停止执行目标内核。第 3 个图标是 断开(Terminate),断开与所有硬件(内核、器件、调试探针)的连接并终止调试状态。
点击工具栏上的 执行(Resume)图标,开始执行目标程序。该图标看起来像一个绿色按键。也可以通过菜单栏 Run-- Resume,或快捷键 F8,开始执行目标程序。
执行程序后,下层 F28027F 控制板一侧的 4颗 蓝色 LED灯,3 颗长亮,1颗闪烁。 这说明程序运行正确。
7、结束运行。
点击工具栏上的 断开(Terminate)图标,断开与所有硬件的连接并终止调试状态。该图标看起来像一个红色方块。也可以通过菜单栏 Run-- Terminate,断开连接并终止调试。
8、关闭电源,拆除 USB 连接。
关闭为 DRV8301 驱动板供电的 DC 24V 电源。
拆下连接 计算机(运行 CCS 的计算机) 与 F28027F 控制板的 USB 线缆 。
3. 修改程序:改变闪灯频率
1、在 CCS 侧边栏 “Project Explorer” 选择本项目 “proj_lab01”,展开项目文件。
2、从 “Project Explorer-proj_lab01” 下找到并打开 “proj_lab01.c” 文件。
程序的入口函数 “main(void)” 和中断处理函数 “mainISR(void)” 就在该文件中。
中断处理函数内容如下:
interrupt void mainISR(void)
{
// toggle status LED
if(++gLEDcnt >= (uint_least32_t)(USER_ISR_FREQ_Hz / LED_BLINK_FREQ_Hz))
{
HAL_toggleLed(halHandle,(GPIO_Number_e)HAL_Gpio_LED2);
gLEDcnt = 0;
}
该函数使用一个计数器 gLEDcnt ,当达到设定的计数值则切换 LED 状态,从而实现 LED 灯闪烁。
修改设定的计数值,就可以改变 LED 灯的闪烁频率。
例如,将设定值修改为 (uint_least32_t)(5*USER_ISR_FREQ_Hz / LED_BLINK_FREQ_Hz),就可以使 LED 灯的闪烁频率减慢为原来的 1/5。
interrupt void mainISR(void)
{
// toggle status LED
if(++gLEDcnt >= (uint_least32_t)(5*USER_ISR_FREQ_Hz / LED_BLINK_FREQ_Hz))
{
HAL_toggleLed(halHandle,(GPIO_Number_e)HAL_Gpio_LED2);
gLEDcnt = 0;
}
类似地,将设定值修改为 (uint_least32_t)(0.5*USER_ISR_FREQ_Hz / LED_BLINK_FREQ_Hz),就可以使 LED 灯的闪烁频率加快为原来的 2倍。
当然,也可以通过修改中断频率或其它方法来实现改变 LED灯闪烁频率,在此不做延申。
4. 程序解读
4.1 软件流程图
4.2 包含文件、变量和函数声明
“proj_lab01.c” 的开头声明包含或引用的文件,例如数学库 <math.h>、引用文件 “main.h”,这些包含文件、变量和函数都以高亮方式显示。
//
// **************************************************************************
// the includes
// system includes
#include <math.h>
// modules
#include "sw/modules/math/src/32b/math.h"
#include "sw/modules/memCopy/src/memCopy.h"
// drivers
// platforms
#include "main.h"
包含文件说明如下:
- main.h : main.c 使用的头文件
- user.h : 用于配置电机、驱动器和系统参数的用户文件
- math.h : 数学库,常见的数学转换、定义和移位
- est.h : FAST ROM 库的函数定义
- hal.h : 设备设置和外围驱动程序。包含 HAL 对象。
全局对象说明如下:
- HAL_Handle : 硬件抽象层对象 (HAL) 的句柄。驱动程序对象包含所有微处理器外设的句柄,并在设置和控制外设时使用。
- USER_Params : 保存 user.h 中的比例因子信息。允许比例因子实时更新。
函数说明如下:
main()
- 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():将逆变器电源开关设置为高阻抗。
mainISR()
- HAL_toggleLed():切换电机逆变器上的 LED。
- HAL_acqAdcInt():确认 ADC 中断,以便再次发生另一个 ADC 中断。
- HAL_readAdcData():读取 Adc 结果寄存器,调整偏移量,并根据 user.h 中的设置缩放值。结构 gAdcData 保存三相电压、三个线电流和一个直流总线电压。
- HAL_writePwmData():将 gPwmData 中的 Q pwm 值转换为 Q0 并将这些值写入 EPWM 比较寄存器。
4.3 中断服务程序 mainISR()
mainISR() 中使用的方法是时间关键的,在运行时使用。在将此ISR集成到代码中时,验证此ISR是否实时运行非常重要。
Lab01 项目的代码将闪烁 LED 并读取 ADC值,最终将是三个电机电流、三个电机电压和一个直流总线值。PWM值也通过HAL_writePwmData()写入逆变器,导致50%的占空比,因为gPwmData{}值在定义时初始化为零。
在 ”3. 修改程序:改变闪灯频率“,我们已经尝试了通过修改计数设定值,来控制闪灯频率。
4.4 调试子系统
调试过程如下图所示,并按以下方式处理:
-
CCS 解析目标配置文件,创建调试配置,使用这两个文件中的信息连接到 JTAG 调试器并与目标中的器件进行通信。
-
建立通信后,CCS 调试器开始通过 GEL 脚本执行一系列硬件初始化命令(如果在目标配置文件中配置了该脚本)。
如果加载可执行文件,CCS 调试器会拆分可执行文件的信息:- 代码和数据小节的内容通过 JTAG 发送并存储在器件/电路板的适当存储位置中。这些代码的放置遵循链接器命令文件中的指令。
- 调试符号保存在主机 PC 上,从而使器件/电路板的存储器地址与工程的源代码相关联。
-
无论是将代码下载到 RAM 还是闪存中,该过程都是相同的。对于基于闪存的器件,内置闪存编程器会自动处理刷写过程。
-
调试器自动在与函数 main() 相对应的器件存储器地址中设置一个断点并运行器件,直至在该断点处中断。
5. 总结
创建HAL对象是为了简化MCU和逆变器的设置。
实验 1 让我们如何使用HAL对象来设置和初始化MCU和逆变器。我们将在此基础上了解如何启用InstaSPIN。
参考文献:
TI, TI Spins Motors, InstaSPIN Projects and Labs User’s Guide, InstaSPIN-FOC & InstaSPIN_MOTION for F2802xF, F2805xF, F2805xM, F2806xMF, Ver 1.0.14