历史上的今天
今天是:2024年10月16日(星期三)
2019年10月16日 | AVR单片机ATmega16之初识PWM模式
2019-10-16 来源:eefocus
书本上开篇关于这部分的描述是这样讲的:相对于一般的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)
想了想还是把内些常见寄存器的配置放上来吧,不然总觉的配不上超详细这几个字,大家看看就行,我就不多逼逼,哈哈 



史海拾趣
|
招聘:3G.嵌入式.DSP/FPGA.电子专家(全职兼职均可)! 我公司因业务发展需招聘3G.嵌入式.DSP/FPGA.电子专家(全职兼职均可)!, 要求: 1 五年以上实际项目经验, 2 在3G.嵌入式.DSP/FPGA.电子等相关行业有出色的工作成绩 3 现所在城市不限,性别不限. 年薪:10-50w左右 有意向的朋友发邮件 ...… 查看全部问答> |
|
我需要从SuperIO(IT8718F)上读CPU电压,看了IT8718F的SPEC,了解到可以从Environment Controller的Index为20H~27H读到一些电压值,并且有转换公式: Positive Voltage:Vs=Vin*(Ra+Rb)/Rb Negative Voltage:Vs=(1+Rin/Rf)*Vin-(Rin/Rf)*VREF 现 ...… 查看全部问答> |
|
要在一个现场办公的PDA上实现指纹识别功能 ,通过该功能确认使用人的信息。现在没有思路,不知道有谁做过类似的系统,给推荐一款PDA或其他相应的设备以及相关资料。… 查看全部问答> |
|
急!手上有一块自制的STM32F100C6T6目标板,软件使用的是IAR4.42,仿真器使用STLINK-II,现在的情况是1。目标板可以通过ISP下载程序并正常运行2。在IAR4.42环境下,使用STLINK-II进行JTAG仿真时,显示“无法停止内核”的错误,(JTAG硬件电路 ...… 查看全部问答> |
|
ATMEGA64驱动TFT6448BS-5.7 单片机接口驱动TFT彩屏 该例中,使用ATMEGA64驱动总线型液晶显示器TFT6448BS-5.7。 ATMEGA64使用IO口模拟并行总线方式连接TFT6448BS-5.7。 另外,该例中也包含了触摸控制器的使用方法,ATMEGA64使用了6个IO口控制ADS7843, ...… 查看全部问答> |




