主题中讨论的其他器件:C2000WARE
我对 F280049的 ePWM 有疑问。
此 PWM 设置基于 TI 提供的以下示例程序“高电平有效互补 PWM”。
...\ti\c2000Ware_2_00_00_02\device_support\f2805x\examples\c28\ePWM_dul带\example_2805xEPwmDeadBand.c
空 InitEPwm3Examples()
当 TBCTR = 0时、此 PWM 设置已更改、因此 EPWMxA 输出变为高电平。
启动时会产生意外脉冲、如下所示。
请告诉我原因和对策。
下面列出了导致此问题的程序。
更改代码以红色显示。
(二
// //定义 // // //最大死区值 // #define EPWM1_MAX_DB 0x03FF #define EPWM2_MAX_DB 0x03FF #define EPWM3_MAX_DB 0x03FF #define EPWM1_MIN_DB 0 #define EPWM2_MIN_DB 0 #define EPWM3_MIN_DB 0 #define EPWM3_DB_DB/TRFT/TBR0 / TBIT_TBIT_T/ COUNT/#T/ COUNT/#T/ COUNT/#T/ COUNT//#COUNT/ COUNT/ COUNT/#COUNT/#T/ COUNT/#T/ 0x0 #define TB_COUNT_DOWN 0x1 #define TB_COUNT_updown 0x2 #define TB_FREEZE 0x3 // // PHSEN 位 // #define TB_disable 0x0 #define TB_enable 0x1 // //// PRDLD 位 // #define TB_SHADOW 0x0 #define TB_Immediate 0x1 // // SYNCOSEL 位 // #define TB_SYNC_IN 0x0 #define TB_CTR_ZERO 0x1 #define TB_CTR_CMPB 0x2 #define TB_SYNC_DISABLE 0x3 // // HSPCLKDIV 和 CLKDIV 位 // #define TB_DIV1 0x0 #define TB_DIV2 0x1 #define TB_DIV4 0x2 // // PHSDIR 位 // #define TB_DOWN 0x0 #define TB_UP 0x1 // //// CMPCTL (比较控制) // ////// LOADAMODE 和 LOADBMODE 位 // #define CC_CTR_ZERO 0x0 #define CC_CTR_PRD 0x1 #define CC_CTR_ZERO PRD 0x2 #define CC_LD_DISABLE 0x3 // // SHDWAMODE 和 SHDWBMODE 位 // #define CC_SHADOW 0x0 #define CC_Immediate 0x1 // // AQCTLA 和 AQCTLB (动作限定符控制) // //// ZRO、PRD、CAU、CAD、CBU、 CBD 位 // #define AQ_NO_ACTION 0x0 #define AQ_CLEAR 0x1 #define AQ_SET 0x2 #define AQ_TOGGLE 0x3 // //// DBCTL (死区控制) // //////输出模式位 // #define DB_disable 0x0 #define DBB_ENABLE 0x1 #define DBA_ENABLE 0x2 #define DB_FUL_ENABLE 0x3 // // POLSEL 位 // #define DB_ACTV_HI 0x0 #define DB_ACTV_LOC 0x1 #define DB_ACTV_HIC 0x2 #define DB_ACTV_LO 0x3 // //在模式 // #define DBA_ALL 0x0 #define DBB_RED_DBA_FED 0x1 #define DBA_RED_DBB_FED 0x2 #define DBB_ALL 0x3 // //// CHPCTL (斩波控制) // //// CHPEN 位 // #define CHR_DISABLE 0x0 #define CHR_ENABLE 0x1 // // CHPFRQ 位 // #define CHR_DIV1 0x0 #define CHR_DIV2 0x1 #define CHR_DIV3 0x2 #define CHR_DIV4 0x3 #define CHP CHP CHP DIV5 0x4 0x4 0x4 0x4 0x4 0x4 #define CHP DIV6 0x6 0x8 / define DIV6 0xDIV7 #define CHP DIV/ define DIV7 0xTH_DIV7 0xTH_DIV7 #define TH_DIV7 0x6 CHP2_8 0x1 #define CHP3_8 0x2 #define CHP4_8 0x3 #define CHP5_8 0x4 #define CHP6_8 0x5 #define CHP7_8 0x6 // // TZSEL (跳匣区域选择) // //// CBCn 和 OSHTn 位 //#define TZ_DISABLE 0x0 // TZL (定义 跳匣区域选择)// TZ1控制 // // //// TZA 和 TZB 位 // #define TZ_HIZ 0x0 #define TZ_FORCE_HI 0x1 #define TZ_FORCE_LO 0x2 #define TZ_NO_CHANGE 0x3 // // TZDCSEL (跳闸区域数字比较) // //// DCAEVT1、DCAEVT2、DCBEVT1、DCBEVT2位 // #TZ_EVT_DISABLE 0x0 #define TZ_DCAH_LOW 0x1 #define TZ_DCAH_HI 0x2 #define TZ_FCAL_LOW 0x3 #define TZ_FCAL_HI 0x4 #define TZ_FCAL_HI_DCAH_LOW 0x5 #define TZ_DCBH_LOW 0x1 #define TZ_DCBH_HI 0x2 #define TZ_DCBL_LOW 0x3 #define TZ_DCBL_HI 0x4 #define TZ_DCBL_HI_DCBH_LOW 0x5 // ETSEL (事件触发选择) // #define ET_DCAEVT1SOC 0x0 #define ET_CTR_ZERO 0x1 #define ET_CTR_PRD 0x2 #define ET_CTR_PRDZERO 0x3 #define ET_CTRL_CMPA 0x4 #define ET_CTRD_CMPA 0x5 #define ET_CTRU_CMPB 0x6 #define ET_CTRD_CMPB 0x7 // ETPS (事件触发器预分频) // // INTPRD_DISABLE 0x0 #define ET_SOPRD 位 #define 0x7 // ET_CAP0 0x1 #define ET_2ND 0x2 #define ET_3rd 0x3 // //步骤4. 初始化所有器件外设: //此示例不需要 EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0; // GPIO 配置 GpioCtrlRegs.GPAMUX1.bit.GPIO4=1;//将 GPIO4配置为 EPWM3A GpioCtrlRegs.GPAMUX1.bit.GPIO5=1;//将 GPIO5配置为 EPWM3B EDIS; EPwm3Regs.TBPRD = 6000; //设置计时器周期 EPwm3Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0 EPwm3Regs.TBCTR = 0x0000; //清除计数器 // //设置 TBCLK // EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数 EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁用相位加载 EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4; //时钟与 SYSCLKOUT 的比率 EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV4; //在示波器上观察速度慢 // //设置比较 // EPwm3Regs.CMPA.bit.CMPA = 3000; // //设置操作 // EPwm3Regs.AQCTLA.bit.ZRO = AQ_SET; //将 PWM3A 设置为零 EPwm3Regs.AQCTLA.bit.CAD = AQ_CLEAR; EPwm3Regs.AQCTLB.bit.CAU = AQ_CLEAR; //将 PWM3A 设置为零 EPwm3Regs.AQCTLB.bit.CAD = AQ_SET; // //高电平有效互补 PWM -设置死区 // EPwm3Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE; EPwm3Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; EPwm3Regs.DBCTL.bit.IN_MODE = DBA_ALL; EPwm3Regs.DBRED.ALL = EPWM3_MIN_DB; EPwm3Regs.DBFED.ALL = EPWM3_MIN_DB; // //中断,我们将在其中更改死区 // EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //选择“零时 INT”事件 EPwm3Regs.ETSEL.bit.INTEN = 1; //启用 INT EPwm3Regs.ETPS.bit.INTPRD = et_3rd; //在发生第三个事件时生成 INT EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1; EDIS;
