请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28379D 我希望能够单独控制 ePWMxA 和 ePWMxB。
完全停止 ePWM 的代码不会强制两个引脚都为零。 ePWMxA 引脚决定 ePWMxB 引脚。
我可能错过了一些 ePWM 设置。
void stop_pwm_gpio (void) { // //设置操作 // EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR; EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; //在事件 A 上设置 PWM1A、递增计数 EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; //在事件 A 上清除 PWM1A,递减计数 EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR; EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR; EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR; //在事件 B 上设置 PWM1B,向上计数 EPwm1Regs.AQCTLB.bit.CAD = AQ_CLEAR; //在事件 B 上清除 PWM1B,倒计数 EPwm1Regs.AQCTLB.bit.PRD = AQ_CLEAR; // //设置操作 // EPwm2Regs.AQCTLA.bit.ZRO = AQ_CLEAR; EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR; //在事件 A 上设置 PWM1A、递增计数 EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR; //在事件 A 上清除 PWM1A,递减计数 EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR; EPwm2Regs.AQCTLB.bit.ZRO = AQ_CLEAR; EPwm2Regs.AQCTLB.bit.CAU = AQ_CLEAR; //在事件 B 上设置 PWM1B,向上计数 EPwm2Regs.AQCTLB.bit.CAD = AQ_CLEAR; //在事件 B 上清除 PWM1B,倒计数 EPwm2Regs.AQCTLB.bit.PRD = AQ_CLEAR; // //设置操作 // EPwm5Regs.AQCTLA.bit.ZRO = AQ_CLEAR; EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR; //在事件 A 上设置 PWM1A、递增计数 EPwm5Regs.AQCTLA.bit.CAD = AQ_CLEAR; //在事件 A 上清除 PWM1A,递减计数 EPwm5Regs.AQCTLA.bit.PRD = AQ_CLEAR; EPwm5Regs.AQCTLB.bit.ZRO = AQ_CLEAR; EPwm5Regs.AQCTLB.bit.CAU = AQ_CLEAR; //在事件 B 上设置 PWM1B,向上计数 EPwm5Regs.AQCTLB.bit.CAD = AQ_CLEAR; //在事件 B 上清除 PWM1B,倒计数 EPwm5Regs.AQCTLB.bit.PRD = AQ_CLEAR; }
这里是我为其中一个 EPWM 所做的 EPWM 设置、
void Init_U_PWM () { // //设置 TBCLK // EPwm1Regs.TBPRD =计数; //设置计时器周期801 TBCLK EPwm1Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0 EPwm1Regs.TBCTR = 0x0000; //清除计数器 // //设置比较值 // EPwm1Regs.CMPA.bit.CMPA = 500;//设置比较 A 值-初始标称值 // //设置计数器模式 // EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上和向下计数 EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁用相位加载 EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; //时钟与 SYSCLKOUT 的比率 EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // //设置隐藏 // EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//零负载 EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // //设置操作 // EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR; EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; //在事件 A 上设置 PWM1A、递增计数 EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; //在事件 A 上清除 PWM1A,递减计数 EPwm1Regs.AQCTLA.bit.PRD = AQ_SET; EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR; //在事件 B 上设置 PWM1B,向上计数 EPwm1Regs.AQCTLB.bit.CAD = AQ_SET; //在事件 B 上清除 PWM1B,倒计数 EPwm1Regs.AQCTLB.bit.PRD = AQ_CLEAR; // //死区设置 // EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE; EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; EPwm1Regs.DBRED.bit.DBRED = db; EPwm1Regs.DBFED.bit.DBFED = db; // //中断,我们将在其中更改比较值 // EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //选择“零时 INT”事件 EPwm1Regs.ETSEL.bit.INTEN = 1; //启用 INT EPwm1Regs.ETPS.bit.INTPRD = 1; //在发生第一个事件 时生成 INT }
请告诉我如何阻止 ePWMxA 在 ePWMxB 上独断。 我想在不使用 GPIO 数据零方法的情况下关闭这两个引脚。
