分享

实例讲解:555定时器和基于51单片机的频率计

 君子书 2017-07-11



生活君先给小伙伴提一个问题,大家认为史上最成功的芯片是什么?或者可以更简单的说,哪个芯片出货量最多?Intel的酷睿?高通的骁龙?还是...?NO!别猜了,而是它,堪称电工的神器——555芯片实例讲解:555定时器和基于51单片机的频率计

555芯片实物图和引脚定义

在我们的日常生活中,很多的电子产品都需要脉冲,比如报警器、电子开关、电子玩具、电子钟表以及电子医疗设备等等。这样就产生了众多的脉冲发生器,其中555定时器就是最常见,使用最广泛的一种。

555定时器,又叫555多谐振荡器、555脉冲发生器、555时基电路,是电子工程领域中广泛使用的中规模集成电路,是将模拟电路和数字电路巧妙结合在一起的电子器件,具有结构简单,定时精度高,驱动能力强等优点,配以外部元器件,可以构成多种应用电路,广泛应用于脉冲振荡器,检测电路,自动控制电路甚至通信领域。可以这样说,555芯片能够驾驭的炉火纯青,那么就可以省下好多芯片的钱了。


555定时器的工作原理:

定时器如果是用双极性工艺制作的成为555,而CMOS工艺制作的成为7555。555芯片的电源电压范围宽,可以在4.5V~16V内正常工作,输出的驱动电流为200mA,它的内部接线图如下图:实例讲解:555定时器和基于51单片机的频率计

555定时器内部接线图

555定时器包括以下部分:三个5K的电阻分压器,两个电压比较器,一个基本的RS触发器,一个缓冲器,一个放电晶闸管等。

555定时器的功能主要由两个比较器决定。两个比较器的输出电压控制RS触发器和放电管的状态,在电源与地之间加上电压,当5脚悬空时,则电压比较器C1 的同相输入端电压为2VCC/3,C2的反相输入端电压为VCC/3,若触发输入端TR的电压小于2VCC/3,则比较器C2输出为0,可使RS触发器置1,则输出端为1。如果阀值输入端TH的电压大于2VCC/3,同时TR端的电压大于VCC/3,则C1的输出为0,可将RS触发器置0,使输出为0.

  • 555引脚功能如下:

    1脚:芯片地脚,一般情况下接地

    2脚:低触发端

    3脚:输出端Vout

    4脚:直接清零端,此脚接地,无论TR和TH处于何电平,电路输出为0,,所以此端应接电源

    5脚:串入一个0.01uF的电容接地

    6脚:TH高触发端

    7脚:放电的引脚,该引脚与放电管的集电极项链,用作电容的放电

    8脚:芯片电源脚,一般用5V

实例讲解:555定时器和基于51单片机的频率计

555可调方波输出电路

调节电位器可以获得不同频率的脉冲,其中输出脉冲的周期F=0.7*(R1+2Pot)*C2。


好了,555芯片原理以及方波产生电路讲解完毕了,接下来生活君用51单片机来测定输出的频率,并显示在1602上。

本例中,使用定时器/计数器0作为定时器产生1秒的标志,定时器1作为计数器,对P3^5输入的555脉冲进行计数,1秒所记的脉冲个数就是频率,并将个数显示在1602上。

根据上述公式:F=0.7/((R1+2Pot)*C2),C2为0.01的电容,当电位器Pot旋转到0Ω时,F=0.7*2000*0.00000001,则频率f=1/F=71428Hz,即1602显示71428左右。

下面附上程序;

#include

#include

#define RS_CLR RS=0

#define RS_SET RS=1

#define RW_CLR RW=0

#define RW_SET RW=1

#define EN_CLR EN=0

#define EN_SET EN=1

sbit RS = P2^5;

sbit RW = P2^6;

sbit EN = P2^7;

unsigned char code LcdLine1[] =

{

'555 Timing Test'

};

unsigned char code LcdLine2[] =

{

'FREQ is: Hz'

};

bit Flag = 0;

unsigned char Counter = 0,Hdata = 0,Ldata = 0,Pulse = 0;

unsigned char data display[] =

{

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

void DelayUs2x(unsigned char t)

{

while(--t);

}

void DelayMs(unsigned char t)

{

while(t--)

{

DelayUs2x(245);

DelayUs2x(245);

}

}

bit LCD_Check_Busy(void)

{

P0 = 0xFF;

RS_CLR;

RW_SET;

EN_CLR;

_nop_();

EN_SET;

return (bit)(P0 & 0x80);

}

void LCD_Write_Com(unsigned char com)

{

while(LCD_Check_Busy());

RS_CLR;

RW_CLR;

EN_SET;

P0 = com;

_nop_();

EN_CLR;

}

void LCD_Write_Data(unsigned char Data)

{

while(LCD_Check_Busy());

RS_SET;

RW_CLR;

EN_SET;

P0 = Data;

_nop_();

EN_CLR;

}

void LCD_Clear(void)

{

LCD_Write_Com(0x01);

DelayMs(5);

}

void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)

{

if (y == 0)

LCD_Write_Com(0x80 + x);

else

LCD_Write_Com(0xC0 + x);

while (*s)

{

LCD_Write_Data( *s);

s ++;

}

}

void LCD_Init(void)

{

LCD_Write_Com(0x38);

DelayMs(5);

LCD_Write_Com(0x38);

DelayMs(5);

LCD_Write_Com(0x38);

DelayMs(5);

LCD_Write_Com(0x38);

LCD_Write_Com(0x08);

LCD_Write_Com(0x01);

LCD_Write_Com(0x06);

DelayMs(5);

LCD_Write_Com(0x0C);

}

void LcdDisplay(unsigned long num)

{

char i;

for (i = 5; i >= 0; i--)

{

display[i] = (num % 10) + 0x30;

num = num / 10;

}

for (i = 0; i < 5;="">

{

if (display[i] == 0x30)

display[i] = ' ';

else

break;

}

LCD_Write_String(7,1, display);

}

void init()

{

TMOD = 0x51;

TH0 = 0x4c;

TL0 = 0x00;

TH1 = 0x00;

TL1 = 0x00;

ET0 = 1;

ET1 = 1;

EA = 1;

PT1 = 1;

TR0 = 1;

TR1 = 1;

}

void main()

{

unsigned long frequency;

P3 = 0xFF;

init();

LCD_Init();

LCD_Clear();

LCD_Write_String(0,0, LcdLine1);

LCD_Write_String(0,1, LcdLine2);

while (1)

{

if (Flag)

{

Hdata = TH1;

Ldata = TL1;

frequency = ((Pulse*65535)+(Hdata*256)+Ldata);

Flag = 0;

Pulse = 0;

TH1 = 0x00;

TL1 = 0x00;

TH0 = 0x4c;

TL0 = 0x00;

TR1 = 1;

TR0 = 1;

}

LcdDisplay(frequency);

}

}

void Time0() interrupt 1

{

TL0 = 0x00;

TH0 = 0x4c;

Counter++;

if (Counter == 20)

{

TR0 = 0;

TR1 = 0;

Counter = 0;

Flag = 1;

}

}

void Time1() interrupt 3

{

Pulse++;

}

这是生活君自己所写的程序,然后烧录在自己的开发板上,得到了下面的结果:

实例讲解:555定时器和基于51单片机的频率计

频率计结果

使用12Mhz的晶振,51单片机外部技术最大速率为500Khz,如果想要更大量程的频率计,小伙伴们可以采用分频模块扩大量程,另外还可以在信号输入端接入放大整形模块,便于测量,结果更准确,显示方式可以改成数码管显示,小伙伴们可以自行添加功能。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多