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比较事件发生两次,更加灵活。
以上每个关键信号的到来,都可以产生一个动作信号,这个动作信号可以是置高和置低,我们在设置的时候,灵活运用就可以产生不同的PWM。
1.4 计数比较器寄存器配置
计数比较寄存器 A与计数比较器B
配置方式:直接赋值
EPwm1Regs.CMPA.half.CMPA = 500;
EPwm1Regs.CMPB = 0;
计数比较控制寄存器
采用影子寄存器来更新比较值CMPA和CMPB 能够有效的防止在PWM周期内出现故障以及毛刺。
一般对计数控制寄存器的配置主要是配置好影子寄存器。
配置方式:
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
2 动作模块 AC
2.1 动作模块的作用
动作模块在PWM波形形成过程中起到关键作用,它决定了相应事件发生时间时应该输出什么电平。
- 根据计数比较器模块的关键信号(CTR=0,CMPA,CMPB和PRD)产生动作(置高,拉低,翻转)
- 管理以上事件发生后PWM的输出极性
- 针对时基计数器递增或者递减时提供独立的动作控制。
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;
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;
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;
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;
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;
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;
EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;
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;
EPwm1Regs.AQCTLA.bit.CBD = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.PRD = AQ_SET;