请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28335 工具/软件:Code Composer Studio
我正在尝试使用虚开关时间(IST)的概念运行一个代码、为三级 NPC 提供脉冲信号。 但是、我不断收到"#143 expression must have pointer-to object type"错误
代码中的以下行中
X=a[j]*8120;
y=a[k]*8120;
Z=a[l]*8120;
我已经尝试了一切。 似乎什么都不起作用。 有人能告诉我我我出了什么问题吗?
#include "DSP28x_Project.h"//器件头文件和示例包含文件
#include
#include
#include
//此文件中找到的函数的原型语句。
void InitEPwm1Example (void);
void InitEPwm2Example (void);
void InitEPwm3Example (void);
void InitEPwm4Example (void);
void InitEPwm5Example (void);
void InitEPwm6Example (void);
中断 void epwm1_ISR (void);
中断 void epwm2_ISR (void);
中断 void epwm3_ISR (void);
中断 void epwm4_ISR (void);
中断空 epwm5_ISR (空);
中断空 epwm6_ISR (空);
浮点 Ta、Tb、Tc、Tas、TBS、TCs、Toffset、Tzero、tff、Tmax、Tmin、Tax、TBX、tcx;
浮点 TS.0005、ma=1;
int a;
int Vdc = 200;
int j、k、l、x、y、z;
void main (void)
{
//初始化系统控制:
// PLL、安全装置、启用外设时钟
InitSysCtrl();
/*为所选引脚启用内部上拉*/
//用户可以启用或禁用上拉。
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;//启用 GPIO0上的上拉电阻(EPWM1A)
GpioCtrlRegs.GPAPUD.bit.GPIO1=0;
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO3=0;
GpioCtrlRegs.GPAPUD.bit.GPIO4=0;
GpioCtrlRegs.GPAPUD.bit.GPIO5=0;
GpioCtrlRegs.GPAPUD.bit.GPIO6=0;
GpioCtrlRegs.GPAPUD.bit.GPIO7=0;
GpioCtrlRegs.GPAPUD.bit.GPIO8=0;
GpioCtrlRegs.GPAPUD.bit.GPIO9=0;
GpioCtrlRegs.GPAPUD.bit.GPIO10=0;
GpioCtrlRegs.GPAPUD.bit.GPIO11=0;
/*使用 GPIO 寄存器配置 ePWM-1引脚*/
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;//将 GPIO0配置为 EPWM1A
GpioCtrlRegs.GPAMUX1.bit.GPIO1=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO3=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO4=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO5=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO6=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO7=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO8=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO9=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO10=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO11=1;
GpioCtrlRegs.GPBMUX2.bit.GPIO61=0;
GpioCtrlRegs.GPBMUX2.bit.GPIO62=0;
GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 0;
GpioCtrlRegs.GPCMUX1.bit.GPIO64=0;
GpioCtrlRegs.GPCMUX1.bit.GPIO65=0;
GpioCtrlRegs.GPCMUX1.bit.GPIO66=0;
GpioCtrlRegs.GPCMUX1.bit.GPIO67 = 0;
GpioCtrlRegs.GPCMUX1.bit.GPIO68=0;
GpioCtrlRegs.GPCMUX1.bit.GPIO69=0;
GpioCtrlRegs.GPCMUX1.bit.GPIO70=0;
GpioCtrlRegs.GPCMUX1.bit.GPIO71 = 0;
GpioCtrlRegs.GPCMUX1.bit.GPIO72=0;
GpioCtrlRegs.GPBDIR.bit.GPIO61=1;
GpioCtrlRegs.GPBDIR.bit.GPIO62=1;
GpioCtrlRegs.GPBDIR.bit.GPIO63 = 1;
GpioCtrlRegs.GPCDIR.bit.GPIO64=1;
GpioCtrlRegs.GPCDIR.bit.GPIO65=1;
GpioCtrlRegs.GPCDIR.bit.GPIO66=1;
GpioCtrlRegs.GPCDIR.bit.GPIO67=1;
GpioCtrlRegs.GPCDIR.bit.GPIO68=1;
GpioCtrlRegs.GPCDIR.bit.GPIO69=1;
GpioCtrlRegs.GPCDIR.bit.GPIO70=1;
GpioCtrlRegs.GPCDIR.bit.GPIO71 = 1;
GpioCtrlRegs.GPCDIR.bit.GPIO72=1;
EDIS;
//禁用 CPU 中断
Dint;
//将 PIE 控制寄存器初始化为默认状态
InitPieCtrl();
//禁用 CPU 中断并清除所有 CPU 中断标志:
IER = 0x0000;
IFR = 0x0000;
//使用指向 shell Interrup 的指针初始化 PIE 矢量表
//服务例程(ISR)。
InitPieVectTable();
//此示例中使用的中断被重新映射到
//此文件中的 ISR 函数。
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.EPWM1_INT =&epwm1_ISR;
PieVectTable.EPWM2_INT =&epwm2_ISR;
PieVectTable.EPWM3_INT =&epwm3/ISR;
PieVectTable.EPWM4_INT =&epwm4_ISR;
PieVectTable.EPWM5_INT =&epwm5_ISR;
PieVectTable.EPWM6_INT =&epwm6_ISR;
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
EDIS;
InitEPwm1Examples();
InitEPwm2Examples();
InitEPwm3Examples();
InitEPwm4Examples();
InitEPwm5Examples();
InitEPwm6Examples();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;
//启用连接到 EPWM1-3 INT 的 CPU INT3:
IER |=(M_INT3 | M_INT2);
//在 PIE 中启用 ePWM INTn:组3中断1-3
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
PieCtrlRegs.PIEIER3.bit.INTx3=1;
PieCtrlRegs.PIEIER3.bit.INTx4 = 1;
PieCtrlRegs.PIEIER3.bit.INTx5 = 1;
PieCtrlRegs.PIEIER3.bit.INTx6=1;
PieCtrlRegs.PIEIER2.bit.INTx1 = 1;
PieCtrlRegs.PIEIER2.bit.INTx2 = 1;
PieCtrlRegs.PIEIER2.bit.INTx3=1;
PieCtrlRegs.PIEIER2.bit.INTx4 = 1;
PieCtrlRegs.PIEIER2.bit.INTx5 = 1;
PieCtrlRegs.PIEIER2.bit.INTx6=1;
//启用全局中断和更高优先级的实时调试事件:
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM
//空闲循环。 只需坐下来循环(可选):
for (;;)
{
asm (" NOP");
}
}
中断 void epwm1_ISR (void)
{
if (j>=2000)
{
J=0;
}
k=j+667;
if (k>=2000)
{
k=k-2000;
}
L=j+1334;
if (l>=2000)
{
L=l-2000;
}
X=a[j]*8120;
y=a[k]*8120;
Z=a[l]*8120;
TA=(x*TS)/Vdc;
TB=(y*TS)/Vdc;
Tc=(z*TS)/Vdc;
Tmax = Ta;
TMIN = Ta;
if (TB>Tmax){Tmax = TB;}
if (TB Tmax){Tmax = TC;}
IF (Tc