zyz0926 发表于 2025-4-30 16:27

基于R501-多路PWM同步计数的配置解析

本帖最后由 zyz0926 于 2025-4-30 16:29 编辑

#申请原创# #技术资源#
以本人开发的通用高压伺服软件为例来进行说明,G32R501-多路PWM同步配置经验介绍如下:
伺服中使用的PWM包括:
   PWM1: 增计数,用于主中断触发,频率16K
   PWM3: 增减计数,用于U相PWM波输出,频率8K
   PWM5: 增减计数,用于V相PWM波输出,频率8K
   PWM6: 增减计数,用于W相PWM波输出,频率8K

   PWM7: 增计数,用于电流环中断触发,频率16K
   PWM2: 增计数,用于CPU1核并行中断触发,频率32K

PWM模块的TB计数器的同步框架图请实际参考极海G32R501官方用户手册。

可以观察到,8路PWM主要分为三路同步链路,其中,PWM1,2,3处于第一同步链路,PWM4,5,6处于第二同步链路,PWM7,8处于第三同步链路。可以看出,多路PWM的同步只能向下同步,不能向上同步,即同步基准最好定为PWM1,其他所有PWM,均可与PWM1进行同步。通过同步输入源寄存器来进行选择。
比如如果使用PWM1作为同步源,同步配置所有PWM,则配置如下:      
SyncSocRegs.SYNCSELECT.bit.PWM1SYNCIN = 1;         
SyncSocRegs.SYNCSELECT.bit.PWM4SYNCIN = 0;
SyncSocRegs.SYNCSELECT.bit.PWM7SYNCIN = 0;

而同步的具体寄存器配置也是较为简单,将同步基准配置为主模式,通过配置PHSEN来实现,同步选择为计数器为0触发
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Master module
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
其余所有被同步的PWM,配置为从模式,,同步选择为同步源输入触发
EPwm8Regs.TBCTL.bit.PHSEN = TB_ENABLE; // slave module
EPwm8Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

要注意的是,如果要PWM8与PWM1进行同步,则不管PWM7是否使用,都必须要进行同步配置,否则链路不通,则即使配置好PWM8与PWM1同步寄存器也无法实现同步。同理,PWM4,5,6也是一样的关系。

在本伺服开发中,原先的PWM1作为主中断触发,增计数,如果以其作为同步基准,则后面的PWM的同步则是无法实现,主要是计数模式与周期均存在差异。这里需要改变下配置思路,将主中断搬移到PWM2上,将PWM1改为增减计数,频率8K的同步源即可。即PWM1仅仅作为空计数的同步源计数器。在实际应用中,配置往往是比较灵活的,需要根据实际的情况来进行取舍,前提是对同步的原理比较清晰。


zyz0926 发表于 2025-4-30 16:29

@21小跑堂

秦七七 发表于 2025-4-30 23:15

这个贴不错!!!!!

秦七七 发表于 2025-5-1 15:25

逢贴必顶……恼人

秦七七 发表于 2025-5-3 21:44

好吧...那你说..............

秦七七 发表于 2025-5-3 23:10

怎么回事!!!!

秦七七 发表于 2025-5-4 00:37

注:偶是女滴,千真万确,毋庸置疑!

秦七七 发表于 2025-5-4 12:03

一个子 没看懂
页: [1]
查看完整版本: 基于R501-多路PWM同步计数的配置解析