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.
您好,
我很难在PWM通道1和2之间生成相移。 我一直在尝试按照ePWM参考指南"控制零电压开关全桥(ZVSFB)转换器"中的示例进行操作,但我无法获取要编译的代码,因为有错误说明:
1)"EPwm2Regs.TBPHS = 1200-300;"不能为int类型
2)"EPwm1Regs.CMPA = 600;"不能为int类型。
我尝试将1)更改为 "EPwm2Regs.TBPHS.ALL = 1200-300";和2)更改为"EPwm1Regs.CMPA.ALL = 600",以使编译器停止抱怨,但我没有观察到GPIO0 (ePWM1A)或GPIO2 (ePWM2A)的任何输出。 我已经通过GPIO手柄在代码中单独设置了GPIO (使用PWM模块和禁用的上拉电阻进行多路复用)。
有人能提供帮助吗?
谢谢!
Jeff
你好,Jeff。
问题分配不正确。
TBPHS和CMPA寄存器是两个寄存器的组合:用于普通ePWM和高分辨率ePWM。 因此,TBPHS实际上包含TBPHS.Bit.TBPHS部件和TBPHS.Bit.TBPHSHR部件(最后一个是高分辨率部件)。 CMPA的故事也是如此。 每个寄存器的HR部分也驻留在32位单词"all"的0:15位中。 "通用"部分位于位16-31中。
所以当你写"CMPA.ALL = 0xFFF"时你得到"ALL = 0x0000 0FFF"-你实际上把这个数字写在16位的下面。 因此,您得到CMPAHR = 0xFFF和CMPA = 0。
解决方案是以"CMPA.bit.CMPA"和"TBPHS.bit.TBPHS"访问注册器。 您可以尝试一下吗?
嗯...
我想您可以在SPRUGE9文档(Piccolo ePWM用户手册)的部分2.2 .2.3 "Time-base counter synchronization"中找到一些帮助。 据说,当ePWM时钟速度等于SYSCLKOUT (在您的情况下,因为您将CLKDIV和HSPCLKDIV设置为"DIV1")时,同步需要2个周期。
因此,如果您将TBPHS设置为0,这只是给您9个周期转换的值:当TBCTR1为“0”时,将给出同步脉冲,但2个周期后,相位“0”将加载到TBCTR2,因此TBCTR1此时将为“2”。 另外,我想你们实际上看到的是4.5 和9度的延迟,因为360/80= 4.5。
我认为这甚至不是问题,而是ePWM模块的特殊行为=)
希望这有所帮助。