器件型号:TMS320F280049M
您好!
我已经设置 TMS320F280049来驱动两个开关、这两个开关的脉冲是互补的、具有50%占空比、并且它们之间具有150ns 的死区时间。 脉冲频率在50kHz 至1MHz 之间变化。 我通过改变 ADC 输入端连接的可变电阻器来改变 ADC 输入端的电压、从而改变频率。 在由 ADC 转换脉冲结束触发的固定频率 ISR 中读取 ADC 寄存器并计算脉冲频率、在 EPWM1 ISR 中更新 PWM 寄存器(TBPRD、CMPA、CMPB)、EPWM1 ISR 是在 EPWM 1 CTR=0时触发的较高优先级中断。 EPWM1中断嵌套在 ADC 中断中。 ADC 转换开始由 CPU 定时器0触发、该定时器以50kHz 的固定频率运行。
通过分别向 CMPA 和 CMPB 寄存器写入等于 TBPRD/2的电平、可生成占空比为50%的 ePWM 脉冲。 然后、EPWMB 脉冲在死区 模块中反相、以生成互补脉冲。
ADC ISR 中还会根据输入电压进行其他一些计算、这与频率、CMPA 和 CMPB 的计算无关。 ADC ISR 的总计算时间为9.5us、EPWM1 ISR 为~360ns (因为在此例程中仅更新 ePWM 寄存器)。
脉冲之间的死区时间是恒定的、在初始化期间只设置一次 、达到150ns。
在这个设置中、我观察到两个脉冲之间的死区时间被随机地折叠至小于50ns、这意味着没有保持150ns 的死区时间。
我试验并观察到、只有出于某种原因、CMPA 和 CMPB 的执行值不相等时才会发生这种情况。 如果我在嵌套在 ADC 中断内的较高优先级中断 EPWM1 ISR 中以相同的值=TBPRD/2逐一更新两个寄存器、则不应发生这种情况。
如果 EPWM1 ISR 优先级更高、首先应更新所有寄存器、然后程序计数器应返回 ADC ISR 以计算下一个频率值。
当程序计数器处于 ADC ISR 中并计算频率时、我暂时通过将标志设置为高电平来解决死区时间崩溃问题。 当 FLAG 为高电平时、我不允许 EPWM1 ISR 中的 EPWM 1寄存器更新、即使 EPWM1 ISR 仍然可以中断 ADC ISR。 计算完成后、我使 FLAG 变为低电平、然后 EPWM1 ISR 中的 EPWM 1寄存器可以更新。 通过这种方式、死区时间保持在150ns。
但是 、这是一种解决问题的蛮力方法。 我希望 TI 能提供更好的解决方案/建议来解决这个问题。
谢谢、
Misha

