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: Not getting any results in GUI

Part Number: SFRA
Other Parts Discussed in Thread: TMDSCNCD28388D

Hello Experts...

I have written code for SFRA as a new project, My intention is to get some dB gain/ phase values in GUI. for that i forcefully write

Duty_pu_DC = 0.5;

Vout1_Read = 0.9; 

and made perturbation in Duty_pu_DC  using

Duty_pu=SFRA_F32_inject(Duty_pu_DC);

the data is collected using 

SFRA_F32_collect(&Duty_pu,&Vout1_Read);

These are called in 100kHz PWM ISR & SCI comm. fn are called in another PWM 1kHz isr

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

The gui is getting connected & showing sweeping forever......, no results are displayed. Can somebody identify where I made the mistake in my code ? the screenshot & code is attached,

Regards

Anoop kumar

#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_MULTIPLY ((float32_t)1.105)
#define SFRA_AMPLITUDE ((float32_t)0.05)
#define SFRA_FREQ_LENGTH 50

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

extern long FPUsinTable[];

// need proper change
#define GPIO_28_SCIRXDA GPIO_28_SCIA_RX
#define GPIO_29_SCITXDA GPIO_29_SCIA_TX

// need proper change
#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_INDICATOR 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 baudrate,
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);

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;
//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,
1);

//Resets the response arrays to all zeroes
SFRA_F32_resetFreqRespArray(&sfra1);
// Initializes the frequency response array
SFRA_F32_initFreqArrayWithLogSteps(&sfra1,
SFRA_FREQ_START,
SFRA_FREQ_STEP_MULTIPLY);

// SCI Config
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_INDICATOR,
SFRA_GUI_LED_GPIO,
SFRA_GUI_LED_GPIO_PIN_CONFIG,
&sfra1,
1);

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

while(1)
{
// Indefinite loop
}

} // ****************** Main loops ends here ********************


__interrupt void epwm1_isr(void)
{
// Read ADC and computer Fbk Value
Vout1_Read = 0.9; // Forcefully writing some values...
// Add SFRA injection into the duty cycle for the open loop converter
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;
}


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

}