您好!
因此、在大约几千个周期后、不会随机调用 ePWM ISR。
那么、我对 ePWM 的初始化或设置有什么问题吗? 它运行时间几乎很长、很难找到问题。
谢谢、
Sagar
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 ISR。
那么、我对 ePWM 的初始化或设置有什么问题吗? 它运行时间几乎很长、很难找到问题。
谢谢、
Sagar
您能否提供有关此方面的更多详细信息? "在1000个脉冲后停止脉冲"、然后"在几千个周期后随机调用 ePWM ISR "、这意味着什么?
我的意思是提供1000脉冲 PWM 论坛直流电机并禁用时钟和关闭 PWM。 然后、我启动 PWM 以实现1000 PWM 脉冲。
对于 PWM 脉冲的每一端、我都生成了 ePWM ISR 中断。 但是、在具有上述模式后、当我仍有一段时间继续脉冲运行时、不会调用 ePWM ISR。
因此、这次我连接了探头、并在 命令窗口中手动将 EPwm1Regs.ETCLR.bit.INT = 1 (即使我在 ePWM ISR 中将其清除)、然后它再次开始 触发 ISR。
因此、我不确定我的行为是否不正确或其他问题。
谢谢、
Sagar Shah
此外、我还对如何在完成如上所示的脉冲移动后启用 ePWM 时钟和其他序列有疑问。
从 API 接收起始后为 void Start(){//
EALLOW;
SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;
EDIS;
EPwm1Regs.TBCTL.bit.CLKDIV = 0x6;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0x0;
EPwm1Regs.ETSEL.bit.INTEN = 1;//启用 INT
EPwm1Regs.ETSEL.bit.INTSEL = 1;
EPwm1Regs.ETCLR.bit.INT = 1;
EPwm1Regs.TBPRD = CPU_CLK/(2个 PULSE_SPEED);// PULSE_SPEED 是一个 uint16 (范围从400- 1500)
EPwm1Regs.CMPA.half.CMPA =(EPwm1Regs.TBPRD +1)/2;
}
从 API 接收停止后为 void STP(){//
EPwm1Regs.CMPA.half.CMPA=0;
EPwm1Regs.TBPRD=0;
EALLOW;
SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 0;
EDIS;
}
那么、上述顺序是否正确? 我应该将 EPwm1Regs.TBCTR=0置于起始位置还是其它位置?
感谢你的帮助。
我相信我的代码中有类似的 Init。 但我仍然不明白、在我的所有启动条件之后、启用 EPwm1 ISR 后、会触发一次。 这是不进入 ISR 的一些方法、在命令窗口中、我放置了 EPwm1Regs.ETCLR.bit.INT 、并使其等于1。 然后、突然它开始定期进入 ISR。
那么、如果您能让我明白为什么会发生这种情况呢?
在上面的代码中还有 PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
EPwm1Regs.ETCLR.bit.INT = 1;在 ISR 开始时(而是在结束时)、而在 ISR 结束时。 那么、它是按这样的目的完成的吗?
谢谢