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.
您好!
我们遇到了微控制器 TMS320F28377S 中的 PWM 问题。 逆变器中的微控制器控制 IGBT 模块、对于两个生产系列、此产品没有任何问题。 但在第三个系列中、逆变器开始发出一些奇怪的声音。 经过一些调查、我发现微控制器会生成错误的 PWM。 PWM 看起来像是 PWM 寄存器内部的比较器、在一个周期内忽略条件、并在下一个周期内关闭输出。
这种问题在恒定占空比(例如50%)下也会出现、因此不是一些数字问题。 在初始化后、仅设置一次占空比并用于主循环。 影响的只有一个因素是从 CMPA 到 CMPB 的开关计数器比较。 下面是初始化。对于 SWaP Boost = 1、正常、但对于 SWaP Boost = 0。
空 boostPwmConfig (空)
{ EALLOW; CpuSysRegs.PCLKCR2.bit.EPWM7 = 0x01; EPwm7Regs.TBPRD = TBPRD_16kHz;
EPwm7Regs.CMPA.bit.CMPA = 0; EPwm7Regs.CMPB.BIT.CMPB = 0;//比较 B = 500 TBCLK 计数 EPwm7Regs.TBPHS.ALL = 0;//将相位寄存器设置为零 EPwm7Regs.TBCTR = 0;//清除 TB 计数器 EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//对称 //EPwm7Regs.TBCTL.bit.PHSEN = TB_DISABLE;//相位加载被禁用
EPwm7Regs.TBCTL.bit.PHSEN = TB_ENABLE;//启用相位加载 EPwm7Regs.TBCTL.bit.PHSDIR = TB_UP; EPwm7Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm7Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;// TBCLK = SYSCLKOUT EPwm7Regs.TBCTL.bit.CLKDIV = TB_DIV1; ClkCfgRegs.PERCLKDIVSEL.BIT.EPWMCLKDIV = 0;// EPwm7Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm7Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm7Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;// CTR 上的负载=零 EPwm7Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// CTR 上的负载=零 EPwm7Regs.DBCTL.bit.OUT_MODE = DB_DISABLE; EPwm7Regs.TZFRC.bit.OST = 1; #ifdef swap_boost EPwm7Regs.AQCTLA.bit.CBU = AQ_SET; EPwm7Regs.AQCTLA.bit.CBD = AQ_CLEAR; EPwm7Regs.AQCTLB.bit.CAU = AQ_SET; EPwm7Regs.AQCTLB.bit.CAD = AQ_CLEAR; EPwm7Regs.DBCTL.bit.OUTSWAP=交换; 其他
EPwm7Regs.AQCTLA.bit.CAU = AQ_SET; EPwm7Regs.AQCTLA.bit.CAD = AQ_CLEAR; EPwm7Regs.AQCTLB.bit.CBU = AQ_SET; EPwm7Regs.AQCTLB.bit.CBD = AQ_CLEAR; EPwm7Regs.DBCTL.bit.OUTSWAP=NO_SWAP; #endif GpioCtrlRegs.GPAMUX1.bit.GPIO12=1;
GpioCtrlRegs.GPADIR.bit.GPIO12=1; GpioCtrlRegs.GPAMUX1.bit.GPIO13=1;
GpioCtrlRegs.GPADIR.bit.GPIO13 = 1; |
我还检查了所有板载电源、都可以。
这种现象仅发生在生产编号为4C-96AZKNW G4和4C-96C2GKW G4的微控制器中。 在从散射系列中为另一个微控制器重新供电后、未出现此问题。 每个微控制器的一个 PWM 中都存在问题、但不同的器件会出现不同的 PWM 输出问题、例如、一个器件上的 PWM7A 和 PWM7B、另一个器件上的 PWM6A 和 PWM6B。
导致此行为的原因可能是什么? 微控制器中存在缺陷? 焊接工艺过热? 可能有些初始化错误?
也许我还可以检查更多内容吗?
澄清一下、
这适用于您:
EPwm7Regs.AQCTLA.bit.CBU = AQ_SET; EPwm7Regs.AQCTLA.bit.CBD = AQ_CLEAR; EPwm7Regs.AQCTLB.bit.CAU = AQ_SET; EPwm7Regs.AQCTLB.bit.CAD = AQW7Regs.AQSW1.AQSW1.bit.ADC1; EPwm7REG1.AQSW1.AQSWLAG.REG1.AQ1AQSWLAG.REG1.bit
但是、以下代码不起作用:
EPwm7Regs.AQCTLA.bit.CAU = AQ_SET; EPwm7Regs.AQCTLA.bit.CAD = AQ_CLEAR; EPwm7Regs.AQCTLB.bit.CBU = AQ_SET; EPwm7Regs.AQCTLB.bit.CBD = AQW7Regs.AQSW1.AQSWLAG.0 ;EPwm7REG.DBT.OREG0.AP
NIMA
谢谢、我们将等待您的反馈!
NIMA
好的、我从程序员那里得到了答案、我也检查了两次。
原始寄存器声明如下所示:
EALLOW; CpuSysRegs.PCLKCR2.bit.EPWM7 = 0x01; EPwm7Regs.TBPRD = TBPRD_16kHz; EPwm7Regs.CMPA.bit.CMPA = 0; EPwm7Regs.CMPB.BIT.CMPB = 0;//比较 B = 500 TBCLK 计数 EPwm7Regs.TBPHS.ALL = 0;//将相位寄存器设置为零 EPwm7Regs.TBCTR = 0;//清除 TB 计数器 EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//对称 //EPwm7Regs.TBCTL.bit.PHSEN = TB_DISABLE;//相位加载被禁用 EPwm7Regs.TBCTL.bit.PHSEN = TB_ENABLE;//启用相位加载 EPwm7Regs.TBCTL.bit.PHSDIR = TB_UP; EPwm7Regs.TBCTL.bit.PRDLD = TB_SHADOW; EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm7Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;// TBCLK = SYSCLKOUT EPwm7Regs.TBCTL.bit.CLKDIV = TB_DIV1; ClkCfgRegs.PERCLKDIVSEL.BIT.EPWMCLKDIV = 0;// EPwm7Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm7Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm7Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;// CTR 上的负载=零 EPwm7Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// CTR 上的负载=零 EPwm7Regs.DBCTL.bit.OUT_MODE = DB_DISABLE; EPwm7Regs.AQCTLA.bit.CAU = AQ_SET; EPwm7Regs.AQCTLA.bit.CAD = AQ_CLEAR; EPwm7Regs.AQCTLB.bit.CBU = AQ_SET; EPwm7Regs.AQCTLB.bit.CBD = AQ_CLEAR; GpioCtrlRegs.GPAMUX1.bit.GPIO12=1; GpioCtrlRegs.GPADIR.bit.GPIO12=1; GpioCtrlRegs.GPAMUX1.bit.GPIO13=1; GpioCtrlRegs.GPADIR.bit.GPIO13 = 1; |
此设置对于我们的两个系列产品来说非常完美。 在第三个系列中、使用相同的组件、相同的电路板布局布线、但使用不同的微控制器生产编号、所述的问题已经开始。 因此、在检查之后、程序员发现、略有不同的声明问题消失了。 下面的代码可帮助您指定遇到 PWM7问题的器件、在本例中、它会有所帮助。
EPwm7Regs.AQCTLA.bit.CBU = AQ_SET;
EPwm7Regs.AQCTLA.bit.CBD = AQ_CLEAR; EPwm7Regs.AQCTLB.bit.CAU = AQ_SET; EPwm7Regs.AQCTLB.bit.CAD = AQ_CLEAR; EPwm7Regs.DBCTL.bit.OUTSWAP=交换; |
遗憾的是、这不能解决问题、因为在散射器件上、它可能是散射 PWM 问题、例如 PWM7或 PWM8等 我们不知道为什么具有相同程序代码的微控制器行为不正确、而以前情况良好。
您的配置看起来正确、不应导致任何问题。 您能否确保设置其余的 AQ 事件?
0 ->无操作(或 相应操作)
PRD -> 无操作(或相应的操作)
AQCTLA 和 AQCTLB 的 CAU/CAD/CBD/CAD -> 无操作(或相应操作)
我希望所有调整数咨委会的事件都能明确地反映他们的非法行为。
这是一个奇怪的问题、我无法重现、因此我们必须在他们的板上进行确定。
NIMA
我已向您发送了完整的初始化。 除了占空比外、在整个代码中不再设置 PWM7寄存器。
也许问题是寄存器的默认设置以及与之相关的可能危险?
这些设置没有问题。 让我们执行一些操作。 您能否将故障场景代码作为压缩的 CCS 项目发送? 生成错误的项目的完整代码。 我可以在我的多个板上尝试它。 如果我无法重新创建问题、那么我们需要一个客户电路板。
那么、我们是否可以压缩一个示例 CCS 项目、以便我可以首先在电路板上对其进行测试、并查看是否存在除 EPWM 设置之外的其他任何可能导致此问题的因素?
NIMA
问题可能出在 GPIO 设置中、可能是电路板上出现了意外情况。 但是、下一步是让我拥有完整的 CCS 项目、以便我可以尝试。
NIMA
Piotr、
在哪里可以为我打包完整代码?
NIMA
是的、当然、我可以向您发送完整的项目。 遗憾的是、代码是机密的、因此我会将该软件包放在公司的下拉框中。 是否可以在此处发送私人消息?
是的、请通过 E2E 向我发送友谊请求、我可以与您分享我的电子邮件。 但我主要是问 GPIO/ePWM 初始化示例项目、它重现了您的问题。 不是您的机密代码。
NIMA
Piotr、
我尚未收到 E2E 上的友谊请求、因此我可以向您发送我的电子邮件。
NIMA