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=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