This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] SFRA:在 GUI 中未获得任何结果

Guru**** 2380860 points
Other Parts Discussed in Thread: SFRA, TMDSCNCD28388D
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1308079/sfra-not-getting-any-results-in-gui

器件型号:SFRA
主题中讨论的其他器件: TMDSCNCD28388D

专家您好...

我已经将 SFRA 的代码编写为一个新项目、 我的目的是在 GUI 中获得一些 dB 增益/相位值。 为了这件事,我强力地写

DUTY_PU_DC = 0.5;

Vout1_read = 0.9;  

并  使用输入扰动

DUTY_PU=SFRA_F32_INject (DUTY_PU_DC);

使用以下方法收集数据:  

SFRA_F32_COLLECT (&DUTY_PU、&Vout1_READ);

在100kHz PWM ISR & SCI 通信中会调用这些命令。 在另一个 PWM 1kHz ISR 中调用 FN

SFRA_F32_runBackgroundTask (&sfra1);
SFRA_GUI_runSerialHostComms (&sfra1);

GUI 正在连接并永远显示扫描…… ,不显示任何结果。 有人能识别我在代码中犯了什么错误吗? 屏幕截图和代码已附加、

此致

阿诺普·库马尔

#include "F28x_project.h"
#include "driverlib.h"
#include "device.h"
#include "sfra_F32.h"

#ifndef NULL
#define NULL ((void *) 0x0)
#endif


#define SFRA_ISR_FREQ 100e3
#define SFRA_FREQ_START 10
#define SFRA_FREQ_STEP_COMPLEX ((float32_t) 1.105)
#define SFRA_AMPLITUDE ((float32_t) 0.05)
#define SFRA_FREQ_LENGTH 50

浮点 DUTY_PU_DC、Vout1_READ、DUTY_PU;

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];

外部长 FPUsinTable[];

//需要正确的更改
#define GPIO_28_SCIRXDA GPIO_28_SCIA_RX
#define GPIO_29_SCITXDA GPIO_29_SCIA_TX

//需要正确的更改
#define SFRA_GUI_SCI_BASE SCIA_BASE
#define SFRA_GUI_VBUS_CLK ((float32_t) 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

#define SFRA_GUI_LED_INDICTOR 1
#define SFRA_GUI_LED_GPIO 31
#define SFRA_GUI_LED_GPIO_PIN_CONFIG GPIO_31_GPIO31

void SFRA_GUI_CONFIG (volatile uint32_t sci_BASE、
uint32_t VBUS_clk、
uint32_t 波特率、
uint16_t scirx_GPIO_pin、
uint32_t scirx_GPIO_PIN_CONFIG、
uint16_t scitx_GPIO_pin、
uint32_t scitx_GPIO_PIN_CONFIG、
uint16_t LED_INDICATOR_FLAG、
uint16_t LED_GPIO_Pin、
uint32_t LED_GPIO_PIN_CONFIG、
SFRA_F32 *sfra,
uint16_t plot_option);
void SFRA_GUI_runSerialHostComms (SFRA_F32 *sfra);

__interrupt void epwm1_ISR (void);
__interrupt void epwm2_isr (void);

void PWM_Config (void);

空 main (void)
{
InitSysCtrl();
EALLOW;
CpuSysRegs.PCLKCR2.bit.EPWM1=1;
CpuSysRegs.PCLKCR2.bit.EPWM2=1;
CpuSysRegs.PCLKCR7.bit.SCI_A = 1;
EDIS;
InitEPwm1Gpio();
InitEPwm2Gpio();
Dint;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.EPWM1_INT =&epwm1_isr;
PieVectTable.EPWM2_INT =&epwm2_isr;
EDIS;
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0;
EDIS;
PWM_Config ();
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =1;
EDIS;

DUTY_PU_DC = 0.5;
//将 SFRA 模块的内部数据复位为零
SFRA_F32_RESET (&sfra1);
//配置 SFRA 模块
SFRA_F32_CONFIG (&sfra1、
SFRA_ISR_FREQ、
SFRA_AM振 幅、
SFRA_FREQ_LENGTH、
SFRA_FREQ_START、
SFRA_FREQ_STEP_COMPLIT、
PlantMagVect、
PlantPhaseVect、
olMagVect、
olPhaseVect、
clMagVect、
clPhaseVect、
频率 Vect、
1);

//将响应数组重置为全零
SFRA_F32_resetFreqRespArray (&sfra1);
//初始化频率响应数组
SFRA_F32_initFreqArrayWithLogSteps (&sfra1、
SFRA_FREQ_START、
SFRA_FREQ_STEP_SILIT);

// SCI 配置
SFRA_GUI_CONFIG (SFRA_GUI_SCI_BASE、
SFRA_GUI_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_INDICTOR、
SFRA_GUI_LED_GPIO、
SFRA_GUI_LED_GPIO_PIN_CONFIG、
sfra1 (&S)、
1);

IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
PieCtrlRegs.PIEIER3.bit.intx2 = 1;
EINT;
ERTM;

while (1)
{
//无限循环

}// 主循环到此结束


__interrupt void epwm1_ISR (void)
{
//读取 ADC 和计算机 FBK 值
Vout1_read = 0.9;//强制写入一些值...
//将 SFRA 注入开环转换器的占空比中
DUTY_PU=SFRA_F32_INject (DUTY_PU_DC);
SFRA_F32_COLLECT (&DUTY_PU、&Vout1_READ);

EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACK.all = PIEACK_Group3;


__interrupt void epwm2_isr (void)
{

SFRA_F32_runBackgroundTask (&sfra1);
SFRA_GUI_runSerialHostComms (&sfra1);

EPwm2Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACK.all = PIEACK_Group3;


空 PWM_Config ()
{
EPwm1Regs.TBPRD = 500;
EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;
EPwm1Regs.TBCTR = 0x0000;
EPwm1Regs.TBCTL.bit.CTRMODE = 2;
EPwm1Regs.TBCTL.bit.PHSEN = 0;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;
EPwm1Regs.TBCTL.bit.CLKDIV = 0;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;
EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;
EPwm1Regs.CMPCTL.bit.LOADBMODE = 0;
EPwm1Regs.CMPA.bit.CMPA = 150;
EPwm1Regs.AQCTLA.bit.CAU = 2;
EPwm1Regs.AQCTLA.bit.CAD = 1;
EPwm1Regs.DBCTL.all = 0x800B;
EPwm1Regs.DBRED.bit.DBRED = 50;
EPwm1Regs.DBFED.bit.DBFED = 50;
EPwm1Regs.ETSEL.bit.INTSEL = 1;
EPwm1Regs.ETSEL.bit.inten = 1;
EPwm1Regs.ETPS.bit.INTPRD = 1;


EPwm2Regs.TBPRD = 50000;
EPwm2Regs.TBPHS.bit.TBPHS = 0x0000;
EPwm2Regs.TBCTR = 0x0000;
EPwm2Regs.TBCTL.bit.CTRMODE = 2;
EPwm2Regs.TBCTL.bit.PHSEN = 0;
EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0;
EPwm2Regs.TBCTL.bit.CLKDIV = 0;
EPwm2Regs.CMPCTL.bit.SHDWAMODE = 0;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = 0;
EPwm2Regs.CMPCTL.bit.LOADAMODE = 0;
EPwm2Regs.CMPCTL.bit.LOADBMODE = 0;
EPwm2Regs.CMPA.bit.CMPA = 150;
EPwm2Regs.AQCTLA.bit.CAU = 2;
EPwm2Regs.AQCTLA.bit.CAD = 1;
EPwm2Regs.DBCTL.all = 0x800B;
EPwm2Regs.DBRED.bit.DBRED = 50;
EPwm2Regs.DBFED.bit.DBFED = 50;
EPwm2Regs.ETSEL.bit.INTSEL = 1;
EPwm2Regs.ETSEL.bit.inten = 1;
EPwm2Regs.ETPS.bit.INTPRD = 1;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anoop、

    大约每1ms 需要调用一次 SFRA GUI 相关函数和 SFRA 后台任务。  

    我是否可以知道触发 epwm2_ISR 的频率?

    如上面的代码所示、宏将"SFRA_ISR_FREQ"定义为100e3是 epwm1_ISR 的触发频率(其中  调用了 SFRA 注入和收集函数)。 是这样吗?

    谢谢。此致、

    沙山克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Shashank

    EPWM2是1kHz ISR (在其中调用后台任务)

    EPWM1是100kHz ISR (其中调用 SFRA 注入和收集 fn)

    此致

    阿诺普

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anoop、

    哪个器件用于上述代码?

    此致、

    沙山克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    TMDSCNCD28388D

    控制卡

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anoop、

    您可以将 EPWM1的频率降至50kHz、EPWM2降至500Hz、试一次吗?

    两个 EPM 的 TBCTR = TBPRD 时是否都处于向上/向下计数器模式、触发 PWM 中断?

    谢谢。此致、

    沙山克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Shashank

    EPWM1为100kHz ISR、当  TBCTR = 0时、生成事件;

    EPWM2为1kHz ISR、事件在同一点生成

     我尝试了50kHz 和500Hz、但没有改善。  

    目前、我使用 2838x_RAM_lnk_CPU1作为 CMD 文件、 并且无法 使用 2838x_FLASH_lnk_CPU1进行调试、因为 代码在特定点停止。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anoop、

    查看您在上一张幻灯片中

    EPWM1 ISR 以100KHz 运行、EPWM2 ISR 以1KHz 运行。

    但根据 EPMWM 代码、TBCTR = 0事件作为中断发生器、向上向下计数模式、CLKDIV 为0 (默认值)-将以以下频率生成中断

    EPWM1 ISR 为200kHz、EPWM2 ISR 为2KHz

    您是否可以通过将定义 "SFRA_ISR_FREQ"更改为200000和 EPwm2Regs.TBPRD = 100000进行检查、以便 EPWM2 ISR 将以1KHz 的频率运行、EPWM1 ISR 将以200kHz 的频率运行

    此致、

    沙山克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Shashank:

    PWM 模块 的时钟频率为 100MHz、对于 TBPRD 500和加/减计数器、可产生100kHz 计时器。 我通过在 ISR 和 ISR 中切换 GPIO 来对此进行重新检查  



    我强烈怀疑我的链接器文件有问题、因为我无法按照 SPRUIK4A 中给出的步骤7、8和9进行操作。

    C2000 软件频率响应分析器(SFRA)库用户指南(修订版 A)(TI.com)

    它在我的链接器文件中导致了错误。 因此、我没有编辑链接器文件并使用 C2000 Digital powr SDK 中提供的通用 RAM CPU1链接器文件。  

    因此也收到了这一警告...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anoop、

    那么、您是否提到没有 SFRA GUI 也无法使用库?

    您可以通过将 SFRA_F32_Data 分配给其中一个存储器来消除该错误/警告、如 SFRA 示例所示!

    此致、

    沙山克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    H·沙山克

    基本上我没有更好的知识在内存或链接器相关的事情,所以只是复制粘贴以下从 pfc2phvienna_f2838x 项目链接器文件

    SFRA_F32_Data:> RAMGS2、ALIGN = 64、PAGE = 1

    SFRA_Data:> RAMGS2、ALIGN = 64、PAGE=1

    FPUmathTables :> FLASHN, page = 0

    并得到以下错误。 请帮助解决这个问题

    此致  

    阿诺普

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anoop、

    在存储器部分的第1页中、您可以提供以下内容:

      RAMGS2   :origin = 0x00F000、length = 0x001000

      RAMGS3   :origin = 0x010000、length = 0x001000

    在片段分配中、您可以提供以下内容:

    SFRA_F32_Data:> RAMGS2、ALIGN = 64、PAGE = 1

    SFRA_Data:> RAMGS2、ALIGN = 64、PAGE=1

    FPUmathTables :> RAMGS3, page =1

    尝试在链接器文件中进行上述更改。 即使错误仍然存在、请提供 zip 文件。 我可以从末端尝试。

    谢谢。此致、

    沙山克