AVR使用范例--定时器实现PWM功能 下载本文

内容发布更新时间 : 2024/6/22 18:44:45星期一 下面是文章的全部内容请认真阅读。

AVR使用范例--定时器实现PWM功能

本页关键词: 什么是pwm pwm原理 pwm控制 pwm芯片 pwm 单片机 单片机pwm控制应用 pwm电路 pwm输出 pwm调制

脉宽调制PWM是开关型稳压电源中的术语。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。

通俗的说PWM就是波形,波形的波峰以波谷的比例关系成为占空比,我们可以通过PWM控制电机,音量控制,模拟控制等。

AVR单片机的定时器可以轻松实现PWM功能。mega16和mega32的timer0是和timer2都具有PWM功能,timer0和timer2都为8位定时器。timer2为异步操作定时器,在操作过程中要等待寄存器状态更改完成。详情参看数据手册:8位有pwm操作的异步操作定时器timer2。

下图设定使用timer0来实现PWM功能。PWM电机控制:。

OC0 output mode 设定了pwm输出控制选择:正常的端口操作,不与OC0 相连接, 比较匹配发生时OC0 取反, 比较匹配发生时OC0 清零, 比较匹配发生时OC0 置位。

Waveform mode设定了波形产生模式:比较匹配输出模式,快速PWM 模式,相位修正PWM 模式。更详细的内容请参看数据手册。

看看程序代码:

//ICC-AVR application builder : 2006-11-25 0:15:12 // Target : M16 // Crystal: 7.3728Mhz

#include #include

void port_init(void) {

PORTA = 0x00; DDRA = 0x00;

DDRB = 0x08; //PB3为PWM输出,非常重要,否则无法输出波形 DDRB = 0x00;

PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0x00; }

//TIMER0 initialize - prescale:64 // WGM: Normal

// desired value: 1KHz

// actual value: 1.002KHz (0.2%) void timer0_init(void) {

TCCR0 = 0x00; //stop

TCNT0 = 0x8D; //set count /*TCNT0*/ OCR0 = 0x73; //set compare /*OCR0*/ TCCR0 = 0x23; //start timer /*TCCR0*/ }

#pragma interrupt_handler timer0_comp_isr:20 void timer0_comp_isr(void) {

//compare occured TCNT0=OCR0