相位修正PWM 模式(WGM01:0 = 1) 为用户提供了一个获得高精度相位修正PWM 波形的方法。此模式基于双斜坡操作。计时器重复地从BOTTOM 计到MAX,然后又从MAX倒退回到BOTTOM。在一般的比较输出模式下,当计时器往MAX计数时若发生了TCNT0与OCR0的匹配,OC0将清零为低电平;而在计时器往BOTTOM计数时若发生了TCNT0与OCR0 的匹配, OC0 将置位为高电平。工作于反向输出比较时则正好相反。与单斜坡操作相比,双斜坡操作可获得的最大频率要小。但由于其对称的特性,十分适合于电机控制。相位修正PWM 模式的PWM 精度固定为8 比特。计时器不断地累加直到MAX,然后开始减计数。在一个定时器时钟周期里 TCNT0 的值等于MAX。时序图可参见下图。图中 TCNT0 的数值用柱状图表示,以说明双斜坡操作。本图同时说明了普通PWM 的输出和反向PWM 的输出。TCNT0 斜坡上的小横条表示OCR0 与TCNT0 的比较匹配。
PWM产生过程:定时器启动后,从0开始计数到255,加1后由255减1到0,在正向加1过程中当TNCT0与OCR0相等时,OC0清0,在反向减1的过程中,当TNCT0等于OCR0,OC0置位,改变比较寄存器OCR0的数值就改变了输出PWM的占空比。
//在PB3引脚上输出PWM控制发光二极管的渐亮,渐灭(代码来自轻松玩转avr单片机c语言cd)
#include
#define uchar unsigned char
#define uint unsigned int
uint 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=(0<// T/C0工作于相位修正PWM模式,不分频
//在升序计数时,发生比较匹配将置位CR0,降序计数时,发生比较匹配将清零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最亮时,延时一段时间
}
}
关键字:avr 定时器 计数器0 相位修正 PWM模式
引用地址:
3. avr定时器/计数器0 --TC0 --相位修正PWM模式
推荐阅读最新更新时间:2024-03-16 15:47
AVR 32位FlexRay评估环境(Atmel)
Atmel(R) Corporation 宣布推出其 AVR(R) 32 位 FlexRay(R) 评估环境。此外,Atmel 在德国斯图加特召开的 FlexRay 会议上,以线控驾驶、驾驶和刹车功能实现先进车内网络的仿制车来展示其新技术。 该评估环境的核心是一个基于 Atmel AVR32 专有架构的32位微控制器,该架构拥有 Robert Bosch GmbH 授权的 FlexRay IP(FlexRay网络协议)——一种硬件 LIN IP。此外,该环境还包括一个双重 CAN IP、一个 Ethernet MAC 和一套通用外设。该环境也包括了 AVR32 开发工具箱、FlexRay 堆栈、FlexRay 配置工具和一个网
[单片机]
msp430学习笔记之定时器A
1 相关知识 1 定时器a图解 图 1 定时器A图解 2 定时器A的四种计数模式 1. 停止模式。 2. 增计数模式。(产生两个中断标志) 当计数到跟TACCR0一样的时候,就返回0,重新计数。当计数到TACCR0的同时产生一个中断标志CCIFG,而当计数器溢出返回零的同时又同时产生一个中断标志TAIFG。如图: 图 2 增计数模式的时序图 3.连续计数模式(产生一个中断标志) 计数器将直接计数到计数器所能计数的最大值0FFFFH之后重新返回零,再次计数。返回零的同时产生一个TAIFG中断标志。如图 图3 连续技术模式的时序图 如果相应中断位允许,每当一个定时间隔到都会产生中断请
[单片机]
基于tc2的实时时钟设计 AVR
//***************FileName:RTC.C***************// //***************ICCAVR V6.30编译*****************// #include io8535v.h #define uchar unsigned char #define uint unsigned int //数码管字型表,对应0,1,2,3,4,5,6,7,8,9// uchar Table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar Da ta ={0,0,0,0}; //定义初始时间:0
[单片机]
关于AVR单片机I/O口使用注意事项
1. 先正确设置DDRx方向寄存器,再进行I/O口的读写操作。 2. I/O口复位后的初始状态全部为输入工作方式,内部上拉电阻无效,外部引脚呈现三态高阻输入状态。 3. 当I/O口工作在输入方式时,且要读取外部引脚上的电平时,应读取PINxn的值,而不是PORTxn的值。 4. 当I/O工作在输入方式时,要根据实际情况使用或不使用内部的上拉电阻。 5. 一旦将I/O口的工作方式由输出设置成输入方式后,必须等待1个时钟周期后才能正确读到外部引脚PINxn的值。
[单片机]
51单片机-输入捕获
1.捕获高电平时间 我们利用定时器0的计数功能实现捕获外部引脚的高电平时间。定时器在不同用法里有不同称呼,比如我们这次是想得知某段过程持续了多长时间,用定时器的计数方式的话就叫做计数器。 我们这次选用的外部引脚还是P1.6,初始时先让该引脚输出低电平。 我们之前没有说过当TMOD低四位里的第三位GATE为1时是什么作用,这里说明一下,当这个位被置1的话,如果此时有“TR0=1;”,且P3.2必须为高电平的时候,才会触发定时器0的计数(P3.2为低电平时不会触发),也就是TL0每隔(12/11059200)秒就会加1,加到256变为0之后TH0就加1。一直加到65535就会有“TL0=255;”和“TH0=255;”,再加
[单片机]
MSP430-GRACE 实战(三):定时器中断
MSP430-GRACE 实战(三):定时器中断 Grace 是 Graphical Code Engine 的缩写,是 TI 为了方便用户开发 MSP430 提供的图形化代码配置工具,但是目前只有部分 MSP430 的型号支持 Grace,如 G2 系列 本系列文章使用 Grace 配置 MSP430 外设,快速实现功能,帮助大家进一步了解 MSP430 文章侧重点是功能的使用,寄存器原理只有部分的阐述,适合有一定基础同学(不论是 STM32还是MSP430基础),深入的原理需要自行探索 工程中有所有实践 Demo 都有通用步骤,熟悉的同学可以直接跳过 一、开发平台 1.1 硬件平台 MSP430G2553 口袋
[单片机]
T0作定时器汇编程序(查询法)
单片机T0作定时器实现数码管显示的汇编程序(查询法) 电路是:P0口接数码管的字型码笔段,P2口接数码管的数位选择端. SECOND EQU 30H TCOUNT EQU 31H ORG 00H START: MOV SECOND,#00H MOV TCOUNT,#00H MOV TMOD,#01H MOV TH0,#(65536-50000)/256 MOV TL0,#(65536-50000) MOD 256 SETB TR0 DISP: MOV A,SECOND MOV B,#10 DIV A B
[单片机]
基于555定时器的简单音乐电路
基于NE555定时器音调发生器电路(一) 这是基于NE555定时器的音调发生器电路。NE555是一个非常有名的IC,用于许多电路,并执行各种任务。在该电路中,IC用作非稳态振荡器,当通电时,电路将产生音调。1M电位器用于调节电路产生的音调。电容器用于降低噪声。该电路可以用 6 伏直流电运行。 基于NE555定时器的叮咚声音发生器电路图(二) 这是基于两个NE555定时器IC的叮咚声音发生器的电路图,该电路设计用于在两个可调频率之间切换以产生叮咚声音。第一个NE555(IC1)是作为工作频率为1Hz的非稳态多谐振荡器的导线。第二个NE555(IC2)的频率由第一个IC的输出调制。这是通过将第一个IC的输出连接到第二个IC的控制引
[嵌入式]