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.

[参考译文] TMS320F28335:在基于 PI 算法编译代码时 dclf32.h 头文件中出错。(TMS320F28335)

Guru**** 1774980 points
Other Parts Discussed in Thread: TMS320F28335, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1314741/tms320f28335-error-in-dclf32-h-header-file-while-compiling-a-code-based-on-pi-algorithm-tms320f28335

器件型号:TMS320F28335
主题中讨论的其他器件: C2000WARE

您好!

我一直使用 TMS320F28335对负载电流进行闭环 PI 控制。为此我编写了一个代码、但我在 DCLF32.h 头文件中收到了错误消息。

我已附加了代码和错误消息。

请提供解决方案并 确认问题是否与代码或 DCL 标题 结构有关。

#include "DSP28x_Project.h"


//器件头文件和示例包括文件
#include "DCL.h"
#include "DSP2833x_Device.h"
#include "DSP2833x_examples.h"
#include "DSP2833x_GlobalPrototypes.h"

#include "DCLF32.h"

#include "dcl_fdlog.h"

//#include "DCLC28.h"

#include "math.h"
//
//函数原型
//
浮点 rk = 20.0f;

浮点 YK;

浮动 lk;

Float UK;

浮动负荷;

结构 DCL_PI pi1;
DCL_pi pi1 = pi_defaults;

//

//函数原型

//

UINT16循环计数;

UINT16转换计数;

void ADC_ISR (void);

void GPIO_select (void);

void InitAdc (void);

void InitEPwm1 (void);

void control_ISR (void);

浮点 DCL_runpi_c1 (DCL_pi *p、浮点 rk、浮点 Yk);


浮点电压1;

浮点 cmpa;

//

//主菜单

//

空 main (void)

{

InitSysCtrl();

Dint;

InitPieCtrl();

EALLOW;

#IF (CPU_FRQ_150MHz)//默认- 150 MHz SYSCLKOUT

//

// HSPCLK=SYSCLKOUT/2*ADC_MODCLK2=150/ 25.0 MHz

//

#define ADC_MODCLK 0x3

#endif

#IF (CPU_FRQ_100MHz)

//

// HSPCLK=SYSCLKOUT/2*ADC_MODCLK2=100/ 25.0 MHz

//

#define ADC_MODCLK 0x2

#endif

EDIS;

EALLOW;

SysCtrlRegs.HISPCP.ALL = ADC_MODCLK;

EDIS;

IER = 0x0000;

IFR = 0x0000;

InitPieVectTable();

EALLOW;//需要执行此操作才能写入 EALLOW 保护的寄存器

PieVectTable.ADCINT =&ADC_ISR;

EDIS;//这是禁用对 EALLOW 保护寄存器的写入所必需的

EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
InitAdc ();//在本示例中,初始化 ADC
//GPIO_select ();

// InitEPwm1();

PieCtrlRegs.PIEIER1.bit.INTx6 = 1;

IER |= M_INT1;


EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM
LoopCount = 0;
ConversionCount = 0;

/*初始化控制器变量*/

PI1.KP=2.0f;

pi1.ki=1.0f;

PI1.Umax=0.8f;

PI1.Umin=0.2f;

Rk = 20.0f;//控制参考的初始值

lk = 1.0f;//控制环路不饱和

//

//启用从 ePWM 到启动 SEQ1的 SOCA

//
//控制回路不饱和
AdcRegs.ADCMAXCONV.all = 0x0001;//在 SEQ1上设置2个转换

AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3;//将 ADCINA3设置为第一次 SEQ1转换

AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2;//将 ADCINA2设置为第二个 SEQ1转换
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;


AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;//启用 SEQ1中断(每个 EOS)

EPwm1Regs.ETSEL.bit.SOCAEN = 1;//在组上启用 SOC
EPwm1Regs.ETSEL.bit.SOCASEL = 4;//在向上计数时从 CPMA 中选择 SOC
EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在发生第1个事件时生成脉冲
EPwm1Regs.CMPA.half.CMPA = 1875;//设置比较 A 值
EPwm1Regs.TBPRD = 3750;//设置 ePWM1的周期
EPwm1Regs.TBCTL.bit.CTRMODE = 0;//向上计数并开始

用于(;;)

{
LoopCount++;

//

// cpu_timer0_isr -


void GPIO_select ()


{


EALLOW;

GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;//启用 GPIO0上的上拉

GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;//启用 GPIO0上的上拉

GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;// GPIO0 = PWM1A

GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;// GPIO0 = PWM1B

EDIS;

void InitEPwm1()

{

EPwm1Regs.TBCTL.bit.CTRMODE = 0;//递减计数

EPwm1Regs.TBPRD = 3750;//设置计时器周期

EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载

EPwm1Regs.TBPHS.half.TBPHS = 0x0000;//相位为0

EPwm1Regs.TBCTR = 0x0000;//清除计数器

EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0x001;//时钟与 SYSCLKOUT 的比率

EPwm1Regs.TBCTL.bit.CLKDIV = 000;

EPwm1Regs.TBCTL.bit.SYNCOSEL=1;

EPwm1Regs.CMPA.half.CMPA = 1875;//设置比较 A 值

EPwm1Regs.CMPB = 1875;//设置比较 B 值

EPwm1Regs.CMPCTL.bit.LOADAMODE=1;

EPwm1Regs.CMPCTL.bit.SHDWAMODE=0;

/* EPwm1Regs.DBCTL.bit.out_mode=3;

EPwm1Regs.DBCTL.bit.POLSEL=2;

EPwm1Regs.DBCTL.bit.IN_MODE=0;

EPwm1Regs.DBRED=100;

EPwm1Regs.DBFED=100;*/

EPwm1Regs.AQCTLA.bit.ZRO=2;//在零上设置 PWM1A

EPwm1Regs.AQCTLA.bit.CAU=1;

EPwm1Regs.ETSEL.bit.SOCAEN = 1;//在组上启用 SOC

EPwm1Regs.ETSEL.bit.SOCASEL = 1;//在向上计数时从 CPMA 中选择 SOC

EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在发生第1个事件时生成脉冲

__interrupt void ADC_ISR (void)

{

YK=((int)AdcRegs.ADCRESULT0 >>4)*300.0f/4095.0f;

//Voltage2[ConversionCount]= AdcRegs.ADCRESULT1 >>4;

//DCL_runClamp_C1 (float *数据、float Umax、float Umin);

//

LK=0.0f;

UK = DCL_runpi_c1 (&pi1、rk、yk);

如果(英国>0.8f){

英国=0.8f;

否则为(UK<0.1f){

UK = 0.1f;

//Uk=0.5f;

EPwm1Regs.CMPA.half.CMPA =(EPwm1Regs.TBPRD)*UK;//设置比较 A 值

EPwm1Regs.CMPB = EPwm1Regs.TBPRD*UK;//设置比较 B 值

//如果记录了40个转换,则重新开始

//

//

//针对下一个 ADC 序列重新初始化

//
if (ConversionCount == 9)
{
ConversionCount = 0;

否则
{
ConversionCount++;

AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;//复位 SEQ1

AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;//清除 INT SEQ1位

PieCtrlRegs.PIEACK.all = PIEACK_Group1;//确认到 PIE 的中断

返回;

错误:

>>编译失败

subdir_rules.mk:72:目标"example_2833xAdcend.obj"的配方失败

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第146行:错误:需要表达式

     V = DCL_DISABLE_INT;

                         ^

 

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第173行:错误:结构"DCL_CSS"没有字段"STS"

     如果(p->Css->STS 和 STS_UPDATE_PLOADING)

                 ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第173行:错误:需要表达式

     如果(p->Css->STS 和 STS_UPDATE_PLOADING)

                                         ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第175行:错误:需要表达式

         V = DCL_DISABLE_INT;

                             ^

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第261行:错误:需要一个";"

 {

 ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第323行:错误:需要";"

 {

 ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第430行:错误:需要表达式

     V = DCL_DISABLE_INT;

                         ^

 

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第458行:错误:结构"DCL_Pi2"没有字段"CSS"

     如果(p->Css->STS 和 STS_UPDATE_PLOADING)

            ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第458行:错误:预期的表达式

     如果(p->Css->STS 和 STS_UPDATE_PLOADING)

                                         ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第460行:错误:需要表达式

         V = DCL_DISABLE_INT;

                             ^

 

                         ^

 

         ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第555行:错误:需要表达式

     V = DCL_DISABLE_INT;

                         ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第568行:错误:结构"DCL_DF11"没有字段"CSS"

     如果(p->Css->STS 和 STS_UPDATE_PLOADING)

            ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第568行:错误:预期表达式

     如果(p->Css->STS 和 STS_UPDATE_PLOADING)

                                         ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第570行:错误:需要表达式

         V = DCL_DISABLE_INT;

                             ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第590行:错误:标识符"Bool"未定义

 静态内联 bool DCL_isStableDF11 (DCL_DF11 *p)

               ^

 

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第641行:错误:结构"DCL_DF11"没有字段"CSS"

     p->sps->b0 = KP *(Ki * p->Css->T + 2.0f)/ 2.0f;

                                ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第642行:错误:结构"DCL_DF11"没有字段"CSS"

     p->SPS->B1 = KP *(Ki * p->Css->T - 2.0f)/ 2.0f;

                                ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第733行:错误:需要表达式

     V = DCL_DISABLE_INT;

                         ^

 

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第746行:错误:结构"DCL_DF13"没有字段"CSS"

     如果(p->Css->STS 和 STS_UPDATE_PLOADING)

            ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第746行:错误:需要表达式

     如果(p->Css->STS 和 STS_UPDATE_PLOADING)

                                         ^

 

"C:/ti/c2000/C2000Ware_4_03_00_00/libraries/control/DCL/c28/include/DCLF32.h "、

         第748行:错误:需要表达式

         V = DCL_DISABLE_INT;

                             ^

 

 

编译"../Example_2833xAdc醋 c.c"时检测到21个错误。

gmake:***[Example_2833xAdcxyobj]错误1

gmake:由于错误、未重制目标"all"。

 

****构建完成****

 

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

    尊敬的 Ayush:

    只要包含了"DCL.h"、"DCLF32.h"中的这些错误就不应该存在、这似乎很奇怪、其中包含了"DCL.h"、并且默认情况下它包含在 DCLF32.h 中。

    您能否 仔细检查 DCL.h 是否存在以及 DCL.h HAV 的内容是否未被调整?

    谢谢。

    王森

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

    王森、您好!

    是的、DCL.h 位于要求的位置。 我只对 DCL 文件中的 float32_t 替换为 float 进行了一次更改、因为之前的错误是 float32_t 变量未定义时出现的。

    我检查了所有头文件、但没有找到变量 DCL_disable_ints、STS_update_pending、CSS 结构的定义。我们是否必须手动添加?

    谢谢。此致、

    Ayush

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

    尊敬的 Ayush:

    CSS strcts 和  DCL_disable_ints、STS_update_pending 都是 DCL.h 的一部分。 您可能不小心删除了代码的一部分。 您是否也可以尝试重新安装 C2000Ware、看看此问题是否仍然存在?

    此致!

    王森

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

    王森、您好!

    我已重新安装 c2000ware。先前的错误 已解决。但下面提到的新错误已出现:

    >>编译失败
    Makefile:146:目标"example_2833xAdc.Adb坐 标数据"的配方失败
    警告:无法解析存档
    C:/ti/c2000/C2000Ware_5_01_00_00/libraries/math/FPUfastRTS/c28/lib/rts2800_f
    pu32_fast_补充.lib 添加到兼容库、因为没有输入文件
    ;需要从输入文件构建属性信息以
    确定库兼容性

    第一个引用的未定义
    文件中的符号
    ---------------- ----------------
    _DCL_runpi_c1 ./example_2833xAdcobj

    错误:未解析的符号仍存在
    错误:链接期间遇到错误;未生成"Example_2833xAdcend.out"
    gmake:***[Example_2833xAdc阳 镇 OUT]错误1
    gmake:由于错误、未重制目标"all"。

    ****构建完成****

    此处、函数已在代码和头文件中定义。仍然出现错误。

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

    尊敬的 Ayush:

    DCL_runpi_c1是外部汇编函数、因此请确保将"DCL_pi_c1.asm"文件从 DCL 源文件夹(c2000ware/libraries/control/DCL/c28/source/)复制到您的 CCS 工程中。

     

    对于 RTS 库、请尝试 改用 EABI 格式 的库、在 CCS 工程的属性中、点击"Build -> C2000 Linker -> File Search Path"、然后将名称"rts2800_fpu32_fast_补充.lib"修改为"rts2800_fpu32_fast_补充_eabi.lib"。 如果这不起作用、或者您使用的是 COFF 二进制格式、请改用"rts2800_fpu32_FAST_补充_coff.lib"。

    此致!

    王森