avr单片机 pwm功能
来源:百度知道 编辑:UC知道 时间:2024/05/26 04:10:31
在产生PWM的时候还要就下波形的脉冲个数,大家说不占用cpu,可是我要的波形频率在387到12600hz之间。当工作在12600hz的时候中断产生的不是很快嘛,当中端很多的时候cpu不是一样被占用吗?????
AVR单片机TC0快速PWM
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<