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.

[参考译文] TMDSCNCD28379D:ePWM 4A 未显示脉冲

Guru**** 2465890 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1492304/tmdscncd28379d-epwm-4a-not-showing-pulses

器件型号:TMDSCNCD28379D

工具与软件:

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

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

    您好!

    我会及时查看和回复。

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

    您好、Stevan。

    我刚才检查了块1、2和3的 EPWM 中断是否被禁用。 没关系。 但是、EPWM4和 EPWM5未在子卡上的相应引脚上显示任何脉冲。  

    感谢您的快速响应。 请帮助我制定解决方案。  

    此致

    RCH

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

    您好!

    例如、在配置 EPW3和 EPWM4时、您执行了哪些不同操作?

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

    e2e.ti.com/.../6281.MPB.zip

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

    您好!

    感谢您提供更多详细信息。 我检查了您的配置、但为 EPWM4和 EPWM5设置的 AQCTLA 和 AQCTLB 寄存器存在问题。

    [报价 userid="604099" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1492304/tmdscncd28379d-epwm-4a-not-showing-pulses/5736696 #5736696"]EPwm4Regs.AQCTLA.bit.CAD = 2;//在向下计数时 TBCTR=CMPA 设置为高电平
    EPwm4Regs.AQCTLB.bit.cbd = 2;
    EPwm4Regs.AQCTLB.bit.CBU = 2;
    EPwm4Regs.AQCTLA.bit.PRD = 2;
    EPwm4Regs.AQCTLA.bit.ZRO = 2;[/QUOT]

    您正在设置 ePWM、以便在 CAD、CBD 事件等事件上运行得更高 但您永远不会将其清除并强制其变为低电平、因此输出不会切换。 只会保持高电平。 您为其他 ePWM 正确配置了它。

    [报价 userid="604099" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1492304/tmdscncd28379d-epwm-4a-not-showing-pulses/5736696 #5736696"]EPwm3Regs.AQCTLA.bit.CAU = 1;//在上电计数 TBCTR=CMPA 时将 EPWM1A 设置为低电平
    // EPwm2Regs.AQCTLA.bit.CAD = 2;// EPWM1A 在 TBCTR=CMPA 时设置为高电平(在向下计数时)
    // EPwm2Regs.AQCTLB.bit.cbd = 2;
    EPwm3Regs.AQCTLB.bit.CBU = 1;
    EPwm3Regs.AQCTLA.bit.PRD = 2;[/QUOT]

    请参阅器件 TRM 中的寄存器说明(AQCTLA 和 AQCTLB)来设置正确的操作: https://www.ti.com/lit/ug/spruhm8k/spruhm8k.pdf

    此致、

    Stevan D.