NE555作振荡器电路测定脉冲频率原理

555 芯片引脚图及引脚描述

NE555 管脚功能介绍:

1 脚为地。2 脚为触发输入端;3 脚为输出端,输出的电平状态受触发器控制,而触发器受上比较器 6 脚和下比较器 2 脚的控制。当触发器接受上比较器 A1 从 R 脚输入的高电平时,触发器被置于复位状态,3 脚输出低电平;2 脚和 6 脚是互补的,2 脚只对低电平起作用,高电平对它不起作用,即电压小于 1Ucc/3,此时 3 脚输出高电平。6 脚为阈值端,只对高电平起作用,低电平对它不起作用,即输入 电压大于 2 Ucc/3,称高触发端,3 脚输出低电平,但有一个先决条件,即 2 脚电位必须大于1Ucc/3 时才有效。3 脚在高电位接近电源电压 Ucc,输出电流最大可打 200mA。4 脚是复位端,当 4 脚电位小于 0.4V 时,不管 2、6 脚状态如何,输出端 3 脚都输出低电平。5 脚是控制端。7 脚称放电端,与 3 脚输出同步,输出电平一致,但 7 脚并不输出电流,所以 3 脚称为实高(或低)、7 脚称为虚高。

555 集成电路的框图及工作原理

555 集成电路开始是作定时器应用的,所以叫做 555 定时器或 555 时基电路。但后来经过开发,它除了作定时延时控制外,还可用于调光、调温、调压、调速等多种控制及计量检测。此外,还可以组成脉冲振荡、单稳、双稳和脉冲调制电路,用于交流信号源、电源变换、频率变换、脉冲调制等。由于它工作可靠、使用方便、价格低廉,目前被广泛用于各种电子产品中555 集成电路内部有几十个元器件,有分压器、比较器、基本 R-S 触发器、放电管以及缓冲器等,电路比较复杂,是模拟电路和数字电路的混合体,如图 1 所示。

典型应用电路

单稳态模式:

在单稳态工作模式下,555定时器作为单次触发脉冲发生器工作。当触发输入电压降至VCC的1/3时开始输出脉冲。输出的脉宽取决于由定时电阻与电容组成的RC网络的时间常数。当电容电压升至VCC的2/3时输出脉冲停止。根据实际需要可通过改变RC网络的时间常数来调节脉宽。

输出脉宽t,即电容电压充至VCC的2/3所需要的时间由下式给出:

虽然一般认为当电容电压充至VCC的2/3时电容通过OC门瞬间放电,但是实际上放电完毕仍需要一段时间,这一段时间被称为“弛豫时间”。在实际应用中,触发源的周期必须要大于弛豫时间与脉宽之和(实际上在工程应用中是远大于)。

双稳态模式:

双稳态工作模式下的555芯片类似基本RS触发器。在这一模式下,触发引脚(引脚2)和复位引脚(引脚4)通过上拉电阻接至高电平,阈值引脚(引脚6)被直接接地,控制引脚(引脚5)通过小电容(0.01到0.1μF)接地,放电引脚(引脚7)浮空。所以当引脚2输入高电压时输出置位,当引脚4接地时输出复位。

无稳态模式(振荡器电路):

无稳态工作模式下555定时器可输出连续的特定频率的方波。电阻R1接在VCC与放电引脚(引脚7)之间,另一个电阻(R2)接在引脚7与触发引脚(引脚2)之间,引脚2与阈值引脚(引脚6)短接。工作时电容通过R1与R2充电至2/3VCC,然后输出电压翻转,电容通过R2放电至1/3VCC,之后电容重新充电,输出电压再次翻转。

无稳态模式下555定时器输出波形的频率由R1、R2与C决定:

脉冲宽度 TL≈0.7R2C,由电容 C放电时间决定;TH=0.7(R1+R2)C,由电容 C 充电时间决定,脉冲周期 T≈TH+TL。

NE555脉冲发生器原理程序

#include 'reg52.h' //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16; //对数据类型进行声明定义

typedef unsigned char u8;

//--定义使用的IO--//

#define GPIO_DIG P0

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

u8 DisplayData[8];

//--定义全局变量--//

unsigned long Freq; //用来存放要显示的频率值

unsigned long TimeCount; //用于计算1S钟的

void delay(u16 i)

{

while(i--);

}

void DigDisplay()

{

u8 i;

for(i=0;i<8;i++)

{

switch(i) //位选,选择点亮的数码管,

{

case(0):

LSA=0;LSB=0;LSC=0; break;//显示第0位

case(1):

LSA=1;LSB=0;LSC=0; break;//显示第1位

case(2):

LSA=0;LSB=1;LSC=0; break;//显示第2位

case(3):

LSA=1;LSB=1;LSC=0; break;//显示第3位

case(4):

LSA=0;LSB=0;LSC=1; break;//显示第4位

case(5):

LSA=1;LSB=0;LSC=1; break;//显示第5位

case(6):

LSA=0;LSB=1;LSC=1; break;//显示第6位

case(7):

LSA=1;LSB=1;LSC=1; break;//显示第7位

}

GPIO_DIG=DisplayData[i];//发送段码

delay(10); //间隔一段时间扫描

GPIO_DIG=0x00;//消隐

}

}

void Timer_Config() //配置定时/计数器T0和T1

{

//--定时器T1做计数器,工作方式1(16位定时器),只由TRx打开计数器--//

//--定时器T0做定时器,工作方式1(16位定时器),只由TRx打开定时器--//

TMOD=0x51; //01010001

//--设置定时器晶振为12MHZ时定时50ms--//

TH0=0x3C;

TL0=0xB0;

//--打开中断-//

ET0=1;

ET1=1;

EA=1;

//--打开定时器*/

TR0=1;

TR1=1;

}

void main()

{

Timer_Config();

while(1)

{

if(TR1 == 0) //当计数器停下的时候,表明计数完毕

{

Freq = Freq + TL1; //读取TL的值

Freq = Freq + (TH1 * 256); //读取TH的值

//--求频率的个十百千万十万位--//

DisplayData[0] = smgduan[Freq%1000000/100000];

DisplayData[1] = smgduan[Freq%100000/10000];

DisplayData[2] = smgduan[Freq%10000/1000];

DisplayData[3] = smgduan[Freq%1000/100];

DisplayData[4] = smgduan[Freq%100/10];

DisplayData[5] = smgduan[Freq%10];

//--显示完,重新计算下一次频率。--//

Freq = 0;//将计算的频率清零

TH1 = 0; //将计数器的值清零

TL1 = 0;

TR0 = 1; //开启定时器

TR1 = 1; //开启计数器

}

//--显示求得的数值--//

DigDisplay();

}

}

void Timer0() interrupt 1

{

//--12MHZ设置定时50ms的初值--//

TH0=0x3C;

TL0=0xB0;

TimeCount++;

if(TimeCount==20)//计时到1S

{

TR0=0;

TR1=0;

TimeCount=0;

}

}

void Timer1() interrupt 3

{

//--进入一次中断,表明计数到了65536--//

Freq=Freq+65536;

}

通过调节VR1的电阻值可以改变脉冲宽度 TL≈0.7R2C,由电容 C放电时间决定;TH=0.7(R1+R2)C,由电容 C 充电时间决定,脉冲周期 T≈TH+TL值,从而改变频率的输出。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

(0)

相关推荐