本帖最后由 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仅仅作为空计数的同步源计数器。在实际应用中,配置往往是比较灵活的,需要根据实际的情况来进行取舍,前提是对同步的原理比较清晰。
|