主题中讨论的其他器件:TMS320F28384S、 C2000WARE
你好。
我是首尔国家科学技术大学的 Kihon Kim。
现在、我使用 TMS320F28384S 开发板载充电器。
但我有一个问题。
如果我打开控制板、所有 PWM 输出都会在极短的时间内发出高电平信号。
在此期间、如果直流链路中或某处存在电压、则会发生 ARM-SHORT。
GPIO 72和84是上拉电阻、我们使用闪存引导。
我能解决这个问题吗?
我期待你的答复。
谢谢。
此致。
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.
你好。
我是首尔国家科学技术大学的 Kihon Kim。
现在、我使用 TMS320F28384S 开发板载充电器。
但我有一个问题。
如果我打开控制板、所有 PWM 输出都会在极短的时间内发出高电平信号。
在此期间、如果直流链路中或某处存在电压、则会发生 ARM-SHORT。
GPIO 72和84是上拉电阻、我们使用闪存引导。
我能解决这个问题吗?
我期待你的答复。
谢谢。
此致。
抱歉。
我没有 TI EVM。
底部是代码的有问题部分。
CONF_ePWM_LOW (3、60.0);
void conf_ePWM_low (uint16 ch、float32 freq)
{
//设置操作
ePWM_Regs[ch]->AQCTLA.bit.ZRO = AQ_CLEAR;
ePWM_Regs[ch]->AQCTLA.bit.CAU = AQ_SET;
ePWM_Regs[ch]->AQCTLB.bit.ZRO = AQ_CLEAR;
ePWM_Regs[ch]->AQCTLB.bit.CAU = AQ_SET;
if (ch=3){
ePWM_Regs[ch]->TBCTL.bit.PHSEN = TB_DISABLE;
ePWM_Regs[ch]->EPWMSYNCOUTEN.bit.ZEROEN = SYNC_OUT_SRC_ENABLE;
ePWM_Regs[ch]->TBPHS.bit.TBPHS = 0;
}
否则、如果(ch!=3){
ePWM_Regs[ch]->TBCTL.bit.PHSEN = TB_ENABLE;
ePWM_Regs[ch]->EPWMSYNCINSEL.bit.SEL = SYNC_IN_SRC_SYNCOUT_EPWM4;
}
//设置 TBCLK
ePWM_Regs[ch]->TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数
ePWM_Regs[ch]->TBCTL.bit.PRDLD = TB_SHADOW;
ePWM_Regs[ch]->TBCTL.bit.HSPCLKDIV = TB_DIV1;
//ePWM_Regs[ch]->TBCTL.bit.CLKDIV = TB_DIV1;//0b110;///64
ePWM_Regs[ch]->CMPCTL.bit.SHDWAMODE = CC_IMME初 始值;//每0加载一次寄存器
ePWM_Regs[ch]->CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
//ePWM_Regs[ch]->CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
//ePWM_Regs[ch]->CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
ePWM_Regs[ch]->DBCTL.bit.in_mode = DBA_RED_DBB_FED;
//ePWM_Regs[ch]->DBCTL.bit.POLSEL = DB_ACTV_HI;
ePWM_Regs[ch]->DBCTL.bit.POLSEL = DB_ACTV_HIC;
ePWM_Regs[ch]->DBCTL.bit.out_mode = DB_full_enable;//死区时间
ePWM_Regs[ch]->AQSFRC.bit.RLDSF = 3;//立即
updateDuty (ch、0.0);
updatePhase (ch、0.0);
updateFreq (ch、freq);
updateDeadtime (ch、0.0);
}
您能找到可疑部件吗?
此致。
您好!
何时分配 CMPA 的值? 乍一看、我在这里的第一个本能是、在时钟启用且 AQ 已配置之后、才会分配 CMPA 值。 复位时、默认为 CMPA 分配一个0h 的值。 这意味着、时钟开始时、会同时发生两个事件- CTR=0和 CTR=CMPA (CAU)
如果我们从您的器件 TRM 中查看 AQ 优先级图表-
我们可以看到、当发生这种情况时、CAU 的 AQ 事件将触发、然后立即触发 CTR=0事件、即 AQ_SET 和 AQ_CLEAR。 这都是预期行为、但显然是在不希望的时候发生的。
更安全的实现方式是在 所有其他配置完成之前、不要分配 CTRMODE = TB_COUNT_UP。 如果我怀疑这是问题的根源、那么这将完全避免。
或者、ePWM 的实现通常包括在初始配置之前禁用 ePWM 外设的时钟、并在之后立即重新启用该时钟、以避免意外的 ePWM 事件。 例如,在[C2000Ware->Driverlib->f2838x->Examples->C28x->ePWM]中,ePWM_ex3_synchronization 示例具有以下代码行,其中“Board_init()”包含 ePWM 配置函数:
我希望这对您有所帮助、
Jason Osborn