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.

调用SFO()出现的问题

上传了附件,如果可以请查看一下什么地方有问题。

在自己的程序中,添加SFO_TI_Build_V6B.lib文件。

文件放在工程目录下,在main程序中

#include "SFO_V6.h"

int MEP_ScaleFactor;

另外在library option in the File Search Path options中 添加了Lib文件也添加了Lib文件路径。

可是在调用SFO()函数时出现以下错误提示:

1.#10010 errors encountered during linking;"charger.out"not built

2.#10234_D unresolved symbols remain

3.unresolved symbol _ePWM,first regerenced in d:/sxd28035a/byheshuai/Charger/SFO_TI_Build_V6b.lib<SFO_V6b.obj>

其中点开2错误的提示操作就是讲将LIB文件和路径添加以下。的确添加了。

请帮忙解答一下。

PS:在自己工程中曾经调用过flash_api的lib,按照方法在file search path options中添加了Lib文件和路径就可以用了。

不知道为什么SFO不行。

我的PWM配置的分开配置的。不像例程中是用结构体数组来循环配置初始化。

另外再28035的HRPWM例程中

volatile struct EPWM_REGS *ePWM[PWM_CH] =
{ &EPwm1Regs, &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs};

定义的这个结构体数组里面,数组0和1都是Epwm1Regs,这是为什么呢?

Charger.rar
  • //====================================================================
    // The following declarations are required in order to use the SFO
    // library functions:

    首先在你的程序里必须定义下面的内容

    //
    int MEP_ScaleFactor[PWM_CH]; // Global variable used by teh SFO library
                         // Result can be used for all HRPWM channels
                         // This variable is also copied to HRMSTEP
                         // register by SFO() function.

    // Array of pointers to EPwm register structures:
    // *ePWM[0] is defined as dummy value not used in the example
    volatile struct EPWM_REGS *ePWM[PWM_CH] =
                 {  &EPwm1Regs,&EPwm1Regs};

    //====================================================================

     

    另外你需要在SFO_V6.h中定义,注意这里的值要和上面volatile struct EPWM_REGS的定义对应。

    //============================================================================
    // USER MUST UPDATE THIS CONSTANT FOR NUMBER OF HRPWM CHANNELS USED
    //============================================================================
    #define PWM_CH  2   // Equal # of HRPWM channels PLUS 1
                        // i.e. PWM_CH is 9 for 8 channels, 7 for 6 channels, etc.
    //============================================================================

  • 就是说HRPWM必须定义成结构体数组

    #define PWM_CH 3

    volatile struct  EPWM_REGS *ePWM[PWM_CH]={ &EPwm1Regs,&EPwm1Regs,&EPwm2Regs};

    如果不是结构体的初始化就无法使用SFO()?

    那如果我要求PWM2与PWM1的相位相差180度

    采用例程中的那种初始化方式怎么设置呢?

    初始化过程中可以根据通道的不同设置不一样的参数吗?

  • volatile struct  EPWM_REGS *ePWM[PWM_CH]={ &EPwm1Regs,&EPwm1Regs,&EPwm2Regs};

    这个只是给SFO用的,你配置PWM时用正常的头文件中的结构体。SFO是个单独的东西,和你的其他PWM配置无关。

  • 也就是说程序中只需要定义volatile struct  EPWM_REGS *ePWM[PWM_CH]={ &EPwm1Regs,&EPwm1Regs,&EPwm2Regs};就可以了。

    具体的PWM初始化我还用以前文件来初始化?

    如果没有volatile struct  EPWM_REGS *ePWM[PWM_CH]={ &EPwm1Regs,&EPwm1Regs,&EPwm2Regs};

    程序中SFO就无法使用了?

    是这个意思吗?