datasheet

AVR单片机TO定时器快速PWM模式范例

2016-10-09来源: eefocus关键字:AVR单片机  TO定时器  快速PWM模式
AVR单片机TO定时器快速PWM模式范例:

/*///////////////////////////////////////////////
///////定时器TO的使用例程——快速PWM模式/////////
//编译环境:ICCV7 for AVR
//晶体: 11.0592Mhz
///////////////////////////////////////////////*/
#include 
#include 
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00; 
DDRB = 0x08; //PB3为PWM输出
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x01;
OCR0 = 0xF0; //改变此值可改变占空比
TCCR0 = 0x7D; //设置为快速PWM模式,匹配时OC0置1,分频系数1024
}
// 频率计算公式:fOCn= fclk/(N*256)
// N=1024
// fOC0=11059200/(1024*256)=42.1875Hz
// 在PB3管脚输出占空比可调,频率为42.1875Hz的PWM信号
// 通过改变分频系数N改变频率
#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
void timer0_comp_isr(void)
{
//compare occured TCNT0=OCR0
}
#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
TCNT0 = 0x01; //reload counter value
}
void init_devices(void)
{
CLI(); //disable all interrupts
port_init();
timer0_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x03; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void main(void)
{
init_devices();
while(1);
}

 

 

 

快速PWM 模式(WGM01:0 = 3) 可用来产生高频的PWM 波形。快速PWM 模式与其他PWM模式的不同之处是其单斜坡工作方式。计数器从BOTTOM计到MAX,然后立即回到BOTTOM重新开始。对于普通的比较输出模式,输出比较引脚OC0在TCNT0与OCR0匹配时清零,在BOTTOM 时置位;对于反向比较输出模式, OC0 的动作正好相反。由于使用了单斜坡模式,快速PWM 模式的工作频率比使用双斜坡的相位修正PWM 模式高一倍。此高频操作特性使得快速PWM 模式十分适合于功率调节,整流和DAC 应用。高频可以减小外部元器件( 电感,电容) 的物理尺寸,从而降低系统成本。
工作于快速PWM 模式时,计数器的数值一直增加到MAX,然后在后面的一个时钟周期清零。图中柱状的TCNT0 表示这是单边斜坡操作。方框图同时包含了普通的PWM 输出以及反向PWM 输出。TCNT0 斜坡上的短水平线表示OCR0和TCNT0 的比较匹配。
工作于快速PWM 模式时,比较单元可以在OC0 引脚上输出PWM 波形。设置COM01:0为2 可以产生普通的PWM 信号;为3 则可以产生反向PWM 波形。要想在引脚上得到输出信号还必须将OC0 的数据方向设置为输出。产生PWM 波形的机
理是OC0 寄存器在OCR0 与TCNT0 匹配时置位( 或清零),以及在计数器清零( 从MAX变为BOTTOM) 的那一个定时器时钟周期清零( 或置位)。
OCR0寄存器为极限值时表示快速PWM模式的一些特殊情况。若OCR0等于BOTTOM,输出为出现在第MAX+1 个定时器时钟周期的窄脉冲; OCR0 为MAX 时,根据COM01:0的设定,输出恒为高电平或低电平。
通过设定OC0 在比较匹配时进行逻辑电平取反(COM01:0 = 1),可以得到占空比为50%的周期信号。OCR0 为0 时信号有最高频率foc2 = fclk_I/O/2。这个特性类似于CTC 模式下的OC0 取反操作,不同之处在于快速PWM 模式具有双缓冲。 

关键字:AVR单片机  TO定时器  快速PWM模式

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2016100930247.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:AVR 编程之矩阵键盘
下一篇:AVR ADC编程

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

AVR单片机——中断系统

中断的优点中断函数只在中断触发源触发的时候才会执行,其他时间不执行. 如果不使用中断而且如果要根据某个端口的变化而作相应的函数操作,就必须不断地查询端口的信号,而中断不用,只要端口一有变化,就会系统就会自动进入中断函数, 我觉得这就是中断的目的,也是优点.中断优先级1) AVR单片机在同一个优先级中,中断向量入口地址越低,其优先级越高。AVR单片机在响应中断以后,会禁止系统响应其余中断。如果程序需要在某个中断服务程序中响应其它中断事件,可以在该中断服务程序中用重新使能全局中断即可。否则,AVR单片机只有在退出中断进程时,才重新使能全局中断。2) AVR(至少是ATmega16)单片机采用固定的硬件优先级方式,不支持通过软件
发表于 2018-11-20
AVR单片机——中断系统

高手总结!AVR单片机学习笔记

下面是自己在学习AVR单片机时的学习经验,分享出来给大家,一起学习。1、  AVR单片机采用RISC架构,8051单片机采用CISC架构。前者速度为后者的2~4倍,为流水线操作指令2、  AVR单片机有32个通用寄存器(地址在RAM区从$0000开始到$001F),其中有6个(最后6个)合并为3个16位的X,Y,Z寄存器,用来存放地址指针,Z寄存器还可以寻址程序存储器3、  哈佛结构,131条机器指令4、  延迟开机功能5、  内部自带RC振荡器,可提供1/2/4/8MHZ的工作时钟6、 
发表于 2018-11-20

AVR单片机ATMEGA8 USART的使用

;       [Bus Signal]  TX, RX, CK    USART支持同步模式,因此USART 需要同步始终信号USART_CK(如STM32 单片机),通常情况同步信号很少使用,因此一般的单片机UART和USART使用方式是一样的,都使用异步模式。在博主目前的项目中使用通信主要是通过RS485协议来进行通信,RS485通信是工业上非常常见的半双工异步通信典型通信协议,特征是通信的设备都挂载到主线上,使用差分信号来判断收发,且同一时刻只能进行一个功能(收信息或者发信息)那么在博主这边的软件处理方式如下;首先要
发表于 2018-07-16

AVR单片机中ATmega8的AD转换探究

AD采集最好要满足的条件:采样频率不小于被采集信号最高频率的两倍,则采样输出信号就可以无失真的重新啊还原输入信号,通常的实际应用中,采样频率为采集最高频率的5-10倍。AD芯片的数据输出方式有串行和并行两种方式,对于AVR单片机来说A/D芯片和AVR单片机接口是需要考虑的一些问题:(1)模拟信号输入的连接:单端输入时,VIN+引脚直接与信号输入连接,VIN-接地。差分输入时,单端输入正信号,VIN+引脚直接与信号连接,VIN-引脚接地。单端输入负信号,VIN-引脚与信号连接,VIN+引脚接地。(2)数据输入线与系统总线的连接:有可控制的三态输出门时候可以直接和系统总线连接,没有输出门的时候要通过I/O口进行连接。(3)启动信号
发表于 2018-07-16

AVR单片机ATmega8工业总线项目的通信处理以及实现

; 0xff);  ADC6delay_us(10);ADCSRA|=0xE7;     //128分频while ((ADCSRA & 0x10)==0);ADCSRA|=0x10;return ADCW;}不理解的同学可以查询AVR单片机ATmega8的数据手册进行查询。(5)以上就是博主的串口助手接收的数据帧,7台设备接入总线。定时发送,一帧一帧的完整发送成功了。
发表于 2018-07-16

AVR单片机中断的学习探究(外部中断与内部中断)

最开始的一点,所有中断的配置都必须要打开全局中断控制#asm(“sei”) //打开SREG的全局使能I置位首先博主先探究了一下AVR单片机的外部中断。外部中断需要用的必须先看原理图的INT0 INT1的引脚。因为外部中断是通过这两个引脚来触发,只要使能引脚,而且配置引脚为输出方式,电平如果发生合适的变化(具体通过高低电平还是上升沿下降沿控制是通过MCUCR寄存器来控制),中断便会触发。配置外部中断相应的寄存器初始化的步骤--写在init.c中:(1)还是第一点,打开全局中断使能位;(2)配置MCUCR寄存器,通过控制寄存器的位数来控制具体由什么信号来触发中断;(3)配置通用中断控制寄存器 GICR:控制哪一个外部中断使能
发表于 2018-07-16

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved