TMS320F280049C 学习笔记22 SFRA part 2 模块摘要

2023-11-21 00:20

本文主要是介绍TMS320F280049C 学习笔记22 SFRA part 2 模块摘要,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • SFRA库函数摘要
  • 工作原理
  • 标幺值形式
  • 浮点数(单精度)
    • 1. 对象定义
    • 2. 模块接口定义
    • 3. 将SFRA库添加到项目中
    • 4. 添加对SFRA GUI的支持
  • 频率响应输入及补偿设计脚本
  • SFRA GUI选项和如何运行

对应原文的第三章

SFRA库函数摘要

SFRA库由一些模块组成,这些模块允许用户在变换器中运行SFRA。表2列出了SFRA库中存在的模块以及SFRA库的每个指令集变量的执行周期数。
在这里插入图片描述
上表中数字是SFRA库函数使用的存储空间,用于存储频率响应数据的内存不包括在内,因为这是由用户指定的,并且取决于用户希望运行SFRA的频率点的数量。(下面这句不会翻译……)当正在进行扫描并处于最恶劣的情况时,将报告注入和采集的数目。如果没有进行扫描,程序将消耗明显较少的周期。
注意:

  • SFRA库是不可重复载入的(在一个特定的项目中仅支持一个SFRA库实例)。
  • 除非另有说明,否则报告的循环是针对运行中的最大/最坏情况路径。报告的周期包括指向例程的分支和返回到分支之后的下一条指令。在分支之前在堆栈上传递参数所用的周期不在此数字中计算,因为它可能因程序中的相邻代码而异。
  • 对于浮点库,不包括执行三角运算的RTS库调用的内存。
  • TMU提供额外的加速,提高了后台循环的性能。

工作原理

SFRA基于小信号正弦注入原理。如图3所示,在控制器的参考值上注入一个小信号,并计算反馈和控制器输出的频率响应,这提供了闭环系统的主回路频率响应和开环频率响应信息。
在这里插入图片描述

标幺值形式

SFRA库支持单精度浮点运算,标幺值通常用于控制程序中的变量,并由库使用。标幺值是通过将当前读数除以可以读取的最大值来获得的。例如,如果电压检测最大值为20 V,瞬时读数为5V,则标幺值为5/20=0.25。

浮点数(单精度)

以下说明适用于单精度浮点版本的SFRA库。这个库可以运行在任何具有单精度浮点单元的c2000 MCU上。下面的说明也适用于TMU版本的库,唯一的区别是TMU在SFRA运行中提供循环加速和更高的精度。

1. 对象定义

SFRA库定义了基于浮点的SFRA结构体,如下所述:

typedef struct{
float32_t *h_magVect; //!< 主回路幅值向量 Plant Mag SFRA Vector
float32_t *h_phaseVect; //!< 主回路相角向量 Plant Phase SFRA Vector
float32_t *gh_magVect; //!< 开环幅值向量 Open Loop Mag SFRA Vector
float32_t *gh_phaseVect; //!< 开环相角向量 Open Loop Phase SFRA Vector
float32_t *cl_magVect; //!< 闭环幅值向量 Closed Loop Mag SFRA Vector
float32_t *cl_phaseVect; //!< 闭环相角向量 Closed Loop Phase SFRA Vector
float32_t *freqVect; //!< 频率向量 Frequency Vector
float32_t amplitude; //!< 注入幅值 Injection Amplitude
float32_t isrFreq; //!< SFRA中断频率 SFRA ISR frequency
float32_t freqStart; //!< SFRA扫频起始频率 Start frequency of SFRA sweep
float32_t freqStep; //!< 频点对数间距(可选) Log space between frequency points (optional)
int16_t start; //!< SFRA启动指令 Command to start SFRA
int16_t state; //!< SFRA状态 State of SFRA
int16_t status; //!< SFRA当前状态 Status of SFRA
int16_t vecLength; //!< SFRA中的点数 No. of Points in the SFRA
int16_t freqIndex; //!< 频率向量索引 Index of the frequency vector
int16_t storeH; //!< H向量是否存储的标志位 Flag to indicate if H vector is stored
int16_t storeGH; //!< GH向量是否存储的标志位 Flag to indicate if GH vector is stored
int16_t storeCL; //!< CL向量是否存储的标志位 Flag to indicate if CL vector is stored
int16_t speed; //!< 扫频的速度 variable to change the speed of the sweep
}SFRA_F32;

2. 模块接口定义

在这里插入图片描述在这里插入图片描述

3. 将SFRA库添加到项目中

  1. 在要运行SFRA的项目的源代码中包括SFRA库。
#include “sfra_f32.h”

在项目属性下的包含路径中添加SFRA库 Project Properties → Build → C2000 Compiler →
Include Options.
在这里插入图片描述

  • 确切的位置可能因安装SFRA的位置和项目使用的其他库而异。
  • 必须包含FastRTS库。有关详细信息,请参阅FastRTS库文档,位于:<sdk_install_path>\C2000Ware\libraries\math\FPUfastRTS\c28

链接SFRA库:
在这里插入图片描述

  1. 添加SFRA的宏定义。SFRA_ISR_FREQ是SFRA中断服务程序的频率,SFRA_FREQ_START是SFRA分析的起始频率,SFRA_FREQ_LENGTH是SFRA分析的点数(长度),SFRA_FREQ_STEP_MULTIPLY是扫频的步长,SFRA分析的结束频率取决于起始频率,长度和步长。
#define SFRA_ISR_FREQ CONTROL_ISR_FREQUENCY
#define SFRA_FREQ_START 2
//
// SFRA step Multiply = 10^(1/No of steps per decade(40))
//
#define SFRA_FREQ_STEP_MULTIPLY (float32_t)1.105
#define SFRA_AMPLITUDE (float32_t)0.005
#define SFRA_FREQ_LENGTH 100
  1. 为SFRA数据存储定义SFRA_F32对象和数组。对于非TMU版本的库,为FPUsinTable添加一个extern来消除编译器警告。
SFRA_F32 sfra1;
float32_t plantMagVect[SFRA_FREQ_LENGTH];
float32_t plantPhaseVect[SFRA_FREQ_LENGTH];
float32_t olMagVect[SFRA_FREQ_LENGTH];
float32_t olPhaseVect[SFRA_FREQ_LENGTH];
float32_t clMagVect[SFRA_FREQ_LENGTH];
float32_t clPhaseVect[SFRA_FREQ_LENGTH];
float32_t freqVect[SFRA_FREQ_LENGTH];
//
//extern to access tables in ROM
//
extern long FPUsinTable[];
  1. SFRA模块的测试通过以下程序执行。这段程序需要在调用SFRA的ISR之前运行,为未存储的数组/向量传递NULL。
//
//Resets the internal data of sfra module to zero
//
SFRA_F32_reset(&sfra1);
//
//Configures the SFRA module
//
SFRA_F32_config(&sfra1,
SFRA_ISR_FREQ,
SFRA_AMPLITUDE,
SFRA_FREQ_LENGTH,
SFRA_FREQ_START,
SFRA_FREQ_STEP_MULTIPLY,
plantMagVect,
plantPhaseVect,
olMagVect,
olPhaseVect,
clMagVect,
clPhaseVect
freqVect);
//
//Resets the response arrays to all zeroes
//
SFRA_F32_resetFreqRespArray(&sfra1);//
// Initializes the frequency response array ,
// The first element is SFRA_FREQ_START
// The subsequent elements are freqVect[n-1]*SFRA_FREQ_STEP_MULTIPLY
// This enables placing a fixed number of frequency points
// between a decade of frequency.
// The below routine can be substituted by a routine that sets
// the frequency points arbitrarily as needed.
//
SFRA_F32_initFreqArrayWithLogSteps(&sfra1,
SFRA_FREQ_START,
SFRA_FREQ_STEP_MULTIPLY);

尽管在上面的代码中,数组是用对数阶跃频率初始化的,但是SFRA与此无关。频率阵列初始化代码可以根据应用程序的需要替换为任何其他代码。

  1. 使用模块,在补偿器输入和输出附近将代码添加到ISR以调用SFRA,如下所示:
    a、 在闭环系统中使用SFRA来获得环路增益(GH)和主回路(H)频率响应:
interrupt void PWM_ISR(void)
{.
//
// Read ADC and computer Fbk Value
//
Fdbk = (float32)Vout1R/(4096.0);
//
// Add FRA injection into the reference of the controller
//
Ref = SFRA_F32_inject(Vout1SetSlewed);
//
// Call the controller
//
Out=DCL_PI_C1(&dcl_obj,Ref,Fdbk);
//
// Update PWM value
//
EPwm1Regs.CMPA.half.CMPA = ((long)(BUCK_PWM_PERIOD))*Out;
SFRA_F32_collect(&Out,&Fdbk);}

b、 在开环系统中使用SFRA获得主回路(H)频率响应:

interrupt void PWM_ISR(void)
{.
//
// Read ADC and computer Fbk Value
//
Vout1_Read = (float32)Vout1R/(4096.0);
//
// Add SFRA injection into the duty cycle for the open loop converter
//
Duty_pu=SFRA_F32_inject(Duty_pu_DC);
//
// Update PWM value
//
EPwm1Regs.CMPA.half.CMPA=((long)(BUCK_PWM_PERIOD))* Duty_pu;
SFRA_F32_collect(&Duty_pu,&Vout1_Read);..
}
  1. 后台任务:在慢速任务中调用后台函数。
SFRA_F32_runBackgroundTask(&sfra1);
  1. 更改链接器命令文件(*.CMD):当从FLASH运行时为了获得更佳性能,注入和采集操作需要运行在RAM中。以下是对CMD文件的更改和添加,以实现SFRA库的包含和最佳性能。
.
ramfuncs : LOAD = FLASHD,
RUN = RAML0L1,
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0
{
--library=sfra_f32_coff.lib<SFRA_F32_inject.obj>
--library=sfra_f32_coff.lib<SFRA_F32_collect.obj>
}.
SFRA_F32_Data : > dataRAM1, PAGE = 1
  1. 还要确保数学表在ROM中位置定义正确。对于没有TMU的器件,这些位置在器件command文件中定义。请注意,以下位置适用于F28069。
/* FPU Math Tables in Boot ROM */
FPUTABLES : origin = 0x3FD860, length = 0x0006A0.
/* Allocate FPU math areas: */
FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD
  1. 对于具有TMU数学表不在ROM中的器件,必须分配给内存位置以避免链接器警告:
FPUmathTables : > FLASH1, PAGE =1

4. 添加对SFRA GUI的支持

添加对SFRA GUI的支持需要对CCS工程做一些修改。

  1. 在工程中添加“sfra_gui_scicomms_driverlib.c”。这可以在“工程”窗口中完成,方法是右键单击您的工程并选择“将文件添加到项目”,然后浏览到< sfra-installpath >/gui/source。
  2. 在项目的包含路径中添加“sfra_gui_scicomms_driverlib.h”。文件位于< sfra-installpath >/gui/include。
  3. 调用SFRA_GUI_config函数。连接时,GUI可以反转LED,如果使用此功能,则必须将其他配置参数传递给GUI配置例程,否则在这些参数中传递零。F28004x控制卡上使用的典型定义如下所示。如果硬件需要更改,请更改它们。目前,SFRA GUI支持绘制两个矢量,为绘图选项传递一个“1”表示主回路和开环矢量,传递2’绘制闭环和主回路传递函数。
#define SFRA_GUI_SCI_BASE SCIA_BASE
#define SFRA_GUI_VBUS_CLK 50000000
#define SFRA_GUI_SCI_BAUDRATE 57600
#define SFRA_GUI_SCIRX_GPIO 28
#define SFRA_GUI_SCITX_GPIO 29
#define SFRA_GUI_SCIRX_GPIO_PIN_CONFIG GPIO_28_SCIRXDA
#define SFRA_GUI_SCITX_GPIO_PIN_CONFIG GPIO_29_SCITXDA
//
// if the following #define is set to 1 SFRA GUI indicates status on an LED
// otherwise LED code is ignored
//
#define SFRA_GUI_LED_INDICATOR 1
#define SFRA_GUI_LED_GPIO 31
#define SFRA_GUI_LED_GPIO_PIN_CONFIG GPIO_31_GPIO31
.....
//
// configures the SCI channel for communication with SFRA host GUI
// to change SCI channel change #define in the sfra_gui_scicomms_driverlib.c
// the GUI also changes a LED status, this can also be changed with #define
// in the file pointed to above
//
SFRA_GUI_config(SFRA_GUI_SCI_BASE,
SCI_VBUS_CLK,
SFRA_GUI_SCI_BAUDRATE,
SFRA_GUI_SCIRX_GPIO,
SFRA_GUI_SCIRX_GPIO_PIN_CONFIG,
SFRA_GUI_SCITX_GPIO,
SFRA_GUI_SCITX_GPIO_PIN_CONFIG,
SFRA_GUI_LED_INDICATOR,
SFRA_GUI_LED_GPIO,\
SFRA_GUI_LED_GPIO_PIN_CONFIG,
amp;sfra1,
1);
  1. SFRA_GUI_SCI_BASE:这是用于SFRA通信的SCI的base。
  2. SFRA_GUI_SCIRX/TX_GPIO:用于SCI外设的GPIO引脚。例如在controlCARD上,FTDI芯片连接到串行链路,并使用GPIO-28和GPIO-29。
  3. GUI的设置是这样的:当GUI与主机建立连接时,它将闪烁一个LED。此LED可在SFRA_GUI_LED_GPIO中指定,还要确保适当更改SFRA_GUI_LED_GPIO_PIN_CONFIG。
  4. 确保SCI时钟已启用。时钟配置通常在setupDevice()->Device_init()函数中处理。对于powerSUITE解决方案,这些都在board.c文件中。
  5. 在服务速率为~10 ms的较慢任务中,调用以下例程以保持SFRA GUI连接处于活动状态。这通常可以保持接近SFRA 后台函数。
SFRA_GUI_runSerialHostComms(&sfra1);
  1. 该工程现在将连接到SFRA GUI。有关如何运行SFRA GUI的更多信息,请参阅第3.6节。

频率响应输入及补偿设计脚本

完成扫频后,SFRA GUI可以用频率响应数据填充逗号分隔CSV文件或excel表。当选择CSV格式(这是默认设置),可以将其保存为excel文件。excel文件数据可以用来拟合零极格式来提取传递函数。该传递函数可用于设计闭环主回路的补偿。在MATLAB上运行的这些操作的脚本如下所示:

SFRA/<version>/scripts

SFRA GUI选项和如何运行

SFRA GUI可用于启动频率扫描并显示测量的频率响应。下图展示了各个选项。

  • MATH Mode Selection Radio Button:此框必须根据MCU上使用的SFRA库版本进行适当选择。对于作为浮点设备的F28377和F28004x,必须选中“浮点”复选框。
  • Setup Connection Button:该按钮用于选择COM端口并设置波特率。点击此按钮,弹出窗口请求波特率选择,通常设置为57600。如果设备已连接,请单击“刷新组件”并选择目标正在使用的串行组件。
    –如果目标连接到的组件已知,请选择它。
    –如果没有,要找到有效的组件,请转到:
    • 控制面板→系统→设备管理器→端口(COM和LPT)
    • 如果使用直接连接到PC的串行端口,请查找显示为“通信端口”的组件,并在“设置连接”窗口中选择该组件。如果使用USB到串行适配器,请查找显示“USB串行端口”的组件,然后在“设置连接”窗口中选择此组件。
    取消选中“Boot on Connect”可将GUI与从RAM运行的CCS工程结合使用,或在使用已有工作的SFRA工程一起刷新的目标时使用。(此句不会翻)
  • Connect and Disconnect Button:一旦数学模式被适当地选择并且通信的COM端口被设置,点击这个按钮连接到MCU。此按钮也用于断开与MCU的连接。
  • Connection Status Indicator:这表示连接是否已成功建立或是否存在任何问题。
  • Frequentcy Vector Length Label:连接后,此标签显示在MCU上编程的SFRA向量的长度。
  • Start Frequency Text Box:此框显示SFRA扫描的开始频率。用户可以通过在文本框中输入值并单击“输入”来更改此设置。(注意,控制器侧的值仅在用户开始SFRA扫描时更新)。
  • Steps Per Decade Text Box:指定每十倍频程执行SFRA的频率点数。
  • Maximum SFRA Frequency Label:这是执行SFRA之前的最大频率。这是开始频率、每十倍频程点数和频率长度的函数。
  • Start Sweep Button:单击此按钮开始对控制器进行频率扫描。
  • Drop Down Menu to Select Open Loop or Plant Frequency:将显示在面板右侧的响应。
  • Closed Loop Performance Parameters Panel:如果在闭环系统上执行SFRA,此面板将显示闭环系统的带宽、增益裕度和相位裕度。
    在这里插入图片描述

这篇关于TMS320F280049C 学习笔记22 SFRA part 2 模块摘要的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/398474

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识