你好!欢迎来到深圳市颖特新科技有限公司!
语言
当前位置:首页 >> 技术中心 >> 单片机入门 >> AVR单片机TC0快速PWM

AVR单片机TC0快速PWM

关键字:AVR TC0 PWM 单片机 作者:admin 来源:不详 发布时间:2018-05-19  浏览:5

 

1.jpg

PWM:脉冲宽度调制,图中T为脉冲周期,t为高电平时间,t与T的比值t/T称为占空比,脉宽调制指的是调整t的大小,即改变脉冲的占空比,占空比值越大,输出的电压越高。改变占空比就改变输出的电压,常用于实现D/A,调节电压或电流,改变电动机的转速等。

快速PWM模式:它的计数方式是TCNT0由0开始计数到255式,计数加1返回到0,然后继续加1计数,相对于相位PWM修正模式(由0计数到255,再从255计数到0),只有一个斜坡,因此PWM输出频率高。在快速PWM模式下,计数器的最大值决定了PWM的频率,而比较寄存器OCR0决定了占空比的大小。T/C0是8位计数器, 输出PWM的频率=系统时钟频率/(分频系数*255) 。

PWM产生过程:定时器启动后,当TNCT0和OCR0的值相等时,输出引脚OC0(PB3)清0,当TNCT0到255时OC0置位,在程序运行过程中改变OCR0中的数值,就改变了OC0输出的占空比。

//函数功能:控制PB3引脚上的发光二极管由亮到灭,再由灭到亮 (代码来自轻松玩转AVR单片机c语言cd)

#include

#define uchar unsigned char

#define uint unsigned int

unsigned int count;

/*********以下是延时函数*********/

void Delay_ms(uint xms)

{

int i,j;

for(i=0;i

{ for(j=0;j<1140;j++) ; }

}

/********以下是端口初始化函数********/

void port_init()

{

DDRB|=(1<

PORTB&=(0<

}

/********定时器0初始化********/

void timer0_init()

{

TCCR0=(1<

// T/C0工作于快速PWM模式,不分频

//比较匹配时,OC0置位,记数到0XFF时,清零OC0

OCR0=0; //比较匹配寄存器初值,

SREG=0x80; //使能全局中断

}

/*********以下是主函数*********/

void main(void)

{

port_init();

timer0_init();

while(1)

{

for(count=0;count<256;count++) //OCR=0时,LED最亮,然后逐渐变暗

{

OCR0=count; //比较匹配寄存器赋值

Delay_ms(20); //延时一段时间,以观察效果

}

Delay_ms(3000); // LED最暗时,延时一段时间

for(count=255;count>0;count--) //OCR=255时,LED最暗,然后逐渐变亮

{

OCR0= count;

Delay_ms(20);

}

Delay_ms(3000); //LED最亮时,延时一段时间

}

}

【更多资源】

编辑:admin  最后修改时间:2018-05-19

联系方式

0755-82591179

传真:0755-82591176

邮箱:vicky@yingtexin.net

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

Copyright © 2014-2023 颖特新科技有限公司 All Rights Reserved.  粤ICP备14043402号-4