使用AVR定时/计数器的PWM功能设计要点

发布者:古通闲人最新更新时间:2017-12-20 来源: eefocus关键字:AVR定时  计数器  PWM功能 手机看文章 扫描二维码
随时随地手机看文章

一、定时/计数器PWM设计要点

根据PWM的特点,在使用ATmega128的定时/计数器设计输出PWM时应注意以下几点:

1.首先应根据实际的情况,确定需要输出的PWM频率范围,这个频率与控制的对象有关。如输出PWM波用于控制灯的亮度,由于人眼不能分辨42Hz以上的频率,所以PWM的频率应高于42Hz,否则人眼会察觉到灯的闪烁。


2.然后根据需要PWM的频率范围确定ATmega128定时/计数器的PWM工作方式。AVR定时/计数器的PWM模式可以分成快速PWM和频率(相位)调整PWM两大类。 

3.快速PWM可以的到比较高频率的PWM输出,但占空比的调节精度稍微差一些。此时计数器仅工作在单程正向计数方式,计数器的上限值决定PWM的频率,而比较匹配寄存器的值决定了占空比的大小。PWM频率的计算公式为: 

PWM频率 = 系统时钟频率/(分频系数*(1+计数器上限值)) 

4.快速PWM模式适合要求输出PWM频率较高,但频率固定,占空比调节精度要求不高的应用。 

5.频率(相位)调整PWM模式的占空比调节精度高,但输出频率比较低,因为此时计数器仅工作在双向计数方式。同样计数器的上限值决定了PWM的频率,比较匹配寄存器的值决定了占空比的大小。PWM频率的计算公式为: 

PWM频率 = 系统时钟频率/(分频系数*2*计数器上限值)) 

6.相位调整PWM模式适合要求输出PWM频率较低,但频率固定,占空比调节精度要求高的应用。当调整占空比时,PWM的相位也相应的跟着变化(Phase Correct)。 

7.频率和相位调整PWM模式适合要求输出PWM频率较低,输出频率需要变化,占空比调节精度要求高的应用。此时应注意:不仅调整占空比时,PWM的相位会相应的跟着变化;而一但改变计数器上限值,即改变PWM的输出频率时,会使PWM的占空比和相位都相应的跟着变化(Phase and Frequency Correct)。 

8.在PWM方式中,计数器的上限值有固定的0xFF(8位T/C);0xFF、0x1FF、0x3FF(16位T/C)。或由用户设定的0x0000-0xFFFF,设定值在16位T/C的ICP或OCRA寄存器中。而比较匹配寄存器的值与计数器上限值之比即为占空比。


二、 PWM应用设计参考 

  下面给出一个设计示例,在示例中使用PWM方式来产生一个1KHz左右的正弦波,幅度为0-VCC/2。 

  首先按照下面的公式建立一个正弦波样本表,样本表将一个正弦波周期分为128个点,每点按7位量化(127对应最高幅值Vcc/2):

f(x) = 64 + 63 * sin(2πx/180) x∈[0…127]

   如果在一个正弦波周期中采用128个样点,那么对应1KHz的正弦波PWM的频率为128KHz。实际上,按照采样频率至少为信号频率的2倍的取样定理来计算,PWM的频率的理论值为2KHz即可。考虑尽量提高PWM的输出精度,实际设计使用PWM的频率为16KHz,即一个正弦波周期(1KHz)中输出16个正弦波样本值。这意味着在128点的正弦波样本表中,每隔8点取出一点作为PWM的输出。 

  程序中使用ATmega128的8位T/C0,工作模式为相位调整PWM模式输出,系统时钟为8MHz,分频系数为1,其可以产生最高PWM频率为: 8000000Hz / 510 = 15686Hz。每16次输出构成一个周期正弦波,正弦波的频率为980.4Hz。PWM由OC0(PB4)引脚输出。参考程序如下(ICCAVR)。

//ICC-AVR application builder : 2004-08 
// Target : M128 
// Crystal: 8.0000Mhz

#include  
#include

#pragma data:code 
// 128点正弦波样本表 
const unsigned char auc_SinParam[128] = { 
64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106,109,111,113,115,117,118,120,121, 
123,124,125,126,126,127,127,127,127,127,127,127,126,126,125,124,123,121,120,118, 
117,115,113,111,109,106,104,102,99,96,94,91,88,85,82,79,76,73,70,67,64,60,57,54,51,48, 
45,42,39,36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,1,0,0,0,0,0,0,0,1,1,2,3,4,6, 
7,9,10,12,14,16,18,21,23,25,28,31,33,36,39,42,45,48,51,54,57,60}; 
#pragma data:data 

unsigned char x_SW = 8,X_LUT = 0;

#pragma interrupt_handler timer0_ovf_isr:17 
void timer0_ovf_isr(void) 

   X_LUT += x_SW; // 新样点指针 
   if (X_LUT > 127) X_LUT -= 128; // 样点指针调整 
   OCR0 = auc_SinParam[X_LUT]; // 取样点指针到比较匹配寄存器 
}

void main(void) 

   DDRB |= 0x10; // PB4(OC0)输出 
   TCCR0 = 0x71; // 相位调整PWM模式,分频系数=1,正向控制OC0 
   TIMSK = 0x01; // T/C0溢出中断允许 
   SEI(); // 使能全局中断 
   while(1) 
      {……}; 
}

 

  每次计数器溢出中断的服务中取出一个正弦波的样点值到比较匹配寄存器中,用于调整下一个PWM的脉冲宽度,这样在PB4引脚上输出了按正弦波调制的PWM方波。当PB4的输出通过一个低通滤波器后,便得到一个980.4Hz的正弦波了。如要得到更精确的1KHz的正弦波,可使用定时/计数器T/C1,选择工作模式10,设置ICR1=250为计数器的上限值。 

  在ATMEL公司网站上,给出了使用一个定时/计数器实现双音频拨号的应用设计参考(AVR314.pdf),读者可以从中学习到如何更好设计和使用PWM的功能。


关键字:AVR定时  计数器  PWM功能 引用地址:使用AVR定时/计数器的PWM功能设计要点

上一篇:AVR单片机的DS1302操作程序
下一篇:没有仿真器的情况下如何开发AVR

推荐阅读最新更新时间:2024-05-03 02:10

采用PIC16C54的计数器
  计数器在工业控制中有着广泛的应用。传统的数字计数器都是用中小规模数字集成电路构成的,不但电路复杂,成本高,功能修改也不易。用单片机制作的计数器可以克服传统数字电路计数器的局限,有着广阔的应用前景。   本文介绍的计数器采用Microchip公司的PIC16C54单片机。该型单片机为RISC结构,在4MHz的工作频率下,每一个指令周期为1μs,运行速度大大超过MCS-51系列,适用于对实时性要求较高的工业控制领域。   电路原理   附图为计数器的原理图。PIC16C54具有两个I/O口,RA口有4条I/O线,RB口有8条I/O线。本计数器中RA口设置为输入口,用于读取BCD拨盘开关(BCD1~BCD5)设定的计数值;RB口
[电源管理]
为MAX6948 WLED (白光LED)驱动器增加外部PWM控制功能
MAX6948 WLED (白光LED)驱动器的输入电压范围为+2.7V至+5.5V,可以将输出电压提升到+28V,用于驱动手机背光。如果WLED的标称正向导通电压为3V,MAX6948的额定28V高压端口可以驱动9只串联的WLED,用于手机LCD屏的背光。该高压端口能够保持稳定的30mA电流,这些串联背光LED的亮度通过一个10位、1024级的PWM电路进行控制。 另外,MAX6948有五个GPIO,可直接驱动由电池供电的LED或作为漏极开路 I/O使用。作为LED驱动器使用时,额定电压为8V的输出端口能够提供10mA或30mA (最大值)的恒定电流,并带有8位、256级PWM亮度控制。 MAX6948 集成器件产生驱动不
[模拟电子]
基于AT89S51的6位数显频率计数器
简介:利用AT89S51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。要求能够对0-250KHZ的信号频率进行准确计数,计数误差不超过±1HZ。 1.电路原理图 2.系统板上硬件连线 (1).把“单片机系统”区域中的P0.0-P0.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。 (2).把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。 (3).把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的WAVE端子上。 3.程序设计内容
[单片机]
基于AT89S51的6位数显频率<font color='red'>计数器</font>
C51单片机0~60计数器
源码 #includeunsigned char code table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char second=0; bit a=0; char t=0; int0_srv() interrupt 1{ t++; if(t==20){t=0;a=1;} TH0=0x3c; TL0=0xb0; } main(){ P0=P2=table ; TMOD=0x01; TH0=0x3c; TL0=0xb0; ET0=1; EA=1; TR0=1; while(1){ if(a){
[单片机]
C51单片机0~60<font color='red'>计数器</font>
基于ATMEGA16L单片机PWM功能的数控恒流源研制
随着电子技术的深入发展,各种智能仪器越来越多,涉及领域越来越广,而仪器对电源的要求也越来越高。现今,电源设备有朝着数字化方向发展的趋势。然而绝大多数数控电源设计是通过高位数的A/D和D/A芯片来实现的,这虽然能获得较高的精度,但也使得成本大为增加。本文介绍一种基于AVR单片机PWM功能的低成本高精度数控恒流源,能够精确实现0~2A恒流。 系统框图 图1为系统的总体框图。本系统通过小键盘和LCD实现人机交流,小键盘负责接收要实现的电流值,LCD 12864负责显示。AVR单片机根据输入的电流值产生对应的PWM波,经过滤波和功放电路后对压控恒流元件进行控制,产生电流,电流再经过采样电阻到达负载。同时,对采样电阻两端信号进行差分
[单片机]
基于ATMEGA16L单片机<font color='red'>PWM</font><font color='red'>功能</font>的数控恒流源研制
单片机定时/计数器的四种工作方式
1 工作方式0 定时器/ 计数器 的工作方式0称之为13位定时/计数方式。它由TL(1/0)的低5位和TH(0/1)的8位组成13位的 计数器 ,此时TL(1/0)的高3位未用。 我们用这个图来讨论几个问题: M1M0:定时/计数器一共有四种工作方式,就是用M1M0来控制的,2位正好是四种组合。 C/T:前面我们说过,定时/计数器即可作定时用也可用计数用,到底作什么用,由我们根据需要自行决定,也说是决定权在我们��编程者。如果C/T为0就是用作定时器(开关往上打),如果C/T为1就是用作计数器(开关往下打)。顺便提一下:一个定时/计数器同一时刻要么作定时用,要么作计数用,不能同时用的,这是个极普通的常识,几乎没有教材会
[单片机]
单片机<font color='red'>定时</font>/<font color='red'>计数器</font>的四种工作方式
C51单片机定时器/计数器中断功能详细分析(二)
一.外部中断相关寄存器 1.定时器/计数器控制寄存器控制寄存器(TCON) IT0:外部中断0触发方式控制位 当IT0=0时,为电平触发方式(低电平有效) 当IT0=1时,为边沿触发方式(下降沿有效) IT1:外部中断1触发方式控制位 当IT1=0时,为电平触发方式(低电平有效) 当IT1=1时,为边沿触发方式(下降沿有效) 2.中断允许控制寄存器(IE) EX0:外部中断0允许位; EX1:外部中断1允许位; EA :CPU中断允许(总允许)位。 二.外部中断的处理过程 1、设置中断触发方式,即IT0=1或0,IT1=1或0 2、开对应的外部中断,即EX0=1或EX1=1; 3、开总中断,即EA=1; 4、等待外部设
[单片机]
C51单片机<font color='red'>定时</font>器/<font color='red'>计数器</font>中断<font color='red'>功能</font>详细分析(二)
学习笔记之-51单片机定时计数器
一、单片机的时序 单片机工作时,是在统一的时钟脉冲控制下一拍一拍地进行的。由于指令的字节数不同,取这些指令所需要的时间也就不同,即使是字节数相同的指令,由于执行操作有较大的差别,不同的指令执行时间也不一定相同,即所需的拍节数不同。 时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。 在一个时钟周期内,CPU仅完成一个最基本的动作。 在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。 机器周期:在计算机中,为了便于管理,常把一条指令的
[单片机]
学习笔记之-51单片机<font color='red'>定时</font><font color='red'>计数器</font>
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved