工具与软件:
ePWM 切换问题
我将编写一个程序、以便从5个 ePWM 模块生成 ePWM 信号。
ePWM 1、EPWM2、EPWM3有中断。 子卡上的 ePWM 引脚对于前3个 ePWM 块正常工作。
我在 ePWM 块4和5方面遇到问题、无法在子卡上的 ePWM 4A 和 ePWM 5A 引脚上看到 PWM 脉冲。 (ePWM 4和 ePWM 5没有中断)
我想缺少一些设置。 请帮助我确定缺少哪项设置。
我使用以下与 ePWM 4和5相关的设置:
DevCfgRegs.SOFTPRES2.bit.EPWM4 = 1;// ePWM1已复位
DevCfgRegs.SOFTPRES2.bit.EPWM4 = 0;// ePWM1已从复位状态释放
DevCfgRegs.CPUSEL0.bit.EPWM4=0;// Enable CPU1 to EPWM1 (启用 CPU1至 EPWM1)
EPwm4Regs.TBCTL.bit.CTRMODE = 0x3;// Disable the timer (禁用定时器)
EPwm4Regs.TBCTL.all = 0xC533;
EPwm4Regs.TBCTL.bit.SYNCOSEL = 1;
EPwm4Regs.TBCTL.bit.PRDLD = 0;
EPwm4Regs.TBCTL.bit.free_soft = 2;
EPwm4Regs.TBCTL.bit.HSPCLKDIV = 0x0;
EPwm4Regs.TBCTL.bit.CLKDIV = 0x0;
EPwm4Regs.TBCTR = 0x0000;//清除计时器计数器
EPwm4Regs.TBPRD = 1999;// ePWM CLK at 50kHz
EPwm4Regs.TBCTL.bit.PHSDIR = 0;// ePWM
EPwm4Regs.TBCTL.bit.PHSEN = 1;
EPwm4Regs.TBPHS.bit.TBPHS = 1200;
// EPwm4Regs.TBPHS.bit.TBPHS = 0x0000;//设置计时器相位
EPwm4Regs.etps.all = 0x0000;//配置 epwm1下溢时的中断
// EPwm4Regs.ETSEL.ALL = 0x0009;//启用 epwm1下溢时的中断
EPwm4Regs.ETSEL.bit.INTSEL = 1;
EPwm4Regs.ETSEL.bit.INTEN = 0;
EPwm4Regs.ETSEL.bit.INTSELCMP = 0;
// EPwm4Regs.ETSEL.ALL = 0x0009;
//测试25/11 EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;//影子 A 模式禁用
//test 25/11 EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;
EPwm4Regs.CMPCTL.bit.SHDWAMODE = 0;// SHADOW A mode disabled.(EPwm4Regs.CMPCTL.bit.SHDWAMODE = 0;//影子 A 模式禁用。
EPwm4Regs.CMPCTL.bit.SHDWBMODE = 0;
EPwm4Regs.CMPCTL.bit.LOADAMODE = 0;
EPwm4Regs.CMPCTL.bit.LOADBMODE = 0;
EPwm4Regs.AQCTLA.bit.CAU = 2;// EPWM1A 在 TBCTR=CMPA 计数时设置为低电平
EPwm4Regs.AQCTLA.bit.CAD = 2;// EPWM1A 在向下计数时设置为 TBCTR=CMPA 时设置为高电平
EPwm4Regs.AQCTLB.bit.cbd = 2;
EPwm4Regs.AQCTLB.bit.CBU = 2;
EPwm4Regs.AQCTLA.bit.PRD = 2;
EPwm4Regs.AQCTLA.bit.ZRO = 2;
EPwm4Regs.DBCTL.bit.OUT_MODE = 0;// Deadband disable、DB 将由栅极驱动器生成
EPwm4Regs.TBCTL.bit.CTRMODE = 0x0;// Enable the timer in count up/down mode (在向上/向下计数模式下启用定时器)
//ePWM 5块
DevCfgRegs.SOFTPRES2.bit.EPWM5 = 1;// ePWM1已复位
DevCfgRegs.SOFTPRES2.bit.EPWM5 = 0;// ePWM1已从复位状态释放
DevCfgRegs.CPUSEL0.bit.EPWM5=0;// Enable CPU1 to EPWM1 (启用 CPU1至 EPWM1)
EPwm5Regs.TBCTL.bit.CTRMODE = 0x3;// Disable the timer (禁用定时器)
EPwm5Regs.TBCTL.all = 0xC533;
EPwm5Regs.TBCTL.bit.SYNCOSEL = 1;
EPwm5Regs.TBCTL.bit.PRDLD = 0;
EPwm5Regs.TBCTL.bit.free_soft = 2;
EPwm5Regs.TBCTL.bit.HSPCLKDIV = 0x0;
EPwm5Regs.TBCTL.bit.CLKDIV = 0x0;
EPwm5Regs.TBCTR = 0x0000;//清除计时器计数器
EPwm5Regs.TBPRD = 1999;// ePWM CLK at 50kHz
// EPwm5Regs.TBCTL.bit.PHSDIR = 0;// ePWM
EPwm5Regs.TBCTL.bit.PHSEN = 1;
EPwm5Regs.TBPHS.bit.TBPHS = 1600;
// EPwm5Regs.TBPHS.bit.TBPHS = 0x0000;//设置计时器相位
EPwm5Regs.etps.all = 0x0000;//配置 epwm1下溢时的中断
// EPwm5Regs.ETSEL.ALL = 0x0009;//启用 epwm1下溢时的中断
EPwm5Regs.ETSEL.bit.INTSEL = 1;
EPwm5Regs.ETSEL.bit.INTEN = 0;
EPwm5Regs.ETSEL.bit.INTSELCMP = 0;
// EPwm4Regs.ETSEL.ALL = 0x0009;
//测试25/11 EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;//影子 A 模式禁用
//test 25/11 EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;
EPwm5Regs.CMPCTL.bit.SHDWAMODE = 0;// SHADOW A mode disabled.(EPwm5Regs.CMPCTL.bit.SHDWAMODE = 0;//影子 A 模式禁用。
EPwm5Regs.CMPCTL.bit.SHDWBMODE = 0;
EPwm5Regs.CMPCTL.bit.LOADAMODE = 0;
EPwm5Regs.CMPCTL.bit.LOADBMODE = 0;
EPwm5Regs.AQCTLA.bit.CAU = 2;// EPWM1A 在 TBCTR=CMPA 上按向上计数设置为低电平
EPwm5Regs.AQCTLA.bit.CAD = 2;// EPWM1A 在向下计数时设置为 TBCTR=CMPA 时设置为高电平
EPwm5Regs.AQCTLB.bit.cbd = 2;
EPwm5Regs.AQCTLB.bit.CBU = 2;
EPwm5Regs.AQCTLA.bit.PRD = 2;
EPwm5Regs.AQCTLA.bit.ZRO = 2;
EPwm5Regs.DBCTL.bit.OUT_MODE = 0;// Deadband Disabled (禁用死区)、DB 将由栅极驱动器生成
EPwm5Regs.TBCTL.bit.CTRMODE = 0x0;// Enable the timer in count up/down mode (在向上/向下计数模式下启用计时器)
GpioCtrlRegs.GPAGMUX1.bit.GPIO6 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO6 = 1;
GpioCtrlRegs.GPAGMUX1.bit.GPIO8 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO8 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO8 = 1;
我正在附加项目。
提前感谢
RCH