请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28379D 您好!
我"简单地"尝试尽快将 PWM 强制为高电平或低电平(即时事件)、而无需等待 PWM 计数周期结束。
我通过以下方式初始化 ePWM:
void InitEPwm5(void)
{
// Over-sampling
//---------------------------------------------------------------------------------------
// Setup timebase
EPwm5Regs.TBCTL.bit.CTRMODE = 2; // Count up/down
EPwm5Regs.TBPRD = HALF_PERIOD; // Set timer period
EPwm5Regs.TBCTL.bit.PHSEN = 1; // Enable phase loading
EPwm5Regs.TBPHS.bit.TBPHS = HALF_PERIOD/2; // Phase is 90deg we might need to tweak this, but 90deg should ensure ADC sensing is 4x per PWM cycle
EPwm5Regs.TBCTR = 0x0000; // Clear counter
// Set TBCLK = EPWMCLK = 100MHz
EPwm5Regs.TBCTL.bit.HSPCLKDIV = 0; // Clock ratio to SYSCLKOUT
EPwm5Regs.TBCTL.bit.CLKDIV = 0; //
//EPwm3Regs.TBCTL.bit.SYNCOSEL = 1; // SYNC output on CTR = 0
EPwm5Regs.TBCTL.bit.SYNCOSEL = 0; // SYNCthrough
// Set up ADC trigger pulse to ADC SOC A & B
EPwm5Regs.ETSEL.bit.SOCAEN = 0; // Disable SOCA on A group
EPwm5Regs.ETSEL.bit.SOCBEN = 0; // Disable SOCB on A group
EPwm5Regs.ETSEL.bit.SOCASEL = 2; // Select SOCA on period match
EPwm5Regs.ETSEL.bit.SOCBSEL = 1; // Select SOCB on counter = 0
EPwm5Regs.ETSEL.bit.SOCAEN = 1; // Enable SOCA
EPwm5Regs.ETSEL.bit.SOCBEN = 1; // Enable SOCB
EPwm5Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
EPwm5Regs.ETPS.bit.SOCBPRD = 1; // Generate pulse on 1st event
//---------------------------------------------------------------------------------------
// Input control (managing switching of circuit breakers)
//---------------------------------------------------------------------------------------
// According to Steve we go along the following lines:
// - no EPWM triggering from the compares
// - EPwm5Regs.CMPA.but.CMPA or B can be any value as it will be ignored
// - AQCTLA CAU, CAD etc by default are zero (do nothing)
// - We do want to impose any deatime between PWM5A and B
// - PWMA = +ve breaker PWMB = -ve breaker
//how to force the outputs:
EPwm5Regs.AQSFRC.bit.RLDCSF = 3; // A software force event in AQSFRC is loaded immediately
EPwm5Regs.AQCSFRC.bit.CSFA = 01; // we can use this in code to force A output,00 = forcing is disabled,01=low 10 = high
EPwm5Regs.AQCSFRC.bit.CSFB = 01; // we can use this in code to force B output,00 = forcing is disabled, 01=low 10 = high
}
但是、当我实际执行我的代码时:
EPwm5Regs.AQCSFRC.bit.CSFA = 10; //Brk+ on EPwm5Regs.AQCSFRC.bit.CSFB = 10; //Brk- on
实际上没有发生任何事情。 如果我在初始化中删除了立即强制:
EPwm5Regs.AQSFRC.bit.RLDSF= 3;
那么、只有在这种情况下、当 CSFA/B 被执行时、输出被强制为高电平。 但是、这意味着我无论如何都要等到 PWM 的计数结束、并且不会立即连续施加!
您对我是否遗漏了什么有什么建议吗?
非常感谢、
Nicola