相频修正PWM模式与相位修正PWM模式的主要区别在于OCRnx寄存器的更新时间.详见图2-40与图2-41。
相频修正PWM模式的PWM分辨率可由ICRn或OCRnA定义。最小分辨率为2比特(ICRn或OCRnA设为0x0003),最大分辨率为16位(ICRn或OCRnA设为MAX)。PWM分辨率位数可用下式计算:
工作于相频修正PWM模式时,计数器的数值一直累加到ICRn(WGMn3:0=8)或OCRnA(WGMn3:0=9),然后改变计数方向。在一个定时器时钟里TCNTn值等于TOP值.具体的时序图如图2-41所示。图中给出了当使用OCRnA或ICRn来定义TOP值时的相频修正PWM模式。图中竖线TCNTn表示这是双边斜波操作。方框图同时包含了普通的PWM输出以及反向PWM输出。TCNTn斜波上的短水平线表示0CRnx和TCNTn的匹配比较。比较匹配发生时,OCnx中断标志将被置位。
在OCRnx寄存器通过双缓冲方式得到更新的同一个时钟周期里T/C溢出标志TOVn置位。若TOP由OCRnA或ICRn定义,则当TCNTn达到TOP值时0CnA或ICFn置位。
这些中断标志位可用来在每次计数器达到TOP或BOTTOM时产生中断。
改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值。否则.TCNTn与OCRnx不会产生比较匹配。
如图2-41所示,与相位修正模式形成对照的是,相频修正PWM模式生成的输出在所有的周期中均为对称信号。这是由于0CRnx在BOTTOM得到更新,上升与下降斜波长度始终相等。因此输出脉冲为对称的,确保了频率是正确的。
使用固定TOP值时最好使用ICRn寄存器定义TOP,这样OCRnA就可以用在OCnA输出PWM波。但是,如果PWM基频不断变化(通过改变TOP值),且由OCRnA寄存器的值来改变TOP值,则OCRnA的双缓冲特性使其更适合于基频不断变化的场合。
工作于相频修正PWM模式时,比较单元可以在OCnx引脚上输出PWM波形。设置COMnxl:0为2可以产生普通的PWM信号;设置COMnxl:0为3则可以产生反向PWM波形。要想真正输出信号,还必须将OCnx的数据方向设置为输出。产生PWM波形的机理是.OCnx寄存器在OCRnx与升序计数的TCNTn匹配时置位(或清零),与降序计数的TCNTn匹
配时清零(或置位)。输出的PWM频率可以通过如下公式计算得到:
式中,变量N代表分频因子(1、8、64、256或1 024)。
OCRnx寄存器处于极值时说明了相频修正PWM模式的一些特殊情况。在普通PWM模式下,若0CRnx等于BOTTOM,则输出一直保持为低电平;若0CRnx等于TOP,则输出保持为高电平。反向PWM模式则正好相反,若OCnA作为TOP值(wGMn3:o=9)且COMnAl:0=1,OCnA输出占空比为50%。