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:TRIP_ZONE 配置

Guru**** 2582405 points


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

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

器件型号:LAUNCHXL-F28379D

工具/软件:Code Composer Studio

你好

当我使用 SC TZ GPIO24或59运行 TZ 时、在我的程序中配置了类似这样的 TZ

它被跳闸(无 PWM 波形)、这意味着它没有进入 ISR  


#include "F28x_Project.h"
#include "math.h"
#include
#include
#define PWM_PRD 10000;
#define Phi1 1500;//(625) 45度相位
#define Phi2 1500;//(625) 45度相位
#define PI 3.14159265358979323846

//uint32 EPwm1TZIntCount;
//uint32 EPwm2TZIntCount;
//void InitTzGpio (void);
void InitEPwm1_2Example (void);
void LED_init();控制卡上的//LED
//void InitEPwm2Examples(void);//void InitEPwm3Examples(void);//void InitEPwm4Examples(void);//void InitEPwm5Examples(void);//void InitEPwm6Examples(void);
//void InitEPwmGpio_TZ (void);
_interrupt void epwm1_ISR (void);
unsigned int i=0、m=0、k=0;
unsigned int a=0;
unsigned int b[101]={0};
void main (void)

InitSysCtrl();
对于(m=0;m<100;m++)

a=sin (pi*0.02*m);
b[m]= 5000*A + 5000;//50%半正弦波周期。

B[100]=0;
InitGpio();
EALLOW;
InitEPwm1Gpio();
InitEPwm2Gpio();
InitEPwm3Gpio();
InitEPwm4Gpio();
InitEPwm5Gpio();
InitEPwm6Gpio();
// InitTzGpio();//TZ1 = GPIO12、TZ2 = GPIO13
// InitEPwmGpio_TZ ();
//GpioCtrlRegs.GPBDIR.bit.GPIO52=1;
EDIS;
Dint;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.EPWM1_INT =&epwm1_ISR;
InitEPwm1_2Examples();
//InitEPwm2Examples();//InitEPwm3Examples();//InitEPwm4Examples();//InitEPwm5Examples();//InitEPwm6Examples();
EDIS;
IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
PieCtrlRegs.PIEIER3.bit.INTx3=1;
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM
for (;;)

ASM (" NOP");


_interrupt void epwm1_ISR (void)

GpioDataRegs.GPBDAT.bit.GPIO52=1;
GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 1;// GPIO26 = GPIO26 //绿色_1
if (EPwm1Regs.TZFlG.bit.OST = 0 && EPwm2Regs.TZFlG.bit.OST = 0)
{//if#1无故障、执行 ISR
a=sin (pi*0.02*i);
如果(A>=0)
{//if#2
EPwm1Regs.CMPA.bit.CMPA =b[i];//EPwm1Regs.CMPB.bit.CMPB =b[i];
EPwm2Regs.CMPA.bit.CMPA =b[i];// EPwm2Regs.CMPB.BIT.CMPB =b[i];
EPwm3Regs.CMPA.bit.CMPA =b[i];// EPwm3Regs.CMPB.BIT.CMPB =b[i];
EPwm4Regs.CMPA.bit.CMPA =b[i];// EPwm4Regs.CMPB.BIT.CMPB =b[i];
EPwm5Regs.CMPA.bit.CMPA =b[i];// EPwm5Regs.CMPB.bit.CMPB =b[i];
EPwm6Regs.CMPA.bit.CMPA =b[i];// EPwm6Regs.CMPB.bit.CMPB =b[i];

其他
{//else for if#2
EPwm1Regs.CMPA.bit.CMPA =b[i];// EPwm1Regs.CMPB.bit.CMPB =b[i];
EPwm2Regs.CMPA.bit.CMPA =b[i];// EPwm2Regs.CMPB.bit.CMPB =b[i];
EPwm3Regs.CMPA.bit.CMPA =b[i];// EPwm3Regs.CMPB.bit.CMPB =b[i];
EPwm4Regs.CMPA.bit.CMPA =b[i];// EPwm4Regs.CMPB.BIT.CMPB =b[i];
EPwm5Regs.CMPA.bit.CMPA =b[i];// EPwm5Regs.CMPB.bit.CMPB =b[i];
EPwm6Regs.CMPA.bit.CMPA =b[i];// EPwm6Regs.CMPB.bit.CMPB =b[i];
}//end of else for IF#2
i++;
如果(i=101)
{//if#3
i=0;}//end of if#3

EALLOW;
//EPwm1Regs.TZCLR.bit.OST = 1;
//EPwm1Regs.TZCLR.bit.INT = 1;
EDIS;
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
GpioDataRegs.GPBDAT.bit.GPIO52=0;
}//f1 TZ1的末端、用于 PWM 整流器故障
else //单次触发故障
{//else for if#1
GpioDataRegs.GPBDAT.bit.GPIO52=0;
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 1;// GPIO25 = GPIO25 //红色
}//end of else for if#1

}//ISR 结束
空 InitEPwm1_2Examples()

GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 1;// GPIO27 = GPIO27 //绿色_2此 LED 亮起  

////设置计数器模式//
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
//时钟设置
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置重影//
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_IMMETERM;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
//设置比较 A 值
EPwm1Regs.AQCTLA.bit.PRD = AQ_SET;//在事件 A 上设置 PWM1A、向上
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;//在事件 B 上清除 PWM1A,向下
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;//在事件 A 上设置 PWM1B、向上
EPwm1Regs.AQCTLB.bit.PRD = AQ_CLEAR;//在事件 B 上清除 PWM1B,向下
//PWM 设置
EPwm1Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm1Regs.TBPHS.bit.TBPHS = 0;//相位为0
EPwm1Regs.TBCTR = 0;
////设置计数器模式//
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载
EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置重影//
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_IMMETERM;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
////设置操作//
EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR;//在事件 A 上设置 PWM1A、向上
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;//在事件 B 上清除 PWM1A、向下
EPwm2Regs.AQCTLB.bit.PRD = AQ_SET;//在事件 A 上设置 PWM1B、向上
EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;//在事件 B 上清除 PWM1B,向下
EPwm2Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm2Regs.TBPHS.bit.TBPHS = 0;//相位为0
EPwm2Regs.TBCTR = 0;
////设置计数器模式//
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载
EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置重影//
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_IMMETERM;
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
////设置操作//
EPwm3Regs.AQCTLA.bit.PRD = AQ_SET;//在事件 A 上设置 PWM1A、向上
EPwm3Regs.AQCTLA.bit.CAU = AQ_CLEAR;//在事件 B 上清除 PWM1A,向下
EPwm3Regs.AQCTLB.bit.PRD = AQ_CLEAR;//在事件 A 上设置 PWM1B、向上
EPwm3Regs.AQCTLB.bit.CBU = AQ_SET;//在事件 B 上清除 PWM1B,向下
EPwm3Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm3Regs.TBPHS.bit.TBPHS = 10000 - PHI1;//相位为0
EPwm3Regs.TBCTR = 0;
////设置计数器模式//
EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
EPwm4Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载
EPwm4Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置重影//
EPwm4Regs.CMPCTL.bit.SHDWAMODE = CC_IMMETERM;
EPwm4Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
////设置操作//
EPwm4Regs.AQCTLA.bit.PRD = AQ_CLEAR;//在事件 A 上设置 PWM1A、向上
EPwm4Regs.AQCTLA.bit.CAU = AQ_SET;//在事件 B 上清除 PWM1A、向下
EPwm4Regs.AQCTLB.bit.PRD = AQ_SET;//在事件 A 上设置 PWM1B、向上
EPwm4Regs.AQCTLB.bit.CBU = AQ_CLEAR;//在事件 B 上清除 PWM1B,向下
EPwm4Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm4Regs.TBPHS.bit.TBPHS = 10000-PHI1;//相位为0
EPwm4Regs.TBCTR = 0;
////设置计数器模式//
EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上和向下计数 EPwm5Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载
EPwm5Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm5Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm5Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm5Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置重影//
EPwm5Regs.CMPCTL.bit.SHDWAMODE = CC_IMMETERM;
EPwm5Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
////设置操作//
EPwm5Regs.AQCTLA.bit.PRD = AQ_SET;//在事件 A 上设置 PWM1A、向上
EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR;//在事件 B 上清除 PWM1A,向下
EPwm5Regs.AQCTLB.bit.CBU = AQ_SET;//在事件 A 上设置 PWM1B、向上
EPwm5Regs.AQCTLB.bit.PRD = AQ_CLEAR;//在事件 B 上清除 PWM1B,向下
EPwm5Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm5Regs.TBPHS.bit.TBPHS = 10000 - Phi2;//相位为0
EPwm5Regs.TBCTR = 0;

////设置计数器模式//
EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
EPwm6Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载
EPwm6Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm6Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm6Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置重影//
EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_IMMETERM;
EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
////设置操作//
EPwm6Regs.AQCTLA.bit.PRD = AQ_CLEAR;//在事件 A 上设置 PWM1A、向上
EPwm6Regs.AQCTLA.bit.CAU = AQ_SET;//在事件 B 上清除 PWM1A、向下
EPwm6Regs.AQCTLB.bit.PRD = AQ_SET;//在事件 A 上设置 PWM1B、向上
EPwm6Regs.AQCTLB.bit.CBU = AQ_CLEAR;//在事件 B 上清除 PWM1B,向下
EPwm6Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm6Regs.TBPHS.bit.TBPHS = 10000 - Phi2;//相位为0
EPwm6Regs.TBCTR = 0;

//***跳匣区域***//
EALLOW;
//GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 1;// GPIO25 = GPIO25 //红色
//设置三倍频源
EPwm1Regs.TZSEL.bit.OSHT1 = TZ_ENABLE;//TZ1为单次触发模式
// EPwm2Regs.TZSEL.bit.OSHT1 = TZ_ENABLE;// TZ1为一次性
// EPwm3Regs.TZSEL.bit.OSHT1 = TZ_ENABLE;//TZ1为一次性
// EPwm1Regs.TZSEL.bit.CBC2 = TZ_ENABLE;//TZ2为逐周期
// EPwm2Regs.TZSEL.bit.CBC2 = TZ_ENABLE;//TZ2为逐周期
// EPwm3Regs.TZSEL.bit.CBC2 = TZ_ENABLE;//TZ2为逐周期
//设置行程操作
// EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_LO;//PWM1A 在三态时变为低电平
// EPwm1Regs.TZCTL.bit.TSB = TZ_FORCE_LO;//PWM1B 在三极时变为低电平
// EPwm2Regs.TZCTL.bit.TZA = TZ_FORCE_LO;//PWM2A 在三态时变为低电平
// EPwm2Regs.TZCTL.bit.TSB = TZ_FORCE_LO;//PWM2B 在三极时变为低电平
// EPwm3Regs.TZCTL.bit.TZA = TZ_FORCE_LO;//PWM3A 在三态时变为低电平
// EPwm3Regs.TZCTL.bit.TSB = TZ_FORCE_LO;//PWM3B 在三极时变为低电平
///
// EPwm5Regs.TZCTL.bit.TZA = TZ_FORCE_LO;//PWM5A 在三态时变为低电平
// EPwm5Regs.TZCTL.bit.TSB = TZ_FORCE_LO;// PWM5B 在三态时变为低电平
// EPwm6Regs.TZCTL.bit.TZA = TZ_FORCE_LO;//PWM6A 在三态时变为低电平
// EPwm6Regs.TZCTL.bit.TSB = TZ_FORCE_LO;//PWM6B 在三极时变为低电平
// EPwm1Regs.TZEINT.bit.OST = 1;
EDIS;
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 1;// GPIO25 = GPIO25 //红色
//启用 INT 设置
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT
EPwm1Regs.ETSEL.bit.INTEN = 1;//启用 INT
EPwm1Regs.ETPS.bit.INTPRD = et_1st;//在第三个事件发生时生成 INT
// GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 1;// GPIO25 = GPIO25 //红色

void LED_init ()

EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 1;// GPIO25 = GPIO25 //红色
// GPIO-39 - controlCARD 上的引脚功能= LED10
//GpioCtrlRegs.GPBMUX1.bit.GPIO39 = 0;// 0=GPIO、1=CANTX-A、2=Resv、3=Resv
//GpioCtrlRegs.GPBDIR.bit.GPIO39 = 1;// 1 =输出、0 =输入
// GpioDataRegs.GPACLEAR.bit.GPIO39 = 1;//如果->初始设置为低电平则取消注释
//GpioDataRegs.GPBSET.BIO39 = 1;//取消注释 if ->初始设置为高电平

// GPIO-34 - controlCARD 上的引脚功能= LED9
//GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;// 0=GPIO、1=COMP2OUT、2=EPWMSYNCI、3=ADCSOCA
//GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;// 1 =输出、0 =输入
// GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;//如果->初始设置为低电平则取消注释
//GpioDataRegs.GPBSET.BIO34 = 1;//取消注释 if ->初始设置为高电平

// GPIO-52 -引脚功能= LED 绿色
// GpioCtrlRegs.GPBMUX2.bit.GPIO52 = 0;//
// GpioCtrlRegs.GPBDIR.bit.GPIO52 = 1;// 1 =输出、0 =输入
// GpioDataRegs.GPBCLEAR.bit.GPIO52 = 1;//如果->初始设置为低电平、则取消注释
// GpioDataRegs.GPBSET.BIO52 = 1;//如果->初始设置为高电平则取消注释


// GPIO-53 -引脚功能= LED 绿色
// GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 0;//
// GpioCtrlRegs.GPBDIR.bit.GPIO53 = 1;// 1 =输出、0 =输入
// GpioDataRegs.GPBCLEAR.bit.GPIO53 = 1;//如果->最初设置为低电平、则取消注释
// GpioDataRegs.GPBSET.BIO53 = 1;//如果->初始设置为高电平则取消注释
// GPIO-56 -引脚功能=红色 LED
// GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 0;//
// GpioCtrlRegs.GPBDIR.bit.GPIO56 = 1;// 1 =输出、0 =输入
// GpioDataRegs.GPBCLEAR.bit.GPIO56 = 1;//如果->初始设置为低电平、则取消注释
// GpioDataRegs.GPBSET.BIO56 = 1;//如果->初始设置为高电平则取消注释
EDIS;

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

    我不理解这个问题。 您看到的问题是什么?所需的行为是什么? 您能布置波形吗?

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

    由于我们在几周内没有收到回复、我们将假定您能够解决问题。 如果不是这种情况、请拒绝解决方案或仅回复问题当前状态的主题帖。