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.
您好!
我需要知道、如果我配置 ePWM、会发生什么情况、如下所述
INTSEL = 1 (CTR = 0时的 Genrate 中断);
CMPA 加载模式在 CTR=0时为影子;
如果我在 ISR 中更新 CMPA 值、将为比较前一个或当前获取哪个值? 换句话说、第一个 ISR 将生成、还是 CMPA 值将更新?
EPwm1_ISR ()//在 CTR=0时的额定电压
{
//CPA 在此加载、那么电流将流向我在此处加载的活动寄存器、还是在最后一个中断中加载到影子寄存器中的上一个?
}
我想在这种情况下、它会延迟一个周期?
在 HVACI_Scalar 的控制套件示例中、在此示例中、它们使用的配置与上述配置类似、我想在这种情况下、三相正弦 PWM 的生成会延迟一个周期? 我在下面提到了示例配置。
/ /
//使用 EPWM1时基启用 CNT_ZERO 中断
EPwm1Regs.ETSEL.bit.INTEN = 1;//启用 EPWM1INT 生成
EPwm1Regs.ETSEL.bit.INTSEL = 1;//启用中断 CNT_ZERO 事件
EPwm1Regs.ETPS.bit.INTPRD = 1;//在第1个事件上生成中断
EPwm1Regs.ETCLR.bit.INT = 1;//启用更多中断
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.EPWM1_INT = MainISR;
EDIS;
/*------------------
F2803x 比较控制寄存器的初始化常量。
-------------------------------------------------- *
#define CMPCTL_INIT_STATE (LOADAMODE_ZRO +\
LOADBMODE_ZRO +\
SHDWAMODE_SHADOW +\
SHDWBMODE_SHADOW)
// MainISR
中断空 MainISR (空)
{
//----------------------------------
//连接 SVGEN_MF 模块的输入并调用空间矢量发生器。 宏
//----------------------------------
svgen_MF1.gain = vhz1.VoltOut;
svgen_MF1.Freq = vhz1.Freq;
SVGENMF_MACRO (svgen_MF1);
//----------------------------------
//连接 PWM_DRV 模块的输入并调用 PWM 信号生成宏
//----------------------------------
pwm1.Mfunc1 = svgen_MF1.Ta;
pwm1.MfuncC2 = svgen_MF1.TB;
pwm1.MfuncC3 = svgen_MF1.TC;
PWM_MACRO (1、2、3、pwm1)//计算新的 PWM 比较值
}
Shubham、
在影子加载时、写入被延迟到一个周期。 在这种情况下、应加载 CTR = 0之前写入 CMPA 中的任何内容。
如果在 ISR 内部更新 CMPA 值、则会在影子加载后发生。 因此、在下一个周期的影子负载之前、它不会生效。
此致、
Cody
您好!
感谢您的回复!
我在下面也有同样的疑问,需要更多的解释。
在 HVACI_Scalar 的控制套件示例(ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVACI_Scalar)中、在这个示例中、它们使用的配置与我在上面的线程中要求的配置类似(CMPA 加载和生成用于 CTR 上 CMPR 更新的 ISR)、我认为在这种情况下三相 PWM 生成会被一个周期延迟 (将比较旧的采样值)? 我在下面提到了示例配置。
请仔细检查、在此示例中、我知道 PWM 是否会延迟一个周期? 如果它被延迟、那么它是否会在旋转电机中产生任何性能问题?
/ /
//使用 EPWM1时基启用 CNT_ZERO 中断
EPwm1Regs.ETSEL.bit.INTEN = 1;//启用 EPWM1INT 生成
EPwm1Regs.ETSEL.bit.INTSEL = 1;//启用中断 CNT_ZERO 事件
EPwm1Regs.ETPS.bit.INTPRD = 1;//在第1个事件上生成中断
EPwm1Regs.ETCLR.bit.INT = 1;//启用更多中断
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.EPWM1_INT = MainISR;
EDIS;
/*------------------
F2803x 比较控制寄存器的初始化常量。
-------------------------------------------------- *
#define CMPCTL_INIT_STATE (LOADAMODE_ZRO +\
LOADBMODE_ZRO +\
SHDWAMODE_SHADOW +\
SHDWBMODE_SHADOW)
// MainISR
中断空 MainISR (空)
{
//----------------------------------
//连接 SVGEN_MF 模块的输入并调用空间矢量发生器。 宏
//----------------------------------
svgen_MF1.gain = vhz1.VoltOut;
svgen_MF1.Freq = vhz1.Freq;
SVGENMF_MACRO (svgen_MF1);
//----------------------------------
//连接 PWM_DRV 模块的输入并调用 PWM 信号生成宏
//----------------------------------
pwm1.Mfunc1 = svgen_MF1.Ta;
pwm1.MfuncC2 = svgen_MF1.TB;
pwm1.MfuncC3 = svgen_MF1.TC;
PWM_MACRO (1、2、3、pwm1)//计算新的 PWM 比较值
}
您的理解是正确的。 实际上、相对于控制环路的速度、机械系统对输入响应缓慢。
如果不使用影子加载、则可能会在整个 PWM 周期内丢失事件、这对系统的影响要大得多。
此致、
Cody
您好!
我明白了、但我仍然有一个疑问、就像您说过的"如果您不使用影子加载、那么在整个 PWM 周期内可能会丢失事件、这对系统的影响要大得多"。 我没有得到它、如果我使用立即加载、为什么它会错过该事件?
我通过将此配置更改为立即加载来运行电机、电机产生的声音不能正常运行、根据您的说法、这是没有发生的事件。
此致、
Shubham
Shubham、
[引用用户="Shubham Kant Dubey"]答对了,但我仍有一个疑问,因为您说过“如果您不使用影子加载,则可能会在整个 PWM 周期内丢失事件,这对系统的影响要大得多”。 我没有收到、如果我立即加载、为什么它会错过该事件?
PWM 模块执行"等于"比较、但不执行"大于或等于"比较。 因此、如果在 TBCTR = 201期间将 CMPA 值从800更改为200、则 CMPA 事件将会丢失。 CMPA 操作在下一个周期之前不会生效。 如果不使用影子加载、则需要确保软件中不会发生这种情况。
[引用 user="Shubham Kant Dubey"]我通过将此配置更改为立即加载来运行电机,电机产生的声音运行不正常,根据您的说法,这是缺少事件的。
我并不是想暗示这是您问题的原因、而只是您可能会或可能不会因为不使用影子负载而受到的影响。 如果您的电机未运行、则可能会出现许多问题、例如、您的控制环路可能无法正确调整。
此致、
Cody