在我們的日常生活中,很多的電子產(chǎn)品都需要脈沖,比如報(bào)警器、電子開關(guān)、電子玩具、電子鐘表以及電子醫(yī)療設(shè)備等等。這樣就產(chǎn)生了眾多的脈沖發(fā)生器,其中555定時(shí)器就是最常見,使用最廣泛的一種。
555定時(shí)器,又叫555多諧振蕩器、555脈沖發(fā)生器、555時(shí)基電路,是電子工程領(lǐng)域中廣泛使用的中規(guī)模集成電路,是將模擬電路和數(shù)字電路巧妙結(jié)合在一起的電子器件,具有結(jié)構(gòu)簡(jiǎn)單,定時(shí)精度高,驅(qū)動(dòng)能力強(qiáng)等優(yōu)點(diǎn),配以外部元器件,可以構(gòu)成多種應(yīng)用電路,廣泛應(yīng)用于脈沖振蕩器,檢測(cè)電路,自動(dòng)控制電路甚至通信領(lǐng)域?梢赃@樣說,555芯片能夠駕馭的爐火純青,那么就可以省下好多芯片的錢了。
555定時(shí)器的工作原理:
定時(shí)器如果是用雙極性工藝制作的成為555,而CMOS工藝制作的成為7555。555芯片的電源電壓范圍寬,可以在4.5V~16V內(nèi)正常工作,輸出的驅(qū)動(dòng)電流為200mA,它的內(nèi)部接線圖如下圖:
2eb9000381d6bbe9a315.jpg (29.12 KB, 下載次數(shù): 134)
下載附件
2017-7-11 13:55 上傳
555定時(shí)器包括以下部分:三個(gè)5K的電阻分壓器,兩個(gè)電壓比較器,一個(gè)基本的RS觸發(fā)器,一個(gè)緩沖器,一個(gè)放電晶閘管等。
555定時(shí)器的功能主要由兩個(gè)比較器決定。兩個(gè)比較器的輸出電壓控制RS觸發(fā)器和放電管的狀態(tài),在電源與地之間加上電壓,當(dāng)5腳懸空時(shí),則電壓比較器C1 的同相輸入端電壓為2VCC/3,C2的反相輸入端電壓為VCC/3,若觸發(fā)輸入端TR的電壓小于2VCC/3,則比較器C2輸出為0,可使RS觸發(fā)器置1,則輸出端為1。如果閥值輸入端TH的電壓大于2VCC/3,同時(shí)TR端的電壓大于VCC/3,則C1的輸出為0,可將RS觸發(fā)器置0,使輸出為0.
- 555引腳功能如下:
1腳:芯片地腳,一般情況下接地
2腳:低觸發(fā)端
3腳:輸出端Vout
4腳:直接清零端,此腳接地,無論TR和TH處于何電平,電路輸出為0,,所以此端應(yīng)接電源
5腳:串入一個(gè)0.01uF的電容接地
6腳:TH高觸發(fā)端
7腳:放電的引腳,該引腳與放電管的集電極項(xiàng)鏈,用作電容的放電
8腳:芯片電源腳,一般用5V
2c3e00036c2c43d15274.jpg (17.22 KB, 下載次數(shù): 158)
下載附件
2017-7-11 13:57 上傳
調(diào)節(jié)電位器可以獲得不同頻率的脈沖,其中輸出脈沖的周期F=0.7*(R1+2Pot)*C2。
好了,555芯片原理以及方波產(chǎn)生電路講解完畢了,接下來生活君用51單片機(jī)來測(cè)定輸出的頻率,并顯示在1602上。
本例中,使用定時(shí)器/計(jì)數(shù)器0作為定時(shí)器產(chǎn)生1秒的標(biāo)志,定時(shí)器1作為計(jì)數(shù)器,對(duì)P3^5輸入的555脈沖進(jìn)行計(jì)數(shù),1秒所記的脈沖個(gè)數(shù)就是頻率,并將個(gè)數(shù)顯示在1602上。
根據(jù)上述公式:F=0.7/((R1+2Pot)*C2),C2為0.01的電容,當(dāng)電位器Pot旋轉(zhuǎn)到0Ω時(shí),F(xiàn)=0.7*2000*0.00000001,則頻率f=1/F=71428Hz,即1602顯示71428左右。
下面附上程序;
- #include<reg52.h>
- #include<intrins.h>
- #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; i++)
- {
- 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++;
- }
復(fù)制代碼
這是生活君自己所寫的程序,然后燒錄在自己的開發(fā)板上,得到了下面的結(jié)果:
2c44000408342625e7b8.jpg (50.67 KB, 下載次數(shù): 125)
下載附件
2017-7-11 13:58 上傳
使用12Mhz的晶振,51單片機(jī)外部技術(shù)最大速率為500Khz,如果想要更大量程的頻率計(jì),小伙伴們可以采用分頻模塊擴(kuò)大量程,另外還可以在信號(hào)輸入端接入放大整形模塊,便于測(cè)量,結(jié)果更準(zhǔn)確,顯示方式可以改成數(shù)碼管顯示,小伙伴們可以自行添加功能。