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里的硬件电路产生的,由多个高分辨率的计数器来计
数,产生递增、递减或者连续增减的“三角波”。加引号是因为,无论ePWM计数的分辨率多高,总是要受制于时钟频率的,因此实际的三角波是由一系列的台阶波形逼近得来的。载波的一个重要参数就是载波周期,关联到PWM上即PWM的开关频率(的倒数)。PWM的开关频率在ePWM实现时,由时基周期寄存器的值和ePWM模块的时钟周期共同决定。所以,在开关频率和时钟周期已知的情况下,需要的ePWM周期寄存器的值为:
非对称PWM波形(例如递增、递减)
周期寄存器的值=开关周期/时钟周期-1
对称PWM波形(例如连续增/减)
周期寄存器的值=开关周期/2倍时钟周期
可以看到在开关频率相同的情况下,对称PWM波形的周期寄存器的值是非对称PWM波形情况下的一半。这是因为在连续的增、减计数模式下,计数器的值递增计数到周期值后又会递减到0,所以只需要一半值。
在一些与电机控制有关的芯片发布会上,厂商在提到与PWM功能相关的特性时,往往有个指标叫“PWM分辨率”。初学者听到之后可能会一头雾水:PWM就是电平的高低切换,怎么会有个分辨率的指标呢?
从数字实现的角度来看,这个就不难理解了。上次提到PWM调制中的载波是由ePWM里的硬件电路产生的,但它不是纯粹的模拟电路(模拟、连续信号),而是由多个高分辨率的计数器来计数产生“三角波”的。PWM的分辨率,与A/D采样电路的分辨率是类似的概念,即一个信号是由多少位数字信号来逼近的。28335的ePWM的分辨率是10位的,这就意味着从0计数到计满16位的ePWM周期寄存器(65535),其分辨率是:
非对称PWM波形:10位的分辨率意味着一个信号由2^10=1024位来逼近65536个数,即计数器的最小分辨率是65536/1024=64个数。
对称PWM波形:分辨率只有非对称波形的一半,即9位,意味着由2^9=1512位来逼近65536个数,即计数器的最小分辨率是65536/512=128个数。
在理解PWM的基本方法,确定PWM的载波频率(周期值)之后,就可以根据需要的占空比来计算出ePWM比较寄存器中的值。在每个周期中,只有当三角波与比较器中的值匹配之后,才会产生相应的比较事件。非对称PWM和对称PWM波形的比较值的计算方法相同,都是:
ePWM比较寄存器器的值=(100%-占空比)*周期寄存器的值

