TI中文支持网
TI专业的中文技术问题搜集分享网站

F28335的ePWM载波信号芯片间时基同步问题

目前我的应用是这样的:
一个F28335内使用了ePWM1~ePWM6,ePWM1作为Master在CTR=0的时候 输出同步信号,ePWM2-ePWM6作为Slave接收同步信号,实现ePWM1-ePWM6的载波同步。
现在想把同步信号传输给另外一个F28335,这个F28335同样使用了ePWM1-ePWM6,都作为Slave,实际中使用没有问题,两个F28335的12个ePWM载波可以同步。
但是这两片F28335之间的信号传输并不是100%可靠的,如果通信中断,作为同步信号接收方的F28335需要检测出同步丢失,并且做出响应的处理。
按照sprug04手册描述, TBSTS.bit.SYNCI可以反映上一次锁存的同步信号,写1可以清除同步信号。本想通过在每个开关周期中判断 TBSTS.bit.SYNCI是否为1,然后清除来判断是否有同步信号输入。
测试了一下, 将F28335的ePWM1-ePWM6全部设置为Slave, SyncOut都设置为SyncIn,芯片的SYNCI管脚悬空无输入同步信号。测试PWM输出信号依然正常,TBSTS.bit.SYNCI始终是1说明收到了同步信号,写1也无法清除。与预想完全不同。
ePWM1-ePWM6全部设置为Slave这种状态sprug04文档并没有过多描述,对于这种应用场合能否给一些技术支持?

10#:

确认几个问题(约定主从两片F28335为芯片1和芯片2):

1、芯片1是通过EPWMSYNCO输出EPWM1的同步输出信号?对应的是GPIO6还是GPIO32?

      芯片2是通过EPWMSYNCI接收EPWM1的同步输出信号?对应的是GPIO6还是GPIO33?

     软件上是否正确设置GPIO MUX?如果将这两个输出和接收同步信号的引脚设定为GPIO功能,有什么发现吗?

2、实际上,即使不使能同步功能,只要芯片同时上电工作,并且所有EPWM同时计数,理论上仍然可能所有EPWM是同步的,因此,如果你将从EPWM模块的TBPHS改为其它值,即有一定的相位,而不是0,不知道有什么不同?比如TBCTR寄存器的变化?如果被改成了修改过的TBPHS值并且正在计数,那说明确实是发生同步了,否则,应该是没有同步,而是本来就是默认的速度正在计数;

3、从你的描述来看,应该是除了芯片1的EPWM1设置了同步信号输出,且SYNCOSEL位设置为1,同时没有使能PHSEN位,其它所有EPWM模块,包括芯片2的6个EPWM模块,都是有使能PHSEN位的,而且所有EPWM模块的SYNCOSEL位是设置为0的?

4、芯片2的EPWM1模块应该没有置位SWFSYNC吧?

5、“每个开关周期中判断 TBSTS.bit.SYNCI是否为1”,这个中断是在哪个EPWM模块的什么中断里执行的?有没有在时序上确定它一定不是上一次发生的?

目前我的应用是这样的:
一个F28335内使用了ePWM1~ePWM6,ePWM1作为Master在CTR=0的时候 输出同步信号,ePWM2-ePWM6作为Slave接收同步信号,实现ePWM1-ePWM6的载波同步。
现在想把同步信号传输给另外一个F28335,这个F28335同样使用了ePWM1-ePWM6,都作为Slave,实际中使用没有问题,两个F28335的12个ePWM载波可以同步。
但是这两片F28335之间的信号传输并不是100%可靠的,如果通信中断,作为同步信号接收方的F28335需要检测出同步丢失,并且做出响应的处理。
按照sprug04手册描述, TBSTS.bit.SYNCI可以反映上一次锁存的同步信号,写1可以清除同步信号。本想通过在每个开关周期中判断 TBSTS.bit.SYNCI是否为1,然后清除来判断是否有同步信号输入。
测试了一下, 将F28335的ePWM1-ePWM6全部设置为Slave, SyncOut都设置为SyncIn,芯片的SYNCI管脚悬空无输入同步信号。测试PWM输出信号依然正常,TBSTS.bit.SYNCI始终是1说明收到了同步信号,写1也无法清除。与预想完全不同。
ePWM1-ePWM6全部设置为Slave这种状态sprug04文档并没有过多描述,对于这种应用场合能否给一些技术支持?

Xiao Dong:

回复 10#:

1、芯片1是通过EPWMSYNCO输出EPWM1的同步输出信号?对应的是GPIO6还是GPIO32?

使用的是GPIO32和GPIO33,和I2C硬件接口冲突,因为这个冲突,软硬件全部重新改版,吐槽一下。

2、实际上,即使不使能同步功能,只要芯片同时上电工作,并且所有EPWM同时计数,理论上仍然可能所有EPWM是同步的,因此,如果你将从EPWM模块的TBPHS改为其它值,即有一定的相位,而不是0,不知道有什么不同?比如TBCTR寄存器的变化?如果被改成了修改过的TBPHS值并且正在计数,那说明确实是发生同步了,否则,应该是没有同步,而是本来就是默认的速度正在计数; 目前我设置所有作为Slave的ePWM模块PHSEN=1,TBPHS=0.

3、从你的描述来看,应该是除了芯片1的EPWM1设置了同步信号输出,且SYNCOSEL位设置为1,同时没有使能PHSEN位,其它所有EPWM模块,包括芯片2的6个EPWM模块,都是有使能PHSEN位的,而且所有EPWM模块的SYNCOSEL位是设置为0的?

实际是这样设置的:两个芯片共12个ePWM模块全部设置PHSEN=1,TBPHS=0。ePWM1的SYNCOSEL=1,其余11个ePWM模块SYNCOSEL=0,ePWM1和其它ePWM模块唯一差别是SYNCOSEL

4、芯片2的EPWM1模块应该没有置位SWFSYNC吧?

2个芯片所有ePWM都没有置位SWFSYNC

5、“每个开关周期中判断 TBSTS.bit.SYNCI是否为1”,这个中断是在哪个EPWM模块的什么中断里执行的?有没有在时序上确定它一定不是上一次发生的?

可以确定。实际ePWM1下溢触发ADC转换,在ADC ISR中判断TBSTS.bit.SYNCI,因此肯定是在ePWM1的计数周期(100us)内。

目前我的应用是这样的:
一个F28335内使用了ePWM1~ePWM6,ePWM1作为Master在CTR=0的时候 输出同步信号,ePWM2-ePWM6作为Slave接收同步信号,实现ePWM1-ePWM6的载波同步。
现在想把同步信号传输给另外一个F28335,这个F28335同样使用了ePWM1-ePWM6,都作为Slave,实际中使用没有问题,两个F28335的12个ePWM载波可以同步。
但是这两片F28335之间的信号传输并不是100%可靠的,如果通信中断,作为同步信号接收方的F28335需要检测出同步丢失,并且做出响应的处理。
按照sprug04手册描述, TBSTS.bit.SYNCI可以反映上一次锁存的同步信号,写1可以清除同步信号。本想通过在每个开关周期中判断 TBSTS.bit.SYNCI是否为1,然后清除来判断是否有同步信号输入。
测试了一下, 将F28335的ePWM1-ePWM6全部设置为Slave, SyncOut都设置为SyncIn,芯片的SYNCI管脚悬空无输入同步信号。测试PWM输出信号依然正常,TBSTS.bit.SYNCI始终是1说明收到了同步信号,写1也无法清除。与预想完全不同。
ePWM1-ePWM6全部设置为Slave这种状态sprug04文档并没有过多描述,对于这种应用场合能否给一些技术支持?

10#:

回复 Xiao Dong:

首先,所谓同步也好,移相也好,原理上都只有一个根本事实,那就是当有同步信号发生,且PHSEN置位时,TBCTR的值会被TBPHS的值覆盖,无论当前TBCTR是多少,而我们常说的“同步”只不过是一个特例,那就是TBPHS=0,相当于强行让需要被同步的EPWM模块全部从0开始重新计数。

而PHSEN位的设置是,对于主模块master,必须清零,对于所有从模块slave,都必须置1。

对于你的要求,也就是芯片1的EPWM1需要PHSEN=0,SYNCOSEL=1,TBPHS=0,而其它所有EPWM模块,都必须PHSEN=1,SYNCOSEL=0,TBPHS根据要求设置为需要的“相位”值(当然等于0就表示相位为0,就是完全同步,而非0其实也是同步,只是有相位差而已)。

我建议你更改TBPHS的目的就是为了避免本来没有设置也已经是同步的情况下,通过查看TBCTR来判断是否真的发生了同步。

由于你这里的回复和我在邮件推送里看到的有点不一样,所以我给你解释这些思路,请自行进行测试和分析。

目前我的应用是这样的:
一个F28335内使用了ePWM1~ePWM6,ePWM1作为Master在CTR=0的时候 输出同步信号,ePWM2-ePWM6作为Slave接收同步信号,实现ePWM1-ePWM6的载波同步。
现在想把同步信号传输给另外一个F28335,这个F28335同样使用了ePWM1-ePWM6,都作为Slave,实际中使用没有问题,两个F28335的12个ePWM载波可以同步。
但是这两片F28335之间的信号传输并不是100%可靠的,如果通信中断,作为同步信号接收方的F28335需要检测出同步丢失,并且做出响应的处理。
按照sprug04手册描述, TBSTS.bit.SYNCI可以反映上一次锁存的同步信号,写1可以清除同步信号。本想通过在每个开关周期中判断 TBSTS.bit.SYNCI是否为1,然后清除来判断是否有同步信号输入。
测试了一下, 将F28335的ePWM1-ePWM6全部设置为Slave, SyncOut都设置为SyncIn,芯片的SYNCI管脚悬空无输入同步信号。测试PWM输出信号依然正常,TBSTS.bit.SYNCI始终是1说明收到了同步信号,写1也无法清除。与预想完全不同。
ePWM1-ePWM6全部设置为Slave这种状态sprug04文档并没有过多描述,对于这种应用场合能否给一些技术支持?

Xiao Dong:

回复 10#:

原理部分你和我的理解是一样的。这个没有问题。我现在也是这么做的。唯一的差别是作为主模块的ePWM1的PHSEN=1,SYNCOSEL=1,TBPHS=0,从模块设置PHSEN=1,SYNCOSEL=0,TBPHS=0,即主模块和从模块的差别只有SYNCOSEL。至少从sprug04文档中ePWM的框图中来理解,主从模块之间PHSEN位没有什么影响。我实际测试也可以实现同步。PHSEN位的影响我还会再测试。现在主要的问题是我要在芯片2(6个ePWM都配置为从机)中判断出是否有同步信号输入,按照sprug04文档,可以通过在每个开关周期中先判断TBSTS.bit.SYNCI,然后置位这种操作来判断,但是实际发现无论怎么操作TBSTS.bit.SYNCI始终为1. 

目前我的应用是这样的:
一个F28335内使用了ePWM1~ePWM6,ePWM1作为Master在CTR=0的时候 输出同步信号,ePWM2-ePWM6作为Slave接收同步信号,实现ePWM1-ePWM6的载波同步。
现在想把同步信号传输给另外一个F28335,这个F28335同样使用了ePWM1-ePWM6,都作为Slave,实际中使用没有问题,两个F28335的12个ePWM载波可以同步。
但是这两片F28335之间的信号传输并不是100%可靠的,如果通信中断,作为同步信号接收方的F28335需要检测出同步丢失,并且做出响应的处理。
按照sprug04手册描述, TBSTS.bit.SYNCI可以反映上一次锁存的同步信号,写1可以清除同步信号。本想通过在每个开关周期中判断 TBSTS.bit.SYNCI是否为1,然后清除来判断是否有同步信号输入。
测试了一下, 将F28335的ePWM1-ePWM6全部设置为Slave, SyncOut都设置为SyncIn,芯片的SYNCI管脚悬空无输入同步信号。测试PWM输出信号依然正常,TBSTS.bit.SYNCI始终是1说明收到了同步信号,写1也无法清除。与预想完全不同。
ePWM1-ePWM6全部设置为Slave这种状态sprug04文档并没有过多描述,对于这种应用场合能否给一些技术支持?

10#:

回复 Xiao Dong:

那么你现在是否可以通过CCS窗口对芯片2的EPWM的TBSTS寄存器进行查看,同时更改一下TBPHS为其它非零值,然后看看TBCTR是否被改成了该TBPHS值。

赞(0)
未经允许不得转载:TI中文支持网 » F28335的ePWM载波信号芯片间时基同步问题
分享到: 更多 (0)