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.

[参考译文] CCS/TMS320F28035:SFRA 库及其 GUI 用法

Guru**** 2390735 points
Other Parts Discussed in Thread: SFRA, CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/712705/ccs-tms320f28035-sfra-library-and-its-gui-usage

器件型号:TMS320F28035
Thread 中讨论的其他器件:SFRAcontrolSUITE

工具/软件:Code Composer Studio

尊敬的先生/女士:

最近、我处理了2个 SMPS 项目、并尝试使用 sfra lib 来获取受控体和开环函数。

它在一个上工作、但在另一个上失败、

我有以下问题需要您的帮助才能解决。

1. controlSUITE 中有2个版本: v1_10_00_00和 v1_20_00_00。 差异是什么?

2.我在  我的项目中导入 v1_10_00_00的 SciCommsGui_320.c、并在 同一项目中使用 SFRA_GUI.exe 进行连接。

它始终有以下警报:"请 加载有效的.A00文件"。 如何解决?

我尝试 了 SFRA_GUI.exe v1_20_00_00、它连接良好。

3.我尝试在  项目中导入 v1_20_00_00的 SciCommsGui_32bit.c、但 找不到一些头文件、宏、函数(如 SCI_setConfig、SCIA_BASE、SCI_IsTransmitterBusy)的定义。

然后、我在 C:\ti\controlSUITE\libs\app_libs\SFRA\v1_20_00_00\examples\DPSWrkShpKit_SFRA_F28035中导入了示例项目、它无法编译:  

>>编译失败
subdir_rules.mk:65:目标'sciCommsGui_32BI.obj 的配方失败
"C:/ti/controlSUITE/libs/app_libs/SFRA/v1_20_00_00/GUI/SciCommsGui_32bit.c "、第15行:致命错误:无法打开源文件"driverlib.h"
1在编译"C:/ti/controlSUITE/libs/app_libs/SFRA/v1_20_00_00/GUI/SciCommsGui_32bit.c "时检测到灾难性错误。
编译已终止。
gmake:***[SciCommsGui_320.obj]错误1.
gmake:目标"全部"不会由于错误而重新生成。

我认为您可以尝试并引导我成功完成构建。

4.对于 SFRA_IQ_Inject()和  SFRA_IQ_Collect()参数的数据类型,我也有疑问。

它们是否使用_IQ26或其他内容? 因为我注意到"SFRA1.MOGES=_IQ26 (0.01);"使用_IQ26。

但在某些示例中、使用了_iQ24。

您对此有更多信息吗?

我很期待您的继电器、非常感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    经过一些调试和调查后、我更新了我的问题、1-3目前还可以、请检查它是否正确、并帮助解决第4和第5个问题。

    1. controlSUITE 中有2个版本:v1_10_00_00和 v1_20_00_00。 差异是什么?

    ME:V1_20_00_00专为具有 driverlib 的 MCU 而设计。 遗憾的是、不支持28035。


    2.我在我的项目中导入 v1_10_00_00的 SciCommsGui_320.c、并在同一项目中使用 SFRA_GUI.exe 进行连接。

    它始终有以下警报:"请加载有效的.A00文件"。 如何解决?

    我尝试了 SFRA_GUI.exe v1_20_00_00、它连接良好。

    ME:将取消 Bootrom 文件的选项。

    3.我尝试在项目中导入 v1_20_00_00的 SciCommsGui_32bit.c、但找不到一些头文件、宏、函数(如 SCI_setConfig、SCIA_BASE、SCI_IsTransmitterBusy)的定义。

    然后、我在 C:\ti\controlSUITE\libs\app_libs\SFRA\v1_20_00_00\examples\DPSWrkShpKit_SFRA_F28035中导入了示例项目、它无法编译:

    >>编译失败
    subdir_rules.mk:65:目标'sciCommsGui_32BI.obj 的配方失败
    "C:/ti/controlSUITE/libs/app_libs/SFRA/v1_20_00_00/GUI/SciCommsGui_32bit.c "、第15行:致命错误:无法打开源文件"driverlib.h"
    1在编译"C:/ti/controlSUITE/libs/app_libs/SFRA/v1_20_00_00/GUI/SciCommsGui_32bit.c "时检测到灾难性错误。
    编译已终止。
    gmake:***[SciCommsGui_320.obj]错误1.
    gmake:目标"全部"不会由于错误而重新生成。

    我认为您可以尝试并引导我成功完成构建。

    ME:请参阅 Q1。

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    4.对于 SFRA_IQ_Inject()和 SFRA_IQ_Collect()参数的数据类型,我也有疑问。

    它们是否使用_IQ26或其他内容? 因为我注意到"SFRA1.MOGES=_IQ26 (0.01);"使用_IQ26。

    但在某些示例中、使用了_iQ24。



    连接 GUI 并单击以开始扫描时、GUI 只需很短的时间即可开始、然后一直处于扫描状态。

    我的代码为 Duty = SFRA_IQ_Inject (PFC_i32OpenLoopDuty);、其中 PFC_i32OpenLoopDuty =_IQ24 (0.4444);
    我发现当开始扫描时,使用 IQ24格式的占空比超过1.0。

    但我在 SFRA 稳定中设置了 SFRA1.MOGANGES=_IQ26 (0.01)。

    您能告诉我、在这种情况下、占空比将从1.0开始吗?

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

    4.对于 SFRA_IQ_Inject()和 SFRA_IQ_Collect()参数的数据类型,我也有疑问。

    它们是否使用_IQ26或其他内容? 因为我注意到"SFRA1.MOGES=_IQ26 (0.01);"使用_IQ26。

    但在某些示例中、使用了_iQ24。

    总的来说、IQ24用于 SFRA 读取的所有变量、即占空比、控制输出、ADC 反馈等 无法更改此 Q 值。 振幅实际上是 IQ26、这是因为它提供了额外的分辨率并在 SFRA_INject 例程中节省了几个周期。  


    连接 GUI 并单击以开始扫描时、GUI 只需很短的时间即可开始、然后一直处于扫描状态。

    我的代码为 Duty = SFRA_IQ_Inject(PFC_i32OpenLoopDuty);、其中 PFC_i32OpenLoopDuty =_IQ24 (0.4444);  
    我发现当开始扫描时,使用 IQ24格式的占空比超过1.0。

    但我在 SFRA 稳定中设置了 SFRA1.MOGANGES=_IQ26 (0.01)。

    您能告诉我、在这种情况下、占空比将从1.0开始吗?

    非常感谢!

    卡在扫描状态可能是由于 SCI GUI 通信问题、我们知道其中存在错误、还没有与这些错误相关的时间线可修复。  

    您可以检查观察窗口中的 sfra 对象 并查看 freqIndex 是否在递增??  

    确保正确设置了 BootROM 表位置、您可以参考 C:\ti\controlSUITE\libs\app_libs\SFRA\v1_20_00_00\examples\DPSWrkShpKit_SFRA_F28035 CMD 文件以获取正确的位置。  

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

    是的、在扫描期间、freqIndex 不会增加、而是0。

    我已经检查了 CMD 文件、我认为它是可以的、因为工具链适用于另一个项目。

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

    更多信息、 当发出哔声时、频率指数不会增加、

     SFRA1.state = 4末尾、

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

    1. 当你在观察窗口上进行刷新时、你是否有连续刷新?

    2、频率值是多少? 2Hz、5Hz???

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

    再次感谢 Manish Bhardwaj、

    最后、我解决了这个问题。 但我想清楚地说明所有细节。

    导致 SFRA 失败的原因是、我在 SFRA_IQ_INMOUNCTION 之前调用了一个函数来读取 ADC 结果。

    当我注释此代码并改用常用方法获取 ADC 结果时、SFRA 会起作用。

    此函数与 名为"ADCMACRO_RUN ();"的 ADCDRV_4ch 驱动器数字电源库相结合

     由于 ADCDRV_4ch 的运行时代码是用汇编语言编写的宏、因此我用汇编 c 可调用函数将其括起来。

    最后在 ADC 转换结束时触发的 ISR 中运行。

    编译期间没有警告、如果我不运行 SFRA、似乎可以正常工作。

    在我看来,在运行 ADCMACRO_run 时,堆栈推送和弹出可能存在一些问题();

    请帮帮我

    1.在 C 语言编写的 ISR 中找到正确使用 ADCDRV_4ch 驱动程序的方法?

    2.检查问题的根本原因。

    代码如下所示、

           .sect "IsrRamfuncs"
           .def _ADCMACRO_run
    _ADCMACRO_run:
           ADCDRV_4ch 0、1、2、3;运行 ADCDRV_4ch
           LRETR


           .def _PWMDRV_1chHiResMACRO_run
    _PWMDRV_1chHiResMACRO_run:
           ;“调用”运行宏
           PWMDRV_1chHires 1;运行 PWMDRV_1CH (注意 EPWM1用于实例1)
           LRETR

    extern void ADCMACRO_run (void);

    中断空 ADC_ISR (空)

    ADCMACRO_run ();

    PFC_i32Vin = ADRlt_PH1 - ADRlt_PH2;
    PFC_i32Vinabs =_IQabs (PFC_i32Vin);

    if (PFC_i32Enable = 1)


    PFC_i32SFRAOpenLoopDuty = SFRA_IQ_Inject (PFC_i32OpenLoopDuty);

    //PWMDRV_1chHiResMACRO_run ();
    EPwm1Regs.CMPAM.ALL =_IQ16mpyI32 (_IQtoIQ16 (PFC_i32SFRAOpenLoopDuty)、ISR_PERIOD);
    //CPA

    SFRA_IQ_Collect (&PFC_i32SFRAOpenLoopDuty、&GVADRlt_VB);

    TEST_RunTimeElapse1 = EPwm1Regs.TBCTR - Test_RunTime1;
    AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
    PieCtrlRegs.PIEACK.all = PIEACK_Group1;//确认此 int 以从组3接收更多 int

    非常感谢您的参与。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下面是运行时汇编宏的示例代码、
    一些寄存器必须受到保护。


    ;数字电源库-中断服务例程

    ;标记到 DPL Func Run 函数
    .def_DPL_Func

    .sect "ramfuncs"


    _DPL_Func:
    ;上下文保存-将任何不受保护的寄存器压入堆栈
    按 XAR1
    按 XAR2
    按 XAR3
    -----------------

    ;调用 DP 库模块
    ;------------------------------------------------------------
    .if (INCR_BUILD = 1)
    ;ADCDRV_1CH 1;Ipfc
    ;ADCDRV_1CH 2;Vpfc
    ;ADCDRV_1CH 3;VL_fb
    ;ADCDRV_1CH 4;VN_fb

    ;ADCDRV_1CH 1;Ipfc
    ;ADCDRV_1CH 2;IPFC
    ;ADCDRV_1CH 3;Ipfc
    ;ADCDRV_1CH 4;IPFC
    ;ADCDRV_1CH 5;Vpfc
    ;ADCDRV_1CH 6;VL_fb
    ;ADCDRV_1CH 7;VN_fb

    ADCDRV_1CH 1;Ipfc
    ADCDRV_1CH 2;Ipfc
    ADCDRV_1CH 3;Ipfc
    ADCDRV_1CH 4;Ipfc
    ADCDRV_1CH 5;Ipfc
    ADCDRV_1CH 6;Ipfc
    ADCDRV_1CH 7;Ipfc
    ADCDRV_1CH 8;IPFC
    ADCDRV_1CH 9;Vpfc
    ADCDRV_1CH 10;VL_fb
    ADCDRV_1CH 11;VN_fb

    ;减去 IPFC CS 放大器偏移并计算过滤的 IPFC
    MOVWDP、#_AdcResult ;载入数据页以读取 ADC 结果
    ;MOVACC、@μ_AdcResult.ADCRESULT1<<12;ACC = IL_RAW
    ;为测试过采样注释了上述内容

    ;过采样的测试代码*******
    ;MOVACC、@μ_AdcResult.ADCRESULT1<<10;ACC = IL_RAW、Q24/4
    ;添加ACC、@_AdcResult.ADCRESULT2<<10;Q24/4
    ;添加ACC、@_AdcResult.ADCRESULT3<<10;Q24/4
    ;添加ACC、@μ_AdcResult.ADCRESULT4<<10;Q24/4、添加4个电流样本、4*(Q24/4)= Q24

    MOVACC、@μ_AdcResult.ADCRESULT1<<9;ACC = IL_RAW、Q24/8
    添加ACC、μ@ AdcResult.ADCRESULT2<<9;Q24/8
    添加ACC、μ@ AdcResult.ADCRESULT3<<9;Q24/8
    添加ACC、@_AdcResult.ADCRESULT4<<9;Q24/8
    添加ACC、μ@ AdcResult.ADCRESULT5<<9;Q24/8
    添加ACC、μ@ AdcResult.ADCRESULT6<<9;Q24/8
    添加ACC、μ@ AdcResult.ADCRESULT7<<9;Q24/8
    添加ACC、@_AdcResult.ADCRESULT8<<9;Q24/8、添加8个电流样本、8*(Q24/8)= Q24



    -----------------
    ;完整的上下文恢复
    ;SETCINTM;设置 INTM 以保护上下文恢复
    弹出 XAR3
    弹出 XAR2
    弹出 XAR1
    LRETR;函数返回
    .end

    ;文件结束