找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8423|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

案例講解:555定時(shí)器和基于51單片機(jī)的頻率計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
今天,生活君給大家?guī)?lái)555芯片的講解,并制作一個(gè)基于51單片機(jī)的頻率計(jì)設(shè)計(jì)。希望大家有所收獲!
生活君先給小伙伴提一個(gè)問(wèn)題,大家認(rèn)為史上最成功的芯片是什么?或者可以更簡(jiǎn)單的說(shuō),哪個(gè)芯片出貨量最多?Intel的酷睿?高通的驍龍?還是...?NO!別猜了,而是它,堪稱(chēng)電工的神器——555芯片



在我們的日常生活中,很多的電子產(chǎn)品都需要脈沖,比如報(bào)警器、電子開(kāi)關(guān)、電子玩具、電子鐘表以及電子醫(yī)療設(shè)備等等。這樣就產(chǎn)生了眾多的脈沖發(fā)生器,其中555定時(shí)器就是最常見(jiàn),使用最廣泛的一種。

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)域�?梢赃@樣說(shuō),555芯片能夠駕馭的爐火純青,那么就可以省下好多芯片的錢(qián)了。

555定時(shí)器的工作原理:

定時(shí)器如果是用雙極性工藝制作的成為555,而CMOS工藝制作的成為7555。555芯片的電源電壓范圍寬,可以在4.5V~16V內(nèi)正常工作,輸出的驅(qū)動(dòng)電流為200mA,它的內(nèi)部接線(xiàn)圖如下圖:


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腳:直接清零端,此腳接地,無(wú)論TR和TH處于何電平,電路輸出為0,,所以此端應(yīng)接電源
    5腳:串入一個(gè)0.01uF的電容接地
    6腳:TH高觸發(fā)端
    7腳:放電的引腳,該引腳與放電管的集電極項(xiàng)鏈,用作電容的放電
    8腳:芯片電源腳,一般用5V
  • 調(diào)節(jié)電位器可以獲得不同頻率的脈沖,其中輸出脈沖的周期F=0.7*(R1+2Pot)*C2。
  • 好了,555芯片原理以及方波產(chǎn)生電路講解完畢了,接下來(lái)生活君用51單片機(jī)來(lái)測(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左右。
    下面附上程序;
    1. #include<reg52.h>
    2. #include<intrins.h>
    3. #define RS_CLR RS=0
    4. #define RS_SET RS=1
    5. #define RW_CLR RW=0
    6. #define RW_SET RW=1
    7. #define EN_CLR EN=0
    8. #define EN_SET EN=1
    9. sbit RS = P2^5;
    10. sbit RW = P2^6;
    11. sbit EN = P2^7;
    12. unsigned char code LcdLine1[] =
    13. {
    14. "555 Timing Test"
    15. };
    16. unsigned char code LcdLine2[] =
    17. {
    18. "FREQ is: Hz"
    19. };
    20. bit Flag = 0;
    21. unsigned char Counter = 0,Hdata = 0,Ldata = 0,Pulse = 0;
    22. unsigned char data display[] =
    23. {
    24. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    25. };
    26. void DelayUs2x(unsigned char t)
    27. {
    28. while(--t);
    29. }
    30. void DelayMs(unsigned char t)
    31. {
    32. while(t--)
    33. {
    34. DelayUs2x(245);
    35. DelayUs2x(245);
    36. }
    37. }
    38. bit LCD_Check_Busy(void)
    39. {
    40. P0 = 0xFF;
    41. RS_CLR;
    42. RW_SET;
    43. EN_CLR;
    44. _nop_();
    45. EN_SET;
    46. return (bit)(P0 & 0x80);
    47. }
    48. void LCD_Write_Com(unsigned char com)
    49. {
    50. while(LCD_Check_Busy());
    51. RS_CLR;
    52. RW_CLR;
    53. EN_SET;
    54. P0 = com;
    55. _nop_();
    56. EN_CLR;
    57. }
    58. void LCD_Write_Data(unsigned char Data)
    59. {
    60. while(LCD_Check_Busy());
    61. RS_SET;
    62. RW_CLR;
    63. EN_SET;
    64. P0 = Data;
    65. _nop_();
    66. EN_CLR;
    67. }
    68. void LCD_Clear(void)
    69. {
    70. LCD_Write_Com(0x01);
    71. DelayMs(5);
    72. }
    73. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
    74. {
    75. if (y == 0)
    76. LCD_Write_Com(0x80 + x);
    77. else
    78. LCD_Write_Com(0xC0 + x);
    79. while (*s)
    80. {
    81. LCD_Write_Data( *s);
    82. s ++;
    83. }
    84. }
    85. void LCD_Init(void)
    86. {
    87. LCD_Write_Com(0x38);
    88. DelayMs(5);
    89. LCD_Write_Com(0x38);
    90. DelayMs(5);
    91. LCD_Write_Com(0x38);
    92. DelayMs(5);
    93. LCD_Write_Com(0x38);
    94. LCD_Write_Com(0x08);
    95. LCD_Write_Com(0x01);
    96. LCD_Write_Com(0x06);
    97. DelayMs(5);
    98. LCD_Write_Com(0x0C);
    99. }
    100. void LcdDisplay(unsigned long num)
    101. {
    102. char i;
    103. for (i = 5; i >= 0; i--)
    104. {
    105. display[i] = (num % 10) + 0x30;
    106. num = num / 10;
    107. }
    108. for (i = 0; i < 5; i++)
    109. {
    110. if (display[i] == 0x30)
    111. display[i] = ' ';
    112. else
    113. break;
    114. }
    115. LCD_Write_String(7,1, display);
    116. }
    117. void init()
    118. {
    119. TMOD = 0x51;
    120. TH0 = 0x4c;
    121. TL0 = 0x00;
    122. TH1 = 0x00;
    123. TL1 = 0x00;
    124. ET0 = 1;
    125. ET1 = 1;
    126. EA = 1;
    127. PT1 = 1;
    128. TR0 = 1;
    129. TR1 = 1;
    130. }
    131. void main()
    132. {
    133. unsigned long frequency;
    134. P3 = 0xFF;
    135. init();
    136. LCD_Init();
    137. LCD_Clear();
    138. LCD_Write_String(0,0, LcdLine1);
    139. LCD_Write_String(0,1, LcdLine2);
    140. while (1)
    141. {
    142. if (Flag)
    143. {
    144. Hdata = TH1;
    145. Ldata = TL1;
    146. frequency = ((Pulse*65535)+(Hdata*256)+Ldata);
    147. Flag = 0;
    148. Pulse = 0;
    149. TH1 = 0x00;
    150. TL1 = 0x00;
    151. TH0 = 0x4c;
    152. TL0 = 0x00;
    153. TR1 = 1;
    154. TR0 = 1;
    155. }
    156. LcdDisplay(frequency);
    157. }
    158. }
    159. void Time0() interrupt 1
    160. {
    161. TL0 = 0x00;
    162. TH0 = 0x4c;
    163. Counter++;
    164. if (Counter == 20)
    165. {
    166. TR0 = 0;
    167. TR1 = 0;
    168. Counter = 0;
    169. Flag = 1;
    170. }
    171. }
    172. void Time1() interrupt 3
    173. {
    174. Pulse++;
    175. }
    復(fù)制代碼


    這是生活君自己所寫(xiě)的程序,然后燒錄在自己的開(kāi)發(fā)板上,得到了下面的結(jié)果:

  • 使用12Mhz的晶振,51單片機(jī)外部技術(shù)最大速率為500Khz,如果想要更大量程的頻率計(jì),小伙伴們可以采用分頻模塊擴(kuò)大量程,另外還可以在信號(hào)輸入端接入放大整形模塊,便于測(cè)量,結(jié)果更準(zhǔn)確,顯示方式可以改成數(shù)碼管顯示,小伙伴們可以自行添加功能。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:98792 發(fā)表于 2017-7-27 14:44 | 只看該作者
這是我在頭條上面發(fā)表的文章
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表