TMS320F280039C: PWM死区下降沿更新滞后一个周期生效

Part Number: TMS320F280039C


image.png20251028-092522.jpg

我的死区配置如图所示。通道1为ECAP生成的APWM,其脉宽为死区值,通过DMA触发的中断来读取PWM5B的死区寄存器数据,并且不是shadow模式。通道2和通道4分别为PWM4A和PWM5B。死区会通过DMA在cnt = prd的时候进行装载。死区配置使用immediately模式,现在发现死区对于PWM4A而言会立刻生效,对于PWM5b而言,会延迟生效。通道1的上升沿代表DMA传输完成的时刻。

为什么死区的下降沿延时不会立刻生效,上升沿却可以?

  • 已经收到了您的案例,调查需要些时间,感谢您的耐心等待

  • 对延误表示歉意。让我请一位ePWM专家来看看这个。与此同时,您能否同时发送DMA配置,以便我进行检查?

  • 因为我所在公司的规定,我只能大概描述我DMA的配置。写入死区的DMA是通过EPWM4_SOCA触发DMA,SOCA会在cnt = prd时产生,DMAch4配置为Oneshot模式,CONTINUOUS = 0;不启用中断DMAch4的中断;使能外设触发; 产生通道1的相关DMA配置为ch5,使能中断,并且中断发生在传输后,读取DMACH4所写入的PWM5b的死区寄存器值来表征寄存器值。CH4至CH5会按顺序触发;

  • 几个注意事项:

    DMA本身一次只能服务于一个DMA通道,并且默认情况下会执行循环方案来服务于每个通道。除了CH4和CH5之外,还有其他DMA通道使能吗?CH4和CH5是否由相同的条件(同时)触发?

    对于这两种情况,您是否在传输结束ISR开始时切换GPIO(示波器截图的黄色通道)?

    我也不建议使用DMA单次触发模式,除非您希望在每个触发条件下都进行完整的传输。如果在两个DMA通道上都禁用此设置,是否可以解决您的问题?

    最诚挚的问候,

  • CH5只是调试时用以表征我写入寄存器的值是多少。PWM波形的不由CH5控制。同时CH1-CH5都是循环触发的。只有CH5在结束时会通过高电平时间表征写入的死区时间。即使CH4传输存在延时,但是既然CH5都触发了,那么说明CH4已经写入结束了,此时PWM5B的死区寄存器应该已经固定了,为何没有立刻生效调整死区大小呢? 谢谢

  • 我还是有点困惑。为了澄清,在我上面提到CH4和CH5的回答中,我说的是DMA通道。您提到的延迟是PWM线路上的延迟(意外)还是DMA传输结束ISR中的延迟?请单独回答我的上述问题,以便我能更好地理解。

  • 1、CH1-CH5的均有配置,其中CH4的写入对象为PWM的死区寄存器;2、CH4与CH5之间不是同时触发,是循环触发;3、我提到的"即使CH4传输存在延时"要表述的是:考虑到DMA搬运所耗费的时间,而不是PWM内部线路上传输的延时;4、我的CH5触发中断的时机是在CH5传输结束时,并且我的ISR函数中没有延时函数;

  • 根据我当时的理解,您看到的延迟似乎是由于我提到的DMA通道循环造成的,尤其是在您配置了5个不同通道的情况下。请参见TRM的相关文档。

    对所有DMA通道的传输结束ISR进行分析,以查看是否有不同的通道阻碍了DMA CH5传输,这将很有帮助。例如,如果CH4传输被服务,并且通道1的触发在CH5触发进入之后但之前进入,则该传输将在CH5之前由DMA服务。

  • 按我的理解,我在DMA CH5结束时读取DMA CH4所写入到死区寄存器中的数据,我可以认为CH5对应的中断产生时,CH4的传输应当已经完成。抑或是有什么其他的方法或操作可以验证PWM死区寄存器immediate模式的逻辑,以证明我当前的使用方法是有问题的。