Thread 中讨论的其他器件:C2000WARE、 SysConfig
工具/软件:
大家好:
我配置了4个 HRPWM 模块以实现高分辨率频率和相移控制。
我选择了 EPWM1作为主器件、其余的是从器件。
通常、我设法获得了所需的频率和相移、但我对同步机制有疑问。
我将每80uS 控制周期计算一次周期和相移值。
然后、我要在 PWM1时基计数器= 0时更新每个从器件 PWM 的相移值。
到目前为止、我可以做到这一点。 但我想在触发同步脉冲后禁用同步机制、以便使用 HRPWM 导致的抖动问题产生的影响较小。
在这里问题开始。 下面是我的尝试:
1 - PWM 中断方法
- 我配置了 PWM1中断、在 PWM1时基 CTR = 0时触发。
- 在 PWM_update 函数结束时、我会调用这条线路来激活同步机制 EPWM_setSyncOutPulseMode (myEPWM1_BASE、EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
- 然后、通过 HRPWM_enableInterrupt (myEPWM1_BASE)启用 PWM1 INT;
- 在 PWM ISR 中、我禁用同步机制、还会在下一个 PWM_update 函数中再次启用 PWM 中断
- HRPWM_setSyncOutPulseMode (myEPWM1_BASE、EPWM_SYNC_OUT_PULSE_DISABLE);
- EPwm1Regs.ETSEL.bit.intn=0; //禁用 ePWM1中断
- 这种方法通常可以正常工作、但会随机产生以下问题:
- 有时同步脉冲不会被触发、尽管我可以看到 SW 进入 PWM1 INT (根据逻辑 PWM INT 应该在同步脉冲触发后输入、至少我希望是这样)
- 有时 EPWM1中断会影响 ADC INT。 ADC INT 由虚拟 PWM 触发、该 PWM 不是 HR 模式、完全独立于4个 HRPWM 模块
- 我想这些问题是由于中断处理和缺少嵌套逻辑而产生的、但我不确定它们是否要使用相同的事件(PWM1 TBCTR = 0)来触发同步脉冲和触发 PWM 中断
2-我的第二个热处理方法是使用同步脉冲作为 PWM 中断的触发器(我想作为数字比较子模块的 TZ 事件中断)。 使用这种方法时、我会确保将进入同步脉冲、从而进入 PWM 中断 ISR。 那么我将安全地禁用同步脉冲机制。
- 到目前为止、我无法设法使用此方法启用 PWM ISR
3:我的第三种方法是使用已配置的 ADC 中断
- 在这种方法中 、在 PWM_update 函数的 ePWM_setSyncOutPulseMode (myEPWM1_base、ePWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO)之后、我创建一个标志变量1。
- 然后 ın ADC 中断(ADC INT fperiod 为5us)我将计数器递增至一个对应于10us 的阈值。 这个阈值时间足以满足我的 PWM 可具有的所有频率范围。
- 我的意思是、在最小频率下、我可以保证在禁用同步机制之前至少会触发一个同步脉冲。
- 不过、您可以很容易地理解、在禁用同步机制之前、HRPWM 的开关频率何时增加了多个同步脉冲被触发。
- 这增加了抖动问题对 PWM 的影响。 我可以在示波器屏幕上看到 PWM 信号不完全稳定。
总之、当主器件 HRPWM TBCTR = 0时、我正在寻找一种为从器件 HRPWM 触发同步脉冲的方法、因为这会使所有转换更加平滑。
我可以尝试其他任何建议。
此致、
Gökhan μ s