Atmega2560基础教程(11)——16位定时器(TIM1/3/4/5)FastPWM模式

Atmega2560基础教程(11)——16位定时器(TIM1/3/4/5)FastPWM模式

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

1.工作原理

FastPWM模式下,频率固定,占空比可改,16位定时器一共有四种FastPWM模式,这里我们采用可变位数的模式。定时器的数值向上递增,当递增至ICRx值重新计数,同时发生电平翻转,在这个过程之中之中如果其数值与OCRxA或者OCRxB或者OCRxC数值相等则于定时器相应连接的引脚将会发生动作,具体动作方式需根据相应设置而决定
频率计算公式:

  f 1 = f c l k _ I / O N I C R x \Large \ f_{1}=\frac{f_{clk\_I/O}}{N*ICRx}

2.OCRxA寄存器

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

3.OCRxB寄存器

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

4.OCRxC寄存器

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

5.ICRx寄存器

决定定时器的位数,同时影响频率

6.TCCRxA寄存器

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

具体配置方式如下:

7.TCCRxB寄存器

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

具体配置方式如下:

8.具体例子


/*
 * 定时器1,工作在FastPWM模式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(WGM12)|_BV(CS10);           //FastPWM模式4,不分频
	while (1)
	{
	}

}

波形图

发布了12 篇原创文章 · 获赞 2 · 访问量 4143

猜你喜欢

转载自blog.csdn.net/jiantoushi/article/details/104090018
今日推荐