主题中讨论的其他器件: 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"。
****构建完成****