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/LAUNCHXL-F28379D:C2000™︎微控制器论坛

Guru**** 2589265 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/870747/ccs-launchxl-f28379d-c2000-microcontrollers-forum

器件型号:LAUNCHXL-F28379D

工具/软件:Code Composer Studio

我打算运行一个三相系统(每相三个逆变器)、下面写入的代码仅在 未对 PWM9进行编程的情况下构建、调试和运行。 但是、当我对 PWM9端口进行编程时、程序会成功构建和调试、但不会运行。 而 是弹出附加页面(F2837xD_DefaultISR.c)、系统无法正常工作。 我真的不知道如何解决这个问题。 当我配置 PWm10、PWM11、PWM12时、也会出现相同的纸张...

我是否需要向项目中添加特定文件?

//包含的文件
//我希望运行一个三相系统,每相三个逆变器

#include "F28x_Project.h"
#include 
#define TIMER_TBPRD 12500 //周期寄存

器#define example.1 //基本引脚配置示例
#define EXAMPLE2 0 //通信引脚示例

#define start1 GpioDataRegs.GPBDAT.BIO62//按钮 PB1只需闪烁#blink 58-61
#define stop1 GpioDataRegs.GPBDAT.GPIO63 //立即定义 Gpio961.bot1
按钮 Gpio68
/立即开始 Gpio68


FM=0; 双 PB1 = 0;双 PB2 = 0;双 PB3 = 0;双 PB4 = 0;
double y00=0;double y11=0;double y22=0;
double fc= 4000;double max1=0; double max=0;double min1=0;double min=0;
double theta=0;

double y2=0; double yr2=0;double y90=0;double VD=0;
double y1=0; double yr1=0;
double y=0; double yr=0;
double yr=0;double refr1=0
; double ref1=0;double ref2=0;double ref=0;double refd=0; double ref1=0;double ref2=0;
double ref2=0;double ref2 =0;

double
stepma =0;
double stepf =0;
double vf =0.01667;

//函数原型
#define example1
void GPIO_Setup1 (void);

void InitEPwm1Exampline (void);
void InitEPwm2Exampline (void
Inewid);void InitEP4inaid (void Inewelm);void Inaid InitEP4inaid (void Inaid Inaid Inew43

void InitEPwm5Example (void);
void InitEPwm6Example (void);
void InitEPwm7Example (void);
void InitEPwm8Example (void);
void InitEPwm9Example (void);

_interrupt void epwm1_ISR (void);
__interrupt void epwm2_ISR (void);
__interrupt void epwm3_ISR (void);
__interrupt void epwm4_ISR (void);
__interrupt void epwm5_ISR (void);
_interrupt void epwm6_ISR (void);
__interrupt void epwm7_ISR (void);
__interrupt void epwm8_ISR (void);
__interrupt void epwm9_ISR (void);

//主
void main (void)
{
//初始化系统控制// PLL、看门狗,启用外设 Initm9_ISR (void);


// PWM1和 PWM3 (void)时钟);//启用 PWM3 (void)
CpuSysRegs.PCLKCR2.bit.EPWM1=1;
CpuSysRegs.PCLKCR2.bit.EPWM2=1;
CpuSysRegs.PCLKCR2.bit.EPWM3=1;
CpuSysRegs.PCLKCR2.bit.EPWM4=1;
CpuSysRegs.PCLKCR2.bit.EPWM5=1;
CpuSysRegs.PCLKCR2.bit.EPWM6=1;
CpuSysRegs.PCLKCR2.bit.EPWM7=1;
CpuSysRegs.PCLKCR2.bit.EPWM8=1;
CpuSysRegs.PCLKCR2.bit.EPWM9=1;

//初始化 ePWM1、ePWM2、ePWM3的 GPIO 引脚
InitEPwm1Gpio();
InitEPwm2Gpio();
InitEPwm3Gpio();
InitEPwm4Gpio();
InitEPwm5Gpio();
InitEPwm6Gpio();
InitEPwm7Gpio();
InitEPwm8Gpio();
InitEPwm9Gpio();

//清除所有中断并初始化 PIE 矢量表,
Dint;
//将 PIE 控制寄存器初始化为默认状态。
InitPieCtrl();

//禁用 CPU 中断并清除所有 CPU 中断标志:
IER = 0x0000;
IFR = 0x0000;

//使用指向 shell 中断服务例程(ISR)的指针初始化 PIE 矢量表。
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;
PieVectTable.EPWM7_INT =&epwm7_ISR;
PieVectTable.EPWM8_INT =&epwm8_ISR;
PieVectTable.EPWM8_INT =&epwm9_ISR;


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

//初始化设备外设:

EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0;
EDIS;

InitEPwm1Examples();
InitEPwm2Examples();
InitEPwm3Examples();
InitEPwm4Examples();
InitEPwm5Examples();
InitEPwm6Examples();
InitEPwm7Examples();
InitEPwm8Examples();
InitEPwm9Examples();

EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;

//启用连接到 EPWM1-3 INT 的 CPU INT3:

IER |= M_INT3;

//在 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.PIEIER3.bit.INTx7=1;
PieCtrlRegs.PIEIER3.bit.INTx8 = 1;
PieCtrlRegs.PIEIER3.bit.INTx9=1;


//启用全局中断和更高优先级的实时调试事件:

EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM

#IF 示例1

GPIO_Setup1 ();

#endif

for (;;)
{
ASM (" NOP");
}

}

void GPIO_Setup1 (void)

{
EALLOW;
//在 GPIO6上启用 GPIO 输出
GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;//启用 GPIO6上的上拉
GpioDataRegs.GPBSET.BIO58 = 1;//加载输出锁存器
GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 0;// GPIO6 = GPIO6
GpioCtrlRegs.GPBDIR.bit.GPIO58 = 1;// GPIO6 =输出

GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;//启用 GPIO6上的上拉
GpioDataRegs.GPBSET.BIO59 = 1;//加载输出锁存器
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 0;// GPIO6 = GPIO6
GpioCtrlRegs.GPBDIR.bit.GPIO59 = 1;// GPIO6 =输出

GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;//启用 GPIO6上的上拉
GpioDataRegs.GPBSET.BIO60 = 1;//加载输出锁存器
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0;// GPIO6 = GPIO6
GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;// GPIO6 =输出

GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;//启用 GPIO6上的上拉
GpioDataRegs.GPBSET.BIO61 = 1;//加载输出锁存器
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;// GPIO6 = GPIO6
GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;// GPIO6 =输出

GpioCtrlRegs.GPBPUD.bit.GPIO62=0;
GpioCtrlRegs.GPBDIR.bit.GPIO62=0;// GPIO62=输入
GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0;// GPIO5
GpioCtrlRegs.GPBDIR.bit.GPIO63 = 0;// GPIO5

GpioCtrlRegs.GPCPUD.bit.GPIO68=0;
GpioCtrlRegs.GPCDIR.bit.GPIO68 = 0;// GPIO62 =输入
GpioCtrlRegs.GPCPUD.bit.GPIO69 = 0;// GPIO5
GpioCtrlRegs.GPCDIR.bit.GPIO69=0;// GPIO5
EDIS;
}

__interrupt void epwm1_ISR (void)
{
if (GpioDataRegs.GPBDAT.bit.GPIO62 =0)//正向斜升或加速

{
PB1=1;
}

如果(PB1==1)
{
STEPMA= 0.000125;
ma = ma + stepma; //斜升 mA

fm = fm +__divf32 (stepma、vf);//斜升频率
如果(FM >=60) FM=60;//斜升

stepf =__divf32 (fm、fc); //角度的步长增加
Theta = theta + Stepf; //更新 θ

如果(θ>= 1)θ= 0;
如果(ma >= 1) ma = 1;

y=_sinpuf32 (theta);y90=_sinpuf32 (theta-0.25);y1=_sinpuf32 (theta-0.3333);y2=_sinpuf32 (theta-0.6666);//加速

如果(y>y1) max1=y;
否则 max1=y1;
if (max1>Y2) max=max1;
否则 max = Y2;

如果(<y1) min1=y;
否则 min1=y1;

IF (最小值1 


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

    您好!

    我认为这是由于以下代码行中的拼写错误造成的。 未分配 EPWM9中断的 ISR、导致执行默认 ISR。 由于 EPWM10 及以上实例 ISR 也未配置、因此将执行相同的解 ISR。

    [引用用户="Marius Jiope ]

    PieVectTable.EPWM8_INT = &epwm8_isr;
          PieVectTable.EPWM8_INT = &epwm9_isr;

    [/报价]

    谢谢

    Vasudha