【动手学电机驱动】 TI InstaSPIN-FOC(2)Lab01 闪灯实验

【动手学电机驱动】 TI InstaSPIN-FOC(2)Lab01 闪灯实验

    • 1. 硬件连接与设置
    • 2. Lab01:闪灯实验
      • 2.1 项目简介
      • 2.2 导入项目
      • 2.3 调试和运行
    • 3. 修改程序:改变闪灯频率
    • 4. 程序解读
      • 4.1 软件流程图
      • 4.2 包含文件、变量和函数声明
      • 4.3 中断服务程序 mainISR()
      • 4.4 调试子系统
    • 5. 总结


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 LEDif(++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 LEDif(++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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1562053.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java Mail腾讯企业邮箱或其他邮箱发送邮件失败bug记录

问题出现情况 邮件发送时debug用F8逐步运行可以成功发送邮件&#xff0c;但是用F9或者直接运行程序却发送失败未开启mail的debug模式的报错日志是下面这个&#xff1a;org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is java…

Chainbase :链原生的 Web3 AI 基建设施

“随着 Chainbase 在生态系统和市场方面的进一步拓展&#xff0c;其作为链原生 Web3 AI 基建设施的价值将愈发显著。” 算法、算力和数据是 AI 技术的三大核心要素。实际上&#xff0c;几乎所有的 AI 大模型都在不断革新算法&#xff0c;以确保模型能够跟上行业的发展趋势&…

CUDA Graphs学习与实验

CUDA Graphs学习与实验 一.参考链接二.测试方案三.测试代码 CUDA图&#xff08;CUDA Graphs&#xff09;为CUDA引入了一种全新的工作提交模型。它允许将一系列操作&#xff08;如内核启动&#xff09;以图的形式表示&#xff0c;并通过依赖关系将这些操作连接起来。这种图的定义…

C语言—双链表

一、双向链表的结构 注意&#xff1a;这⾥的“带头”跟前⾯我们说的“头节点”是两个概念&#xff0c;实际前⾯在单链表阶段称呼不严谨&#xff0c;带头链表⾥的头节点&#xff0c;实际为“哨兵位”&#xff0c;哨兵位节点不存储任何有效元素&#xff0c;只是站在这⾥“放哨的”…

【C++】C++的引用

一.引用 1.引用的概念和定义 引用不是新定义⼀个变量&#xff0c;而是给已存在变量取了⼀个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同⼀块内存空间。 类型& 引用别名 引用对象; 2.引用的特征 a.引用在定义时必须初始化 …

Visual Studio--VS安装配置使用教程

Visual Studio Visual Studio 是一款功能强大的开发人员工具&#xff0c;可用于在一个位置完成整个开发周期。 它是一种全面的集成开发环境 (IDE)。对新手特别友好&#xff0c;使用方便&#xff0c;不需要复杂的去配置环境。用它学习很方便。 Studio安装教程 Visual Studio官…

详解前端开发都需要掌握的十个 JavaScript 基本数组函数

假设你正在开发一个复杂的 Web 项目。你的数据来自许多 API&#xff0c;你的工作是高效地处理、过滤和分析这些数据。你的时间很紧张&#xff0c;所以每一行代码都很重要。 这时学习高级 JavaScript 数组方法就会对你有所帮助。 这些函数不仅可以减少代码量&#xff0c;还可以…

阻塞socket 和非阻塞socket的区别(浅显易懂版)

什么是阻塞socket&#xff0c;什么是非阻塞socket。 对于这个问题&#xff0c;我们要先弄清什么是阻塞/非阻塞。 阻塞与非阻塞是对一个文件描述符指定的文件或设备的两种工作方式。 阻塞的意思是指&#xff0c;当试图对该文件描述符进行读写时&#xff0c;如果当时没有东西可…

基于Feign的远程调用

目录 前言 RestTemplate方式调用存在的问题 存在的问题 Feign Feign介绍 Feign的使用步骤 引入依赖 添加注解 编写Feign客户端 使用客户端&#xff08;修改orderService&#xff09; 原代码 修改后 总结 前言 RestTemplate方式调用存在的问题 以前利用RestTempla…

【Unity 100个实用小技巧】 UI分辨率适配

UI分辨率适配 学习实际项目中&#xff0c;分辨率适配的方案&#xff0c;基础版本。 以下适配以720*1680为基准适配 具体操作 Canvas Scaler的Screen Match Model 设置为Match Width Or Height&#xff0c;Match设置为0 这个设置&#xff0c;是以宽为基准进行分辨率适配 其实在…

uniapp__微信小程序使用秋云ucharts折线图双轴

1、子组件 <template><view class"charts-box"><qiun-data-charts type"line":opts"computedOpts":chartData"chartData"/></view> </template><script> export default {props: {chartData: {t…

【优选算法】(第三十五篇)

目录 验证栈序列&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 N叉树的层序遍历&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 验证栈序列&#xff08;medium&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&#xff08;L…

只需5步,就可以使用大语言模型(LLM)打造高效的应用

01 概述 随着人工智能技术的飞速发展&#xff0c;大型语言模型&#xff08;LLM&#xff09;正逐渐成为各个领域的得力助手。从最初的文本理解、生成到翻译&#xff0c;这些模型在自然语言处理&#xff08;NLP&#xff09;中的出色表现&#xff0c;让它们在聊天机器人、虚拟助…

98. UE5 GAS RPG 实现技能眩晕效果

我们在技能伤害基类上面设置了对应的负面效果应用的配置项&#xff0c;用来实现技能的负面效果应用。 在之前实现火球术的负面效果时&#xff0c;我们我们在创建火球时&#xff0c;通过伤害基类上的创建技能配置用于后续应用。 在火球攻击到敌人时&#xff0c;通过函数库书写…

68 Netty

68 Netty 参考资料 【硬核】肝了一月的Netty知识点 概念 Netty 是一个高性能、异步事件驱动的网络应用框架&#xff0c;简化了 Java 网络编程&#xff0c;适用于构建高效、可扩展的网络服务器和客户端。 Netty 是基于 Java NIO 的异步事件驱动的网络应用框架&#xff0c;使…

Premiere半色调动漫风格视频叠加特效素材MOGRT

Premiere Pro 半色调叠加素材视频模板&#xff0c;使用这个半色调效果轻松设置视频或图像的样式。可以使用自定义选项&#xff0c;让工作流程更加高效。 特征&#xff1a; 15个半色调叠加效果。 Adobe Premiere Pro 2023 4K分辨率&#xff08;38402160&#xff09;。 包括视频…

回溯法与迭代法详解:如何从手机数字键盘生成字母组合

在这篇文章中&#xff0c;我们将详细介绍如何基于手机数字键盘的映射&#xff0c;给定一个仅包含数字 2-9 的字符串&#xff0c;输出它能够表示的所有字母组合。这是一个经典的回溯算法问题&#xff0c;适合初学者理解和掌握。 问题描述 给定一个数字字符串&#xff0c;比如 …

TikTok流量不好是为什么?是网络没选对吗?

很多人发现他们的TikTok视频观看量不高&#xff0c;点赞和分享率也低&#xff0c;就会开始怀疑是不是网络选择不当导致了这一问题。虽然网络确实是导致流量不佳的一大原因之一&#xff0c;但也不能忽视其他因素&#xff0c;包括内容质量、时机选择、互动参与等方面。本文将揭示…

桌面运维转网络要做什么准备,高级网工学习路线分享_运维转网络工程师好转岗吗

如果你的船不进来&#xff0c;请游过去。 做过桌面运维的朋友都知道&#xff0c;这个岗位相当于做牛做马。我做桌面运维的时候要修监控门禁&#xff0c;消防报警广播音响&#xff0c;还要懂暖通空调下水管道疏通&#xff0c;电梯保养与维护&#xff0c;我听到有些同行还得会修桌…

数据采集崩溃恢复:保障业务稳定运行的关键技术特性

一、场景描述 在当今信息时代&#xff0c;数据已成为企业核心竞争力的重要组成部分。对于许多企业而言&#xff0c;数据的采集、处理和分析至关重要。然而&#xff0c;在数据采集和处理过程中&#xff0c;系统崩溃或故障是无法避免的现象。如何在数据采集过程中确保数据的完整…