×
单片机 > 单片机程序设计 > 详情

AVR单片机ATmega16之初识PWM模式

发布时间:2020-08-27 发布时间:
|

书本上开篇关于这部分的描述是这样讲的:相对于一般的8位单片机而言,AVR不仅配备了更多的定时/计数器接口,而且还是增强型的例如通过定时/计数器与比较匹配寄存器相互配合,生成占空比可调的方波信号,即脉冲宽度调制输出的PWM信号,用于D/A转换,电机无极调速控制、变频控制等(这样一段书上的导语其实已经很好地概括了PWM的产生原理,和用途),下面说说具体的实现方式吧(都是以T/C0定时器为例来实现的)。按照我自己的粗略总结大致分为三大类(下面会逐条详细解释):1.CTC模式产生(50%占空比的方波信号) 2.快速PWM模式   3.相位可调PWM模式 (因为是初学如有不对,还望朋友们指正!!!)

先来看看这东西对应的输出引脚吧: 

(根据图上的信息可以知道T/C0定时器对应的输出口为OC0对应的是PB3管脚,同理:T/C2对应的为OC2对应PD7)
    
一.CTC模式产生(50%占空比的方波信号)   
一言以蔽之:用计时器定出时间,在设定时间到时,改变相关引脚的输出电平值,每次取反(就跟异或原理相同)。恰好每次时间间隔都相同,这样就能理解为什么是50%占空比了(当然这种用法比较特殊,也有着它的局限性:比如占空比就不可调)
    下面讲讲具体的配置吧:
   1.TCNT0:计数寄存器(每次到与OCR0匹配时就会清零TCNT0的值,所以也不用配置了)
   2.OCR0:输出比较寄存器
   3.TIMSK:定时/计数器屏蔽寄存器(这里用不上)
   4.TIFR:定时/计数器中断标志寄存器(这里也用不上)
   5.TCCR0:主要的配置就是这个寄存器了(它的COM01(5)和COM00(4)配置成01,即为比较匹配时,触发OC0(OC0为原OC0的取反))
 
这里有一个公式来计算其他频率(占空比仍为50%):输出的频率=选定的时钟/(2*N(1+OCR0))         N:为分频数

二.快速PWM模式:
 

在该模式下又分正向比较匹配输出和反向比较匹配输出:
 

(是正向的话,计数到设定匹配值管脚输出0,计数到255(0xff)时管脚输出1,反向的话计数到设定匹配值管脚输出1,计数到255(0xff)时管脚输出0)


①TCNT0计数到255(oxff)时,溢出标志位TOV0置1,可以用来申请中断。可以在中断服务程序中修改OCR0的值
②OC0的输出的PWM波形频率计算公式:PWM的频率=所选时钟源频率/256N      (N为分频数)
③通过设置OCR0的值便可获得不同占空比的脉冲波形
④该模式是单程向上加1计数的






三.相位可调PWM模式
 

与快速PWM模式类似的,也有正反向,只不过多了个减数的过程与上个模式的④相比,这个是先加数过程和OCR0比一次,后又从255减下来跟OCR0再比一次,这样一加一减算作一个完整的过程。
 


(随意吐槽一句,写书就是喜欢写的高大上一点,就是不喜欢说人话,emmmmm)
(正向比较匹配输出时,TCNT0加1计数与OCR0比较,OC0输出0,从255减到OCR0,OC0输出1,正向比较匹配输出时,TCNT0加1计数与OCR0比较,OC0输出1,从255减到OCR0,OC0输出0)


①TCNT0计数0x00时,溢出标志位TOV0置1,可以用来申请中断。可以在中断服务程序中修改OCR0的值
②OC0的输出的PWM波形频率计算公式:PWM的频率=所选时钟源频率/510N      (N为分频数)
③通过设置OCR0的值便可获得不同占空比的脉冲波形
④该模式双程计数


  
总结:通过以上两种模式PWM对比,十分直观,除了③相同,其他还是有些差别和相似点的
    相信机制的你也发现了,快速PWM模式采用单程计数方式,所以它可以产生比相位可调PWM模式高1倍频率的PWM波。因此快速PWM模式适用于电源调整,DAC等应用。相位可调PWM模式特性(即OC0逻辑电平的改变不是固定在TCNT0=0x00处),适用于电机控制一类的应用。


无论是快速还是相位可调模式下,占空比计算均可用这个公式:
OCR0的的(数)值/计数器上限的值(0xff 255)




      想了想还是把内些常见寄存器的配置放上来吧,不然总觉的配不上超详细这几个字,大家看看就行,我就不多逼逼,哈哈 
 

关键字:AVR单片机  ATmega16  PWM模式

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会