您好,欢迎进入 官方网站!

您现在的位置: 首页 新闻资讯>> 新闻头条>> AVR 定时器快速PWM模式使用
新闻资讯
NEWS INFORMATION

AVR 定时器快速PWM模式使用

发布时间:2019-05-22

PWM很常用,AVR自带内部PWM功能,分为快速PWM模式和相位修正PWM模式。

我们这里选择方式15 ,由OCR1A保存上限值,由OCR1B保存匹配值,所以输出管脚 OCR1A不能输PWM,只能有OCR1B输出PWM信号。

如果用方式 5,6,7模式 上限值是固定的,所以我们就可以用OCR1A和OCR1B保存匹配值

OCR1A和OCR1B都可以输出PWM信号。

快速PWM时序图

根据此公式计算出OCR1A和OCR1B的数值

OCR1A:

1,11059200 / 100 /64 = 1728 // 11.0592MHz晶振系数 / 100Hz频率 / 64分频

2,1728 - 1 = 1727 //得到上限值,赋值给OCR1A

OCR1B:

1,1727 / 5 = 345.4 ( 取值为345 ) //得到匹配值,设定为2ms,赋值给OCR1B

100Hz表示每秒震动100次,所以周期是1s / 100 = 0.01s 即10ms

100Hz周期是10ms,要定时2ms即用 1727 / 5 =345.4 取值为345

所以也可以知道产生的是占空比为20%的PWM信号

测试代码:

#include

void FastPWM(void)

{

DDRD_Bit4 = 1; // OC1B 管脚设置为输出

DDRD_Bit5 = 1; // OC1A 管脚设置为输出

TCCR1A=(0<

// OC1A 作为上限值 电平取反 OC1B 作为比较值 比较匹配时清零,到达上限值是置1

// TCCR1A ==> COM1A1 , COM1A0 , COM1B1 , COM1B0 , FOC1A , FOC1B , WGM11 , WGM10

// 0 1 1 0 无关 无关 1 1

TCCR1B=(1<

// 波形产生模式15 , 64分频

// TCCR1B ==> ICNC1 , ICES1 , - , WGM13 , WGM12 , CS12 , CS11 , CS10

// 无关 无关 1 1 0 1 1

OCR1A=1727; // 晶振频率 11.0592MHz , 设定 100Hz PWM信号 , 64分频

OCR1B=345; // 为2ms的高电平持续时间

}

void main(void)

{

FastPWM();

}

联系方式 0755-82591179

传真:0755-82591176

邮箱:vicky@yingtexin.net

地址:深圳市龙华区民治街道民治大道973万众润丰创业园A栋2楼A08

Baidu
map