这一章来稍微介绍一一下AWR294x的ePWM(enhanced pulse width modulator )模块,说白就是用来生成PWM的模块,TI在它前面加一个enhanced 说明它很牛,下面一起来看看它有什么特别之处吧。
下图显示了多个ePWM的结构图:
可以看到不同的ePWM模块并不是相互独立的,它们之间还是有一定的联系的,至于它们之间有什么联系后面慢慢来介绍。
下图显示了单独一个ePWM模块的结构和信号:
各个信号的描述如下表显示:
名称 | 描述 |
---|---|
EPWMxSYNCI EPWMxSYNCO | 同步信号的输入以及相关信号输出,不同的ePWM模块信号可通过EPWMxSYNCI来进行计数器同步,而EPWMxSYNCO信号可输出的信号可选 |
EPWMxTZINT EPWMxINT | 中断信号,ePWM事件触发后可触发中断信号至VIM,分别是Trip中断和PWM中断 |
EPWMxSOCA EPWMxSOCB | ePWM事件触发后可直接发送触发开始转换信号至ADC模块 |
EPWMxA EPWMxB | ePWM模块的PWM输出信号 |
nTZ1 to TZ3 EQEP1ERR / EQEP2 ERR CPU Debug Mode | Trip功能信号输入,当这6个信号有效时,可直接让ePWM进入Trip |
可以看到每个ePWM模块内部有一大堆的子模块,每个子模块都有着自己的功能,它们互相协作最终完成了各种牛逼的功能。下面在子模块简介中详细介绍。
下图显示了子模块之间的结构图:
下图为TB的结构图:
该子模块其实是整个ePWM的心脏部分,它掌控着整个ePWM的工作方式,工作强度,工作效果。首先就是它有个具有up, down, up-down三种工作模式的counter(TBCTR);拥有shadow寄存器的周期寄存器(TBPRD);当同步信号(TBCTL[SWFSYNC],DCAEVT1.sync, DCBVT1.sync,EPWMxSYNCI)出现时,TB会自动将同步值(TBPHS)装载至count(TBCTR)完成计数器同步;另外可选择EPWMxSYNCO的输出信号(同步信号,CTR = Zero,CTR = CMPB)。
如果想用ePWM来生成PWM波的话,那么PWM波的周期和频率则完全由TB模块来决定,计算如下:
其中
T
T
B
C
L
K
T_{TBCLK}
TTBCLK为VCLK4经过时钟分频器来决定,TB有两级分频器,分别是TBCTL[HSPCLKDIV]和TBCTL[CLKDIV],最大分频数为14*128=1792。
下图为CC的结构图:
这个子模块就是比较模块,每个ePWM拥有两个比较通道A和B,TB模块的counter(TBCTR)会跟CC模块的两个通道比较值(CMPA,CMPB)进行比较,当两值相等时即可触发比较事件,并且将比较事件信号发送至AQ模块。另外TB的两个比较事件(CTR = PRD, CTR = 0)信号也会经过CC模块传送至AQ模块。
上面了解到AQ会接收来自CC模块的四个比较信号,分别是:
名称 | 寄存器值 | 描述 |
---|---|---|
CTR = CMPA | TBCTR = CMPA | 比较通道A比较事件 |
CTR = CMPB | TBCTR = CMPB | 比较通道B比较事件 |
CTR = PRD | TBCTR = TBPRD | 计数器周期溢出事件 |
CTR = ZERO | TBCTR = 0x0000 | 计数器清零事件 |
而AQ模块的作用就是决定ePWM模块对这四个比较事件出现时的两个输出信号(EPWMA, EPWMB)的反应策略。其结构如下图所示:
可以看到AQ主要接收CC模块的信号,然后根据五个寄存器的配置进而控制两个输出信号的反应策略,两个信号的反应策略可以有:Set High,Clear Low,Toggle,Do Nothing。在这里注意的是,EPWMA和EPWMB这两个信号的A/B与CC中的比较通道CMPA和CMPB中的A/B是没有任何对应关系的,换句话说以上的四个比较事件信号以及软件强制控制在同一时间都是可以控制EPWMA信号的。
上面说到四个比较事件信号以及软件强制控制在同一时间都是可以控制同一个EPWM信号,那么就会出现一种可能,两个及以上的事件可能会同时出现,那么AQ模块会怎么反应呢?为了处理这个场景,AQ模块给两个通道的比较事件排了优先级,以最高优先级的事件为反应策略为准。由于使用场景较少,这里就不多做介绍了,详细请参考手册。
下图为DB的结构图:
DB模块功能也是也非常简单,最重要的就是可以为AQ的两个输出信号EPWMA和EPWMB增加增加一个延时然后形成死区时间,这个功能一般会在电机控制以及开关电源控制应用中会遇到,也是非常的简单在这里就不多说了,感兴趣的小伙伴可以参考手册。
为了区分AQ模块和DB模块中EPWMA和EPWMB,给信号名称加上前缀后为AQ_EPWMA/AQ_EPWMB和DB_EPWMA/DB_EPWMB,DB模块的输入信号为AQ_EPWMA/AQ_EPWMB, DB模块会给该信号增加开关和逻辑门,最终生成信号DB_EPWMA/DB_EPWMB。具体如下:
下图为PC的结构图:
PC模块的作用其实就是给DB_EPWMA/DB_EPWMB增加PWM载波,直接观察下图就可以理解了:
这种应用一般会出现在电机控制和开关电源这种需要高频PWM调制的应用中。至于载波PSCLK的周期和频率是可以控制的,灵活应用。不过对于载波的周期配置只能固定配置16个点,而占空比的配置也只有7个占空比能选择,分别是12.5% 到 87.5%,每级增加12.5%。
该模块就是用来检测ePWM模块内部的事件,然后触发中断信号和ADC触发信号。具体信号如下:
对于上图中的CTRU, CTRD的结束其实就是counter当时的工作状态是累加还是递减。另外ET还有一个功能就是它有一个2bit的计数器(下图红框部分),当事件发生时,这个计数器可以累加,只有当事件累计到配置数时才可能最终产生中断或者ADC触发信号。
其可以配置成以下三种情况:
TZ模块就是实现了Trip功能,也就是接收相关错误信号然后关闭PWM输出这类的保护措施,具体Trip可由以下几个信号触发:
其中TZ1, TZ2, TZ3连接至外部引脚, TZ4连接至eQEP1或者eQEP2的错误信号,TZ5连接至系统时钟错误信号,TZ6连接至CPU Debug Mode entry,当调试时Halt CPU时,可触发Trip。DCAEVT1/2和DCBEVT1/2则为DC模块比较事件输出信号。
TZ模块分为了两种Trip模式,分别是Cycle-by-Cycle和One-Shot。这两种的区别在于Cycle-by-Cycle当Trip信号消失后,PWM可以被恢复,所以一般应用于一些PWM输出被当前一些操作限制而暂时触发Trip,而One-Shot则不可恢复,一般应用在短过流这种重大错误事件。
在前面多次出现了DCAEVT, DCBEVT的信号,简单的提了一下这是DC模块比较事件输出信号,接下来看看这个信号是怎么产生的。下图为DC的结构图:
DC模块说白了就是可以比较三个外部输入信号值,当其中两个输入状态相等时就可以产生相关Digital Compare event。具体就是可以检测TZ1,TZ2,TZ3三个外部输入引脚的状态,首先对TZ1,TZ2,TZ3进行选择后产生4个信号,分别是DCAH, DCHL, DCBH,DCBL; 其中这四个信号可等于TZ1,TZ2,TZ3任何一个。然后再将DCAH, DCHL, DCBH, DCBL进行比较产生4个事件,分别是DCAEVT1, DCAEVT2, DCBEVT1, DCBEVT2,这4个事件可以配置成:
在TI的手册上,列举了几个非常常见的ePWM应用示例,分别是:
大家结合前面的功能解析仔细观察这些例子,应该可以快速明白,这里就不多提了,关于ePWM的就不多说了。