主题中讨论的其他器件: 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;
}