请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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
