PWM工作模式及中段
已有 911 次阅读 2009-10-14 10:168位PWM工作模式
SPMC65系列单片机中,Timer 0/2/4属于第一种(类型I)——8位PWM。当TxFS[-2:0]设置为111后,Timer X就工作在8位PWM模式下,相应的引脚(例如,定时/计数器0对应PB2)自动成为PWM输出引脚。PWM周期在寄存器P_TMRx_PWMPeriod中设置,占空比在寄存器P_TMRx_PWMDuty中设置。在8位PWM模式下,使能8位PWM功能后用户必须首先写寄存器P_TMRx_PWMDuty,然后再写寄存器P_TMRx_PWMPeriod。时钟的分频系数由TxPsS[2:0]位选择。当PwM使能后,计数器载入计数初值(P_TMRx_PwMPeriod的值),开始计数,同时,相应的引脚输出低电平。在计数过程中,计数值不断地和占空比值(P_TMRx_PwMDuty的值)进行比较.相等时,PWM引脚输出电平翻转,为高电平。计数器继续计数,直到溢出,此时一个周期的方波输出完成。接着,PWM引脚再次翻转,输出低电平,计数器重新载入计数初值开始计数,产生下一个PWM输出,依次不断循环。
PWM周期和占空比计算如下述。
如果 PRDREG=周期值寄存器数值
DUTYREG=占空比值寄存器数值
T_TMRx=Timer x预分频后计数时钟周期 (x=0、2、4)
那么 PWM周期=[$100H—PRDREG]*T_TMRx
PWM占空比=I$FFH—DuTYREG]*T_TMRx
12位PWM工作模式
SPMC65系列单片机中.Timer 1/3属于第二种(类型Ⅱ)——12位PWM。当TxFS[2:0]设置为111后,Timer X就成为12位PWM发生器,相应的引脚(如:Timer 1对应PB3)自动成为12位PWM输出引脚。PWM周期在寄存器P_TMRx_PWMPeriod和P_TMRx:Duty-Period[3:0]中设置;占空比在寄存器P_TMRx_DutyPeriod [7:4]和P_TMRx_PWMDuty.中设置;时钟的分频系数由TxPSS[2:0]位选择。当PWM使能后,计数器载入计数初值(P_TMRx_PWMPeriod的值),开始计数,同时,相应的引脚输出低电平。在计数过程中,计数值不断的和占空比值{P_TMRx_DutyPeriod [7:4],P_TMRx_PWMDuty[7:0]}进行比较。相等时,PWM引脚输出电平翻转,为高电平。计数器继续计数,直到溢出,此时一个周期的方波输出完成。接着,PWM引脚再次翻转,输出低电平,计数器重新载入计数初值开始计数,产生下一个PWM输出.依次不断循环。
一般8位CPU,总线宽度为8位,通常无法直接访问16位的数据。因此,在12位PWM模式下,需要先写入高字节寄存器P_TMRx_DutyPeriod(MSB byte)并被缓冲器自动保存,然后再写入低字节P_TMRx_PWMPeriod(周期)/P_TMRx_PWMDuty(占空比),直到12位数据全部写入,缓冲器的值才会直正载人到寄存器当中,这样缓冲器中的高字节和低字节将会同时载入定时/计数器x(x=1、3)中去。
如图5.17所示为12位PWM模式原理框图。图5.18为12位PWM波输出的操作时序图。
PWM周期和占空比计算公式:
如果
PRDREG={P_TMRx_DuyPeriod [3:0],P_TMRX_PwMPeriod[7:O])
DUTYREG={P_TMRx_DuyPeriod [7:4],P_TMRx_PWMDuy[7:0]}
T_TMRx=Timer x预分频后计数时钟周期(x=1,3)
那么
PWM PERIOD=[$1000H-PRDREG]*T_TMRx
PWM DUTY=[$FFFH-DUTYREG]*T_TMRx
16位PWM工作模式
SPMC65系列单片机中,Timer 5属于第三种(类型Ⅲ)——16位PWM。当T5FC [2:0]设置为111后,Timer 5就成为16位PWM发生器,相应的引脚PD7自动成为16位PWM输出引脚。PWM周期在寄存器P_TMR5_PWMPeriodLO($23)和P_TMR5_PwMPeriodHi($24)中设置;占空比在寄存器P_TMR5_PWMDutyLo($25)和P_TMR5_PWMDutyHi($5F)中设置;时钟的分频系数由TSPSS[2:0]位选择。当PWM使能后,计数器载入计数初值{P_TMR5_PwMPeriodHi,P_TMR5_PWMPeriodLO},开始计数。同时,引脚PD7输出低电平。在计数过程中,计数值不断的和占空比值{P_TMR5_PWMDutyHi,P_TMR5_PWM_DutyLo}进行比较,相等时,PWM引脚输出电平翻转,为高电平。计数器继续计数,直到溢出,此时一个周期的方波输出完成。接着,PWM引脚再次翻转,输出低电平,计数器重新载入计数初值开始计数,产生下一个PWM输出,依次不断循环。
一般8位CPU,总线宽度为8位,通常无法直接访问16位的数据。因此,在16位PWM模式下,周期值寄存器和占空比值寄存器也分别占用了高字节寄存器(MSB字节)和低字节寄存器(LSB字节);在设置周期值寄存器和占空比值寄存器时,也需要按照先写高字节寄存,然后再写低字节寄存器的顺序。
如图5.19所示为16位PWM输出原理框图。而Timer 5的PWM模式操作时序与其他PWM模式类似,具体可以参考前面有8/12位PWM模式的介绍。
PWM周期和占空比计算公式:
如果
PRDREG={P_TMR5_PWMPeriodHi,P_TMR5_PWMPeriodLo}
DUTYREG={P_TMR5一PWMDutyHi,P_TMR5_PWMDutyLo}
T_TMR5_Timer5预分频后计数时钟周期
那么
PWM周期=[$10000H—PRDREG]*T_TMR5
PWM占空比=[$FFFF—DUTYREG]*T_TMR5
PWM中断
与PWM操作相关的中断有:Timer 0溢出中断、Timer 1溢出中断、Timer 2溢出中断、Timer 3溢出中断、Timer 4溢出中断和Timer 5溢出中断。
设置PWM中断的步骤如下。
①执行指令“SEI”关闭总的中断开关。
②决定采用8位还是12位或是16位的PWM方式并选择一个合适的Timer。
③设置与PWM操作相关寄存器。
④在寄存器P_INT_Ctrll($OF)中使能该Timer溢出中断(PWM中断)。
⑤执行指令“CLI”打开总的中断开关。
⑥设置完毕.等待PWM中断产生。
SPMC65系列单片机的PWM中断应用可参考对应定时/计数器的中断应用。
发表评论 评论 (0 个评论)