正在学习DSP28335的EPWM发波模块,有一个小疑问,我发波要同时用到CMPA和CMPB 两个比较器,代码需要如何写呢?或者说在同时使用CMPA和CMPB的时候,AQ动作模块的代码要怎么写?
在同时使用CMPA和CMPB的情况下,EPWM的AQ(Action Qualifier)动作模块可以用来控制每个比较器的动作,以控制输出波形的特征。在DSP28335的EPWM模块中,每个CMPx比较器(x为A或B)都有对应的AQ动作模块寄存器,分别为AQCTLA和AQCTLB。这些寄存器的位控制如下:
AQCTLA和AQCTLB共同的位:
位0和位1:用于选择当前PWM周期和下一个PWM周期的AQ动作。具体来说,位0和位1组合可以选择以下动作之一:
AQCTLA独有的位:
位2和位3:用于选择当前PWM周期的CMPA比较结果的AQ动作。具体来说,位2和位3组合可以选择以下动作之一:
位4和位5:用于选择下一个PWM周期的CMPA比较结果的AQ动作,具体方式与位2和位3类似。
AQCTLB独有的位:
位2和位3:用于选择当前PWM周期的CMPB比较结果的AQ动作,具体方式与AQCTLA的位2和位3类似。
位4和位5:用于选择下一个PWM周期的CMPB比较结果的AQ动作,具体方式与AQCTLA的位4和位5类似。
因此,如果要同时使用CMPA和CMPB比较器,可以按照以下步骤设置AQ动作模块的寄存器:
设置AQCTLA寄存器的位0和位1,选择当前PWM周期和下一个PWM周期的AQ动作。
设置AQCTLA寄存器的位2和位3,选择当前PWM周期的CMPA比较结果的AQ动作。
设置AQCTLB寄存器的位2和位3,选择当前PWM周期的CMPB比较结果的AQ动作。
根据需要,设置AQCTLA寄存器的位4和位5,选择下一个PWM周期的CMPA比较结果的AQ动作;设置AQCTLB寄存器的位4和位5,选择下一个PWM周期的CMPB比较结果的AQ动作。
例如,以下代码将CMPA和CMPB分别设置为产生一个50%的占空比方波:
// 设置AQCTLA寄存器
EPwm1Regs.AQCTLA.bit.ZRO = 1; // 当PWM计数器为0时,CMPA输出高电平
EPwm1Regs.AQCTLA.bit.CAU = 2; // 当PWM计数器等于CMPA时,CMPA输出低电平
需要注意的是,AQ动作模块的设置可以在EPWM模块初始化之后随时进行修改,而不必在每个PWM周期之前重新设置。如果需要改变输出波形的特征,只需修改相应的AQ动作模块寄存器即可。另外,EPWM模块的其他寄存器(如CMPA和CMPB)也可以在运行时修改,以实现动态调整PWM的输出特性。
DSP28335学习记录(三)——ePWM
可以借鉴下
https://blog.csdn.net/qq_30835339/article/details/125432037
c
// 设置EPWM的PWM输出模式
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // 当 CMPA = CMPAHR 时,设置 EPWM 输出为高电平
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 当 CMPA = CMPAHR 时,设置 EPWM 输出为低电平
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // 当 CMPB = CMPBHR 时,设置 EPWM 输出为高电平
EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; // 当 CMPB = CMPBHR 时,设置 EPWM 输出为低电平
该回答基于gpt和阿里大佬的指导:
在DSP28335的EPWM模块中,可以同时使用CMPA和CMPB比较器来控制PWM波形。为了设置AQ动作模块的代码,您需要按照以下步骤进行操作:
首先,确保已经配置了正确的EPWM模块和引脚功能。
在初始化EPWM模块之后,您需要设置CMPA和CMPB的动作。
// 设置CMPA动作
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // 当计数器等于CMPA时,设置输出为高电平
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 当计数器等于CMPA时,设置输出为低电平
// 设置CMPB动作
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // 当计数器等于CMPB时,设置输出为高电平
EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; // 当计数器等于CMPB时,设置输出为低电平
上述代码中,EPwm1Regs是指向EPWM1寄存器的指针,您需要根据您所使用的EPWM模块进行相应的更改。
接下来,您可以根据需要调整CMPA和CMPB的比较值,从而调整PWM波形的占空比。比如,设置CMPA的比较值为500,CMPB的比较值为250:
EPwm1Regs.CMPA.bit.CMPA = 500;
EPwm1Regs.CMPB.bit.CMPB = 250;
最后,根据您的需求,设置PWM计数器的周期和其他参数。比如,设置计数器周期为1000:
EPwm1Regs.TBPRD = 1000;
通过以上步骤,您就可以同时使用CMPA和CMPB比较器,并设置相应的AQ动作模块代码来控制EPWM模块的输出波形。