Go to file
2026-06-12 16:22:17 +08:00
28379d_P_SFRA 更新README 2026-06-12 16:22:17 +08:00
28379d_test_SFRA 更新README 2026-06-12 16:22:17 +08:00
fig 更新README 2026-06-12 16:22:17 +08:00
LICENSE Initial commit 2026-06-12 15:29:43 +08:00
README.md 更新README 2026-06-12 16:22:17 +08:00
sfra_f32.c 上传文件至 / 2026-06-12 15:39:15 +08:00

sfra_f32.c使用教程

请参考博客:https://blog.zxcli.top/post/9
所需文件为:

变量定义以及初始化:

// sfra变量定义
SFRA_F32 ti_sfra;

#define CONTROL_ISR_FREQUENCY ((float32_t)100 * 1000)  // 100KHz

#define SFRA_ISR_FREQ   CONTROL_ISR_FREQUENCY
#define SFRA_FREQ_START 10
//
// 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.1
#define SFRA_FREQ_LENGTH 100

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


// 通信串口LED
#define SFRA_GUI_SCI_BASE SCIA_BASE
#define SFRA_GUI_VBUS_CLK DEVICE_LSPCLK_FREQ
#define SFRA_GUI_SCI_BAUDRATE 115200
#define SFRA_GUI_SCIRX_GPIO 43
#define SFRA_GUI_SCITX_GPIO 42
#define SFRA_GUI_SCIRX_GPIO_PIN_CONFIG GPIO_43_SCIRXDA
#define SFRA_GUI_SCITX_GPIO_PIN_CONFIG GPIO_42_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_init()
{
    SFRA_F32_reset(&ti_sfra);
    SFRA_F32_config(&ti_sfra,
                    SFRA_ISR_FREQ,
                    SFRA_AMPLITUDE,
                    SFRA_FREQ_LENGTH,
                    SFRA_FREQ_START,
                    SFRA_FREQ_STEP_MULTIPLY,
                    plantMagVect,
                    plantPhaseVect,
                    olMagVect,
                    olPhaseVect,
                    clMagVect,
                    clPhaseVect,
                    freqVect,
                    1);
    SFRA_F32_resetFreqRespArray(&ti_sfra);
    SFRA_F32_initFreqArrayWithLogSteps(&ti_sfra,
                                        SFRA_FREQ_START,
                                        SFRA_FREQ_STEP_MULTIPLY);
    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,
                    &ti_sfra,
                    SFRA_GUI_PLOT_GH_CL);

}

后台任务:

void sfra_task_run()
{

    SFRA_F32_runBackgroundTask(&ti_sfra);
    SFRA_GUI_runSerialHostComms(&ti_sfra);

}

数据收集:

__interrupt void TIMER0_ISR()
{
    static float32_t input_dc = 0.8f;
    float32_t plant_input;
    float32_t plant_output;

    plant_input = SFRA_F32_inject(input_dc);

    
    // 直通用于测试SFRAplant扫描结果应为0°0db
    // plant_output = plant_input; 

    // 注入扫描lowpass
    plant_output = LowPassFilter_Run(&lowPass_test, plant_input);

    SFRA_F32_collect(&plant_input, &plant_output);

    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);
}

28379d_test_SFRA

该工程为文章中SFRA和LIBSFRA节所使用的工程。
CCS版本为20.5
C2000Ware版本为6.0.1.00
Build Configurations请选择为CPU1_FLASH
通过更改sfra_test.c中的SFRA_TYPE宏即可指定使用SFRA、LIBSFRA和兼容上位机的LIBSFAR中的一个。

当SFRA_TYPE为TI_SFRA时请将libsfra_ti_hal.c排除编译。

当SFRA_TYPE为LIBSFRA_HAL_TI时请将sfra_f32_tmu_eabi.lib排除编译。

28379d_P_SFRA

该工程为使用sfra_f32.c的工程。
CCS版本为20.5
C2000Ware版本为6.0.1.00
Build Configurations请选择为CPU1_FLASH