DSP

F28335 ePWM计数模块(CC)与 动作模块(AC)及其寄存器配置 ————TMS320F28

2019-07-13 17:32发布

class="markdown_views prism-atom-one-light"> 1 计数比较模块
1.1 计数比较模块作用

计数比较模块是以时基计数器的值作为输入,与比较寄存器CMPA和CMPB不断进行比较的,当时基计数器的值等于其中之一时,就会产生相应的事件。
F28335就是通过对比这些值,来产生事件,与动作模块AC相配合来调节PWM的占空比以及频率。 补充:采用影子寄存器来更新比较值CMPA和CMPB 能够有效的防止在PWM周期内出现故障以及毛刺。 1.2 计数比较模块的关键信号
  • CTR=CMPA 时基计数器的值等于CMPA的值
  • CTR=CMPB 时基计数器的值等于CMPB的值
  • CTR=0 时基计数器的值等于0
  • CTR=TBPRD 时基计数器的值等于周期寄存器的值
1.3 计数比较模块的特点
  • 计数比较模块需要产生两个独立的比较事件,才能产生PWM波
对于向上递增或者向下递减计数模式来说,在一个PWM周期内,CTR和CMPA和CMPB比较事件只发生一次,所以就需要和0或PRD相对比。而增减模式,CTR和CMPA和CMPB比较事件发生两次,更加灵活。
  • 计数比较模块需要与动作模块AC相互配合
以上每个关键信号的到来,都可以产生一个动作信号,这个动作信号可以是置高和置低,我们在设置的时候,灵活运用就可以产生不同的PWM。 1.4 计数比较器寄存器配置 计数比较寄存器 A与计数比较器B
在这里插入图片描述
在这里插入图片描述
配置方式:直接赋值 EPwm1Regs.CMPA.half.CMPA = 500; EPwm1Regs.CMPB = 0; 计数比较控制寄存器 在这里插入图片描述 在这里插入图片描述 采用影子寄存器来更新比较值CMPA和CMPB 能够有效的防止在PWM周期内出现故障以及毛刺。
一般对计数控制寄存器的配置主要是配置好影子寄存器。
配置方式: EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; //CMPA影子装载模式 EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; //CMPB影子装载模式 EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; //CTR=0 影子寄存器A装载 EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; //CTR=0 影子寄存器B装载 2 动作模块 AC
2.1 动作模块的作用
动作模块在PWM波形形成过程中起到关键作用,它决定了相应事件发生时间时应该输出什么电平。
  1. 根据计数比较器模块的关键信号(CTR=0,CMPA,CMPB和PRD)产生动作(置高,拉低,翻转)
  2. 管理以上事件发生后PWM的输出极性
  3. 针对时基计数器递增或者递减时提供独立的动作控制。
2.2 动作模块的关键信号
动作模块的关键信号就是计数比较寄存器和时基寄存器的比较结果,还有软件的强制信号software forced event
  • CTR=CMPA 时基计数器的值等于CMPA的值
  • CTR=CMPB 时基计数器的值等于CMPB的值
  • CTR=0 时基计数器的值等于0
  • CTR=TBPRD 时基计数器的值等于周期寄存器的值
  • 软件强制信号 由AQSFRC和 AQCSF两个寄存器处理。
2.3 动作模块事件的优先级
动作模块区别于其他模块的一个很大特性就是它具有优先级。
这是因为动作模块在同一时刻有可能会收到2个到2个以上的事件,这个就需要优先级控制他的动作顺序。
增减模式下优先级表
在这里插入图片描述
增计数模式下优先级表
在这里插入图片描述
减计数模式下优先级表
在这里插入图片描述 2.4 动作模块寄存器的配置 动作控制寄存器
在这里插入图片描述
在这里插入图片描述
**配置方式:**根据不同的计数比较器的信号来输出动作 如下是一个增计数模式下,AQCTL的配置 EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // CTR上升至CMPA值 置1 ePWMA输出高 EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // CTR下降至CMPA值 置0 ePWMA输出低 EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; // CTR上升至CMPB值 置1 ePWMB输出高 EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // CTR下降至CMPB值 置0 ePWMB输出低 3 典型的波形配置例子
以下的程序内只包括计数模式寄存器,计数比较器寄存器和动作控制寄存器这三个关键点的代码
3.1 单边不对称波形 EPwm1Regs.TBCTL.bit.CTRMODE=TB_UP; //计数模式 EPwm1Regs.TBPRD = 1000; EPwm1Regs.CMPA.half.CMPA = 500; EPwm1Regs.CMPB = 200; EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // CTR=0 置0 ePWMA输出低 EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // CTR上升至CMPA值 置1 ePWMA输出高 EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR; // CTR=0 置0 ePWMB输出低 EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // CTR上升至CMPB值 置1 ePWMB输出高 在这里插入图片描述 3.2 双边对称波形 EPwm1Regs.TBCTL.bit.CTRMODE=TB_UP_DOWN; //计数模式 EPwm1Regs.TBPRD = 1000; EPwm1Regs.CMPA.half.CMPA = 200; EPwm1Regs.CMPB = 500; EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // CTR上升至CMPA值 置1 ePWMA输出高 EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // CTR减少至CMPA值 置0 ePWMA输出低 EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // CTR上升至CMPB值 置1 ePWMB输出高 EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; // CTR减少至CMPB值 置1 ePWMB输出低 在这里插入图片描述 3.3 双边沿不对成波形 EPwm1Regs.TBCTL.bit.CTRMODE=TB_UP_DOWN; //计数模式 EPwm1Regs.TBPRD = 1000; EPwm1Regs.CMPA.half.CMPA = 400; EPwm1Regs.CMPB = 800; EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // CTR上升至CMPA值 置1 ePWMA输出高 EPwm1Regs.AQCTLA.bit.CBD = AQ_CLEAR; // CTR减少至CMPB值 置0 ePWMA输出低 EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR; // CTR=0 置0 ePWMB输出低 EPwm1Regs.AQCTLB.bit.PRD = AQ_SET; // CTR=PRD值 置1 ePWMB输出高 在这里插入图片描述