其他分享
首页 > 其他分享> > Atmega2560基础教程(12)——16位定时器(TIM1/3/4/5)Phase Correct PWM模式

Atmega2560基础教程(12)——16位定时器(TIM1/3/4/5)Phase Correct PWM模式

作者:互联网

Atmega2560基础教程(12)——16位定时器(TIM1/3/4/5)Phase Correct PWM模式

Atmega2560一共有4个16位的定时器,定时器1,定时器3,定时器4,定时器5,让16位定时器工作在Phase Correct PWM模式一般需要六个寄存器OCRxA,OCRxB,OCRxC,TCCRxA,TCCRxB,ICRx (x=1,3,4,5),16位定时器结构基本一致,因此以下均用定时器1为例

1.工作原理

Phase Correct PWM模式下,频率固定,占空比可改,16位定时器一共有四种Phase Correct PWM模式,这里我们采用可变位数的模式。定时器的数值向上递增,当递增至ICRx时,定时器开始递减至0X00,如此往复,这个过程中每当数值与OCRxA或者OCRxB或者OCRxC数值相等则于定时器相应连接的引脚将会发生动作,具体动作方式需根据相应设置而决定,上升过程与下降过程的动作正好相反
频率计算公式:

 f1=fclk_I/O2NICRx \Large \ f_{1}=\frac{f_{clk\_I/O}}{2*N*ICRx}  f1​=2∗N∗ICRxfclk_I/O​​

2.OCRxA寄存器

比较时与定时器相连A引脚发生动作的点

3.OCRxB寄存器

比较时与定时器相连B引脚发生动作的点

4.OCRxC寄存器

比较时与定时器相连C引脚发生动作的点

5.ICRx寄存器

决定定时器的位数,以及输出的频率

6.TCCRxA寄存器

主要决定,当定时器与OCRxA或者OCRxB或者OCRxC数值相等时,引脚作何动作,以及与TCCRxB的第4位共同决定定时器工作在Phase Correct PWM模式

具体配置方式如下:

7.TCCRxB寄存器

主要决定分频数,分频数不同可以改变频率

具体配置方式如下:

8.具体例子


/*
 * 定时器1,工作在Phase Correct PWM模式4,PB5,PB6,PB7输出,当匹配时置低,当重置时置高
 */ 

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/sfr_defs.h>
#include <avr/interrupt.h>

float duty=10,duty1=40,duty2=70;              //3通道的占空比分别为,10,40,70                                                         
int i,i1,i2;

int main(void)
{
	duty=65536-duty*65536/100;
	i=duty;
	OCR1A=i;
	duty1=65536-duty1*65536/100;
	i1=duty1;
	OCR1B=i1;
	duty2=65536-duty2*65536/100;
	i2=duty2;
	OCR1C=i2;
	DDRB=0XFF;
	PORTB=0XFF;
	ICR1=0XFFFF;                                        //16位
	TCCR1A |=_BV(WGM11)|_BV(COM1A0)|_BV(COM1A1)|_BV(COM1B0)|_BV(COM1B1)|_BV(COM1C0)|_BV(COM1C1);
	TCCR1B |=_BV(WGM13)|_BV(CS10);           //Phase Correct PWM模式4,不分频
	while (1)
	{
	}

}

波形图

jiantoushi 发布了12 篇原创文章 · 获赞 2 · 访问量 4122 私信 关注

标签:定时器,Atmega2560,16,BV,12,Phase,PWM,Correct
来源: https://blog.csdn.net/jiantoushi/article/details/104090903