软件强制功能是一个很有用的异步事件,通过AQSFRC和AQCSFRC两个寄存器控制。AQ子模块用来控制在一个特殊事件触发时刻如何改变EPWMxA及EPWMxB的状态,输入到AQ子模块内部的事件进一步被计数器的计数方向区别,从而允许在上升时刻和下降时刻的单独控制。对EPWMxA和EPWMxB所允许的操作如下表所示:
软件强制 0 否 无动作 时间计数器的值等于 CMPA 无动作 CMPB 无动作 周期值 无动作 A、B低电平 A、B高电平 A、B状态翻转 EPWM的输出动作 无动作 拉低 置高 翻转 软件强制低 强制低 EPWMxA强制低 EPWMxB强制低 软件强制高 强制高 EPWMxA强制高 EPWMxB强制高 软件翻转 注:
EPWMxA翻转 EPWMxB翻转 无动作:保持EPWMxA或EPWMxB的输出状态不变,虽然“无动作”对PWM的输出状态没有影响,当它仍能触发中断及产生ADC启动信号
对EPWMxA和EPWMxB的动作设定是完全独立的,任何一个事件都可以对EPWMxA或EPWMxB中的任何一个产生任何动作。例如,CTR=CMPA和CTR=CMPB这两个事件都可以控制EPWMxA产生相应的动作,也都可以用来控制EPWMxB产生相应的动作。
ePWM的动作限定子模块AQ可以在同一时间处理多个触发事件(因为有很多计算器、比较器、周期寄存器),与中断管理器PIE类似,这样就需要为这些事件分配优先级。一般情况下,在时间上看,后发生的事件比先发生的事件具有更高的优先级,且软件强制事件(强制高、强制低、强制翻转等)具有最高的优先级。
表1 连续增减计数模式下事件的优先级
优先级 TBCTR正在増计数 从TBCTR=0递增到TBCTR=TBPRD 1(最高) 2 3 4 5 6(最低)
表2 增计数模式下的事件优先级 表3 减计数模式下的事件优先级 优先级 1(最高) 2 3 4 5(最低)
对EPWMxA和EPWMxB的动作设定是完全独立的,任何一个事件都可以对EPWMxA或EPWMxB中的任一个产生任何动作。例如,CTR=CMPA和CTR=CMPB这两个事件都可以控制EPWMxA产生相应的动作,也都可以用来控制EPWMxB产生相应的动作。
为简便起见,采用下图所示的图形来表示AQ模块中EPWMxA/xB的各种动作。
事件 软件强制事件 计数器的值等于TBPRD 计数器的值等于CMPB(CBU) 计数器的值等于CMPA(CAU) 计数器等于零 优先级 1(最高) 2 3 4 5(最低) 事件 软件强制事件 计数器的值等于零 计数器的值等于CMPB(CBD) 计数器的值等于CMPA(CAD) 计数器等于TBPRD 软件强制事件 TBCTR正在减计数 从TBCTR=TBPRD递减到TBCTR=0 软件强制事件 递增计数器的值等于CMPB(CBU) 递减计数器的值等于CMPB(CBD) 递增计数器的值等于CMPA(CAU) 递增计数器的值等于CMPA(CAD) 计数器等于零 计数器的值等于TBPRD 递减计数器的值等于CMPB(CBD) 递增计数器的值等于CMPB(CBU) 递增计数器的值等于CMPA(CAD) 递增计数器的值等于CMPA(CAU)
ePWM动作限定子模块AQ有4个寄存器,分别是两个控制寄存器AQCTLA\\B、软件强制寄存器AQSFRC、连续软件强制寄存器AQCSFRC。AQ控制寄存器的A、B的位的含义一样,区别只是在于分别按照EPWMxA、EPWMxB的关系对应,它们的含义为:
15~12 保留 目前用作保留位 当时间基准计数器的值等于CMPB的值,且正在递减计数 00:无动作 01:使EPWMxA\\xB为低电平 10:使EPWMxA\\xB为高电平 11:翻转EPWMxA\\xB的当前状态 当时间基准计数器的值等于CMPB的值,且正在递增计数 00:无动作 01:使EPWMxA\\xB为低电平 10:使EPWMxA\\xB为高电平 11:翻转EPWMxA\\xB的当前状态 当时间基准计数器的值等于CMPA的值,且正在递减计数 00:无动作 01:使EPWMxA\\xB为低电平 10:使EPWMxA\\xB为高电平 11:翻转EPWMxA\\xB的当前状态 当时间基准计数器的值等于CMPA的值,且正在递增计数 00:无动作 01:使EPWMxA\\xB为低电平 10:使EPWMxA\\xB为高电平 11:翻转EPWMxA\\xB的当前状态 当时间基准计数器的值等于周期寄存器的值 3~2 PRD 配置与上行相同 当时间基准计数器的值等于0 00:无动作 01:使EPWMxA\\xB为低电平 10:使EPWMxA\\xB为高电平 11:翻转EPWMxA\\xB的当前状态 11~10 CBD 9~8 CBU 7~6 CAD 5~4 CAU 1~0 ZRO ePWM动作限定子模块AQ除了两个控制寄存器之外,还有软件强制寄存器AQSFRC、连续软件强制寄存器AQCSFRC。名字里只有一个“连续”的差别,那它们都是实际功能有什么区别呢?
软件强制寄存器AQSFR各位的含义是:
15~8 7~6 保留 RLDCSF 保留 AQCSFRC当前寄存器从映射寄存器中加载数据 00:在CTR=0时加载 01:在CTR=PRD时加载 10:即在CTR=0时加载,也在CTR=PRD时加载 11:立即模式 5 OTSFB 对输出B的一次性强制事件 0:写0无反应,读则始终返回0 1:发起一次软件强制事件 注:当一次写操作完成后,此位将自动清零 4~3 ACTSFB 定义当输出B的软件强制事件发生时,EPWMxB的状态变化 00:无动作 01:置位低电平 10:置位高电平 11:翻转当前状态 注:与计数器的方向无关 2 OTSFA 对输出A的一次性强制事件 0:写0无反应,读则始终返回0 1:发起一次软件强制事件 注:当一次写操作完成后,此位将自动清零 1~0 ACTSFA 定义当输出A的软件强制事件发生时,EPWMxA的状态变化 00:无动作 01:置位低电平 10:置位高电平 11:翻转当前状态 注:与计数器的方向无关 而连续软件强制寄存器AQCSFRC各位的含义是:
15~4 3~2 保留 CSFB 保留 输出B的连续软件强制触发控制 在立即模式下,强制动作发生在下个TBCLK的边沿; 在映射模式下,强制动作发生在装载后的下个TBCLK边沿,可用AQSFRC[RLDCSF]位控制是否使用映射模式 00:无动作 01:连续强制EPWMxB为低电平 10:连续强制EPWMxB为高电平 11:软件强制禁止,无动作 1~0 CSFA 输出A的连续软件强制触发控制 在立即模式下,强制动作发生在下个TBCLK的边沿; 在映射模式下,强制动作发生在装载后的下个TBCLK边沿,可用AQSFRC[RLDCSF]位控制是否使用映射模式 00:无动作 01:连续强制EPWMxA为低电平 10:连续强制EPWMxA为高电平 11:软件强制禁止,无动作 可以看出,AQSFR在特定时间发生时,对PWM管脚的状态变化是一次性的,而AQCSFRC是连续强制的。几年前使用ePWM的时候,一开始没有注意到“连续”这个词,结果怎么也无法根据特定事件来连续保持强制的ePWM管脚状态。
PWM波形的正确产生,除了前面的那些模块配置,例如计数模式、输出状态配置等要正确以外,还有个关键的问题就是载波与调制波的关系。PWM这种脉宽调制技术,其输出电压的有效值是靠调节脉冲宽度来实现的,而脉冲宽度的变化又是由调制波和载波相比较之后产生对应的输出脉冲的电平变化。
调制波是由控制算法产生的,例如SPWM的调制波就是正弦波,而SVPWM的调制波是马鞍形状波峰波谷的类似正弦波。载波是由ePWM里的硬件电路产生的,由多个高分辨率的计数器来计