硬件基礎

通過上一課的學習,我們貌似成功的點亮了一個LED小燈,但是還有一些知識大家還沒有徹底明白。單片機是根據硬件電路圖的設計來寫代碼的,所以我們不僅僅要學習編程知識,還有硬件知識,也要進一步的學習,這節課我們就要來穿插介紹電路硬件知識。

3.1 電磁干擾EMI

第一個知識點,去耦電容的應用,那首先要介紹一下去耦電容的應用背景,這個背景就是電磁干擾,也就是傳說中的EMI

1、冬天的時候,尤其是空氣比較乾燥的內陸城市,很多朋友都有這樣的經歷,手觸碰到電腦外殼、鐵櫃子等物品的時候會被電擊,實際上這就是“靜電放電”現象,也稱之爲ESD

2、不知道有沒有同學有這樣的經歷,早期我們使用電鑽這種電機設備,並且同時在聽收音機或者看電視的時候,收音機或者電視會出現雜音,這就是“快速瞬間羣脈衝”的效果,也稱之爲EFT

3、以前的老電腦,有的性能不是很好,帶電熱插拔優盤、移動硬盤等外圍設備的時候,內部會產生一個百萬分之一秒的電源切換,直接導致電腦出現藍屏或者重啓現象,就是熱插拔的“浪涌”效果,稱之爲Surge

... ...

電磁干擾的內容有很多,我們這裏不能一一列舉,但是有些內容非常重要,後邊我們要一點點的瞭解。這些問題大家不要認爲是小問題比如一個簡單的靜電放電,我們用手能感覺到的靜電,可能已經達到3KV以上,如果用眼睛能看得到的,至少是5KV了,只是因爲這個電壓雖然很高,電量卻很小,因此不會對人體造成傷害。但是我們應用的這些半導體元器件就不一樣了,一旦瞬間電壓過高,就有可能造成器件的損壞。而且,即使不損壞,在23裏邊介紹的兩種現象,也嚴重干擾到我們正常使用電子設備了。

基於以上的這些問題,就誕生了電磁兼容(EMC)這個名詞。這節課我們僅僅講一下去耦電容的應用,電磁兼容的處理在我們今後設計電路,對PCB畫板佈局中應用尤爲重要,那是後話,暫且不說。

3.2 去耦電容的應用

首先我們來看圖3-1

圖片圖片

 

 

3-1 去耦電容應用

左邊這張圖,過了保險絲以後,接了一個470uF的電容C16,右邊這種圖,經過開關後,接了一個100uF的電容C19,並且並聯了一個0.1uF的電容C10。其中C16C19起到的作用是一樣的,C10的作用和他們兩個不一樣,我們先來介紹這2個大一點的電容。

容值比較大的電容,理論上可以理解成水缸或者水池子,同時,大家可以直接把電流理解成水流,其實大自然萬物的原理都是類似的。

作用一,緩衝作用。當上電的瞬間,電流從電源處流下來的時候,不穩定,容易衝擊電子器件,加個電容可以起到緩衝作用。就如同我們直接用水龍頭的水澆地,容易沖壞花花草草的。我們只需要在水龍頭處加個水池,讓水經過水池後再緩慢流進草地,就不會沖壞花草,起到有效的保護作用。

作用二,穩定作用。我們一整套電路,後級的電子器件功率大小電流大小也不一樣,器件工作的時候,電流大小不是一直持續不變的。比如後級有個器件還沒有工作的時候,電流消耗是100mA,突然它參與工作了,電流猛的增大到150mA了,這個時候如果沒有一個水缸的話,電路中的電壓(水位)就會直接突然下降,比如我們的5V電壓突然降低到3V了。而我們系統中有些電子元器件,必須高於一定的電壓才能正常工作,電壓太低就直接不工作了,這個時候水缸就必不可少了。電容會在這個時候把存儲在裏邊的電流釋放一下,穩定電壓,當然,隨後前級的電流會及時把水缸充滿的。

有了這個電容,可以說我們的電壓和電流就會很穩定了,不會產生大的波動。這種電容常用的有以下三種:

圖片

3-2 電解電容

圖片    圖片

3-3 鉭電容                 3-4 陶瓷電容

這三種電容是我們常用的三種電容,其中第一種個頭大,佔空間大,單位容量價格最便宜,第二種和第三種個頭小,佔空間小,性能一般也略好於第一種,但是價格也貴不少。當然,除了價格,還有一些特殊參數,在通信要求高的場合也要考慮很多,這裏暫且不說。我們板子上現在用的是第一種,只要在符合條件的情況下,第一種470uF的電容不到一毛錢,同樣的耐壓和容值,第二種和第三種可能得1塊錢左右。

電容的選取,第一個參數是耐壓值的考慮。我們用的是5V系統,電容的耐壓值要高於5V一般推薦1.5倍到2倍即可,有些場合稍微高於也可以。我們板子上用的是10V耐壓的。第二個參數是電容容值,這個就需要根據經驗來選取了,選取的時候,要看這個電容起作用的這塊系統的功率消耗情況,如果系統耗電較大,波動可能比較大,那麼容值就要大一些,反之,可以小一些。

剛開始同學們設計電路也模仿別人,別人用多大自己也用多大,慢慢積累。比如咱上邊講電容作用二的時候,電流從100mA突然增大到150mA的時候,其實即使加上這個電容,電壓也會輕微波動,比如從5V波動到4.9V,但是隻要我們板子上的器件在電壓4.9V以上也可以正常工作的話,這點波動是沒有問題的,但是如果不加或者加的很小,電壓波動比較大,有些器件會工作不正常了。但是如果加的太大,佔空間並且價格也高,所以這個地方電容的選取多參考經驗。

第二個電容,容值較小,是0.1uF,也就是100nF,是用來濾除高頻信號干擾的。比如ESDEFT等。有一點大家要清楚,我們初中學過電容可以通交流隔直流,但是電容的參數對不同頻率段的干擾的作用是不一樣的。這個100nF的電容,是我們的前輩根據干擾的頻率段,根據板子的參數,根據電容本身的參數所總結出來的一個值。也就是說,以後大家在設計數字電路的時候,在電源處的去耦高頻電容,直接用這個0.1uF就可以了,不需要去計算。

還有一點,就是大家看我們的電路圖可以看出來,通常在電路中可能瞬間電流較大的地方,會加一個大電容,比如在1602液晶左上角的那個,靠近了單片機的VCC以及1602液晶背光的VCC,起到穩定電壓的作用,在左上角電機和蜂鳴器位置有一個,也是起到穩定電壓的作用。還有在所有的IC器件的VCCGND之間,都會放一個0.1uF的高頻去耦電容,特別在布板的時候,這個0.1uF電容要儘可能的靠近IC,儘量很順利的將這個ICVCCGND連到一起,這個大家先了解,細節以後再討論。

3.3 三極管在數字電路中的應用

三極管在我們數字電路和模擬電路中都有大量的應用,在我們開發板上也用了多個三極管。在我們板子上的LED小燈部分,就有這個三極管的應用了,3-5LED電路中的 Q16就是一個PNP型的三極管。

圖片

3-5 LED電路

3.3.1 三極管的初步認識

三極管是一種很常用的控制和驅動器件,常用的三極管根據材料分有硅管和鍺管兩種,原理相同,壓降略有不同,本課程用硅管的參數來進行講課。三極管共有2種類型,分別是PNP型和NPN型,先來認識一下。

圖片
 

3-6 三極管示意圖

三極管一共有3個極,從圖3-6來看,橫向左側的引腳叫做基極(base),中間有一個箭頭,一頭連接基極,另外一頭連接的是發射極e(emitter),那剩下的一個引腳就是集電極c(collector)。這塊是必須要記住的內容,死記硬背即可,後邊慢慢用的多了,每次死記硬背一次,多次以後就會深入腦海了。

3.3.2 三極管的原理

三極管的應用有截止、放大、飽和三種狀態。放大狀態主要是對模擬信號而言,而且用法的計算內容比較複雜,暫時我們用不到。而我們數字電路主要使用三極管的開關特性,因此我們只用到了截止飽和兩種狀態,所以我們只講這兩種用法。三極管的類型和用法我給大家總結了一句口訣,大家要把這句口訣記牢了:箭頭朝內PNP,導通電壓順箭頭過,電壓導通,電流控制。

下面我們一句一句來解析口訣。大家可以看圖3-6,三極管有2種類型,箭頭朝內就是PNP,箭頭朝外自然就是NPN了,在實際應用中,往往我們要根據實際電路需求來選擇到底用哪種類型,大家用幾次估計就會了,很簡單。

三極管的用法特點,關鍵點在於b(基極)e(發射極)之間的電壓情況,對於PNP而言,e極電壓只要高於b0.7V,這個三極管e級和c級之間可以順利導通。也就是說,控制端在be之間,被控制端是ec之間。同理,NPN型三極管的導通電壓是b極比e極高0.7V,總之是箭頭的始端比末端高0.7V就可以導通三極管的e極和c極。這就是關於“導通電壓順箭頭過,電壓控制”的解釋,我們來看圖3-7

圖片

3-7 三極管的用法

我們以圖3-7爲例介紹一下。三極管基極通過一個10K的電阻接到了單片機的一個IO口上,發射極直接接到5V的電源上,集電極接了一個LED小燈,並且串聯了一個1K的限流電阻最終接到了電源負極GND上。

如果LEDS6我們程序給一個高電平1,那麼基極b和發射極e都是5V,也就是說eb不會產生一個0.7V的壓降,這個時候,發射極和集電極也就不會導通,那麼豎着看這個電路在三極管處是斷開的,所以沒有電流通過,LED2小燈也就不會亮。如果我們程序給LEDS6的位置一個低電平0,而e極是個5V,產生壓差就會導通,三極管eb之間大概有0.7V的電壓,那還有(5-0.7)V的電壓會在電阻R47上。這個時候,ec之間也會導通了,那麼LED小燈本身有2V的壓降,三極管本身ec之間大概有0.2V的壓降,我們忽略不計。那麼在R41上就會有大概3V的壓降,可以計算出來,這條之路的電流大概是3mA,可以成功點亮LED

最後一個概念,電流控制。前邊講過,三極管有截止,放大,飽和三個狀態,截止就不用說了,只要eb之間不導通即可。我們要讓這個三極管處於飽和狀態,就是我們所謂的開關特性,必須要滿足一個條件。三極管都有一個放大倍數β,要想處於飽和狀態,b極電流就必須大於ec之間電流值除以β這個β,對於常用的三極管大概可以認爲是100。那麼上邊的R47的阻值我們必須要來計算一下了。

剛纔我們算過了,ec之間的電流是3mA,那麼b極電流最小就是3mA除以100等於30uA,大概有4.3V電壓會在基極電阻上,那麼基極電阻最大值就是4.3V/30uA = 143K。只要比這個值小就可以,當然也不能太小,STC89C52RCIO口輸入電流最大理論值是25mA,我推薦不要超過10mA

3.3.3 三極管的應用

三極管在我們數字電路里的開關特性,常用的一個是控制應用,一個是驅動應用。所謂的控制就是如同我們圖3-7裏邊介紹的,我們可以通過單片機控制三極管的基極來間接控制後邊小燈的滅,用法大家基本熟悉了。還有一個控制就是進行不同電壓之間的轉換控制,比如我們的單片機的IO口是5V系統,如果直接接12V系統會燒壞單片機,所以我們加一個三極管,三極管的工作電壓高於單片機的IO口電壓,用5VIO口來控制12V的電路,如圖3-8所示。

圖片

3-8 三極管控制電路圖

3-8裏所示,當IO口輸出高電平5V時,三極管導通,OUT輸出低電平0V,當IO口輸出低電平時,三極管截止,OUT則由於上拉電阻R2的作用而輸出12V的高電平,這樣就實現了低電壓控制高電壓的工作原理。

所謂的驅動,主要是指電流輸出能力。我們再來看這兩個圖之間的對比

圖片

3-9 LED小燈對比示意圖

3-9中上邊的LED燈,和我們第二課講過的LED燈是一樣的,當IO口是高電平,小燈熄滅,當IO口是低電平時,小燈點亮。

下邊那個圖呢,按照這種推理,IO口是高電平的時候,應該有電流流過並且點亮小燈,但是實際並非如此。

單片機主要是個控制器件,具備四兩撥千斤的特點。就如同槓桿必須有一個支點一樣,想要撐起整個地球必須有力量承受的支點。單片機的IO口可以輸出一個高電平,但是他的輸出電流很有限,普通IO口輸出高電平的時候,大概只有幾十到幾百uA的電流,達不到1mA,也就點不亮這個LED小燈或者亮度很低,這個時候如果我們想高電平點亮LED,用上三極管就可以這樣來處理,我們板上的這種型號,可以通過500mA的電流,有的三極管通過的電流還更大一些,如圖3-10所示。

圖片

3-10 三極管驅動LED小燈

3-10中,當IO口是高電平,三極管導通,因爲三極管的電流放大作用,c極電流就可以達到mA以上了,就可以成功點亮LED小燈。

雖然我們用了IO口的低電平可以直接點亮LED,但是單片機的IO口作爲低電平,輸入電流就可以很大嗎?這個我想大家都能猜出來,當然不可以。單片機的IO口電流承受能力,不同型號不完全一樣,就STC89C52來說,官方手冊的81頁有對電氣特性的介紹,整個單片機的工作電流,不要超過50mA,單個IO口總電流不要超過6mA。即使一些增強51IO口承受電流大一點,可以到25mA,但是還要受到總電流50mA的限制。那我們來看電路圖的8LED小燈的這個部分電路,如圖3-11所示。

圖片
 

3-11 LED電路圖()

3-11圖示這裏我們要學會看電路圖的一個知識點,大家注意看,電路圖右側所有的LED下側的線最終都連到一根黑色的粗線上去了,大家注意,這個地方不是實際的完全連到一起,而是一種總線的畫法,畫了這種線以後,表示這個總線結構,所有的名字一樣的是一一對應的連接到一起,其他名字不一樣的,是不連到一起的。比如左側的DB0和右側的最左邊的LED2小燈下邊的DB0是連在一起的,而和DB1等其他線不是連在一起的。

那麼我們把3-11電路圖裏的我們現在需要講的這部分再摘出來看。

圖片

3-12 LED電路圖()

大家通過3-12的電路圖來計算一下,5V的電壓減去LED本身的壓降,減掉三極管ec之間的壓降,限流電阻用的是330歐,那麼每條支路的電流大概是8mA,那麼8LED如果全部同時點亮的話電流總和就是64mA。這樣如果直接接到單片機的IO口,那單片機肯定是承受受不住的,即使短時間可以承受,長時間工作就會不穩定,甚至導致單片機燒燬

有的同學會提出來可以加大限流電阻的方式來降低這個電流。比如改到1K,那麼電流不到3mA8路總的電流就是20mA左右。首先,降低電流會導致LED小燈亮度變弱,小燈的亮度可能關係不大,因爲我們同樣的電路接了數碼管,後邊我們要講數碼管還要動態顯示,如果數碼管亮度不夠的話,那視覺效果就會很差,所以降低電流的方法並不可取;其次,對於單片機來說,他主要是起到控制作用,電流輸入和輸出的能力相對較弱,P08個口電流也有一定限制,所以如果接一兩個LED小燈觀察,可以勉強直接用單片機的IO口來接,但是接多個小燈,從實際工程的角度去考慮,就不推薦直接接IO口了。那麼我們如果要用單片機控制多個LED小燈該怎麼辦呢?

除了三極管之外,其實還有一些驅動IC,這些驅動IC可以作爲單片機的緩衝器,僅僅是電流驅動緩衝,不起到任何邏輯控制的效果,比如我們板子上用的74HC245D這個芯片,這個芯片在邏輯上起不到什麼別的作用,就是當做電流緩衝器的,我們通過查看其數據手冊,74HC245穩定工作在70mA電流是沒有問題的,比單片機的8IO口大多了,所以我們可以把他接在小燈和IO口之間做緩衝,如圖3-13所示

圖片
 

3-13 74HC245功能圖

從圖3-13我們來分析,其中VCCGND就不用說了,細心的同學會發現這裏有個0.1uF的去耦電容噢。

74HC245是個雙向緩衝器,1引腳DIR是方向引腳,當這個引腳接高電平的時候,右側所有的B編號的電壓都等於左側A編號對應的電壓。比如A0是高電平,那麼B0就是高電平,A1是低電平,B1就是低電平等等。如果DIR引腳接低電平,得到的效果是左側A編號的電壓都會等於右側B編號對應的電壓。因爲我們這個地方控制端是左側接的是P0口,所以我們要求B等於A的狀態,所以1腳我們直接接的高電平。圖3-13中還有一排電阻R10R17是上拉電阻,這個電阻的用法我們後邊介紹。

還有最後一個使能引腳19OE,這個引腳上邊有一橫,表明是低電平有效,當接了低電平後,74HC245就會按照剛纔上邊說的起到雙向緩衝器的作用,如果OE接了高電平,那麼無論DIR怎麼接,AB的引腳是沒有關係的,也就是74HC245功能不能實現出來。

從我們的電路圖3-14可以看出來,我們的P0口和74HC245A端是直接接起來的。這個地方,有個別同學有一個疑問,就是我們明明在電源VCC那地方加了一個三極管驅動了,爲何還要再加245驅動芯片呢。這裏大家要理解一個道理,電路上從正極經過器件到,首先必須有電流才能正常工作,電路中任何一個位置斷開,都不會有電流,器件也就不會參與工作了。其次,和水流一個道理,從電源正極到負極的電流水管的粗細都要滿足要求,任何一個位置的管子過細,都會出現瓶頸效應,電流在整個通路中細管處會受到限制降低,所以在電路通路的每個位置上,都要保證足夠通道足夠暢通,這個245的作用就是消除單片機IO這一環節的瓶頸

圖片
 

3-14 單片機和74HC245接口

3.3.4 74HC138三八譯碼器的應用

在我們設計單片機電路的時候,單片機的IO數量是有限的,有時並滿足不了我們的設計需求,比如我們的STC89C52RC一共是32IO口,但是我們爲了控制更多的器件,就要使用一些外圍的數字芯片,這種數字芯片由簡單的輸入邏輯來控制輸出邏輯,比如74HC138這個三八譯碼器,圖3-1574HC138在我們原理圖上的一個應用。

圖片
 

3-15 74HC138應用原理圖

從這個名字來分析,三八譯碼器,就是把3種輸入狀態翻譯成8種輸出狀態。從圖3-15所看出來的,74HC138一共有1~6一共是6個輸入引腳,但是其中456這三個引腳是使能引腳。使能引腳和我們前邊講74HC245OE引腳是一樣的,這三個引腳如果不符合規定的輸入要求,Y0Y7不管你輸入的123引腳是什麼電平狀態,總是高電平。所以我們要想這個74HC138正常工作,ENLED那個輸入位置必須輸入低電平,ADDR3位置必須輸入高電平,這兩個位置都是使能控制端口。不知道大家是否記得我們第二課的程序有這麼兩句ENLED = 0ADDR3 = 1就是控制使這個74HC138使能的。

邏輯芯片,大多都是有使能引腳,使能符合要求了,那下面就要研究邏輯控制了。對於數字器件的引腳,如果一個引腳輸入的時候,有01兩種狀態;對於兩個引腳輸入的時候,就會有00,01,10,11這四種狀態了,那對於3個輸入的時候,就會出現8種狀態了,大家可以看下邊的這個真值表——3-16,其中輸入是A2A1A0的順序,輸出是從Y0Y1....Y7的順序。

圖片

3-16 74HC148真值表

從圖3-16可以看出,任一輸入狀態下,只有一個輸出引腳是低電平,其他的引腳都是高電平。我們清楚的知道,8LED小燈的總開關三極管Q16基極的控制端是LEDS6,也就是Y6輸出一個低電平的時候,可以開通三極管Q16,從右側的希望輸出的結果,我們可以推導出我們的A2A1A0的輸入狀態應該是110,那我們再來看下原理圖3-17

圖片
 

3-17 點亮LED小燈整體示意圖

那麼我們在整體捋一遍點亮LED小燈的過程,首先看74HC138,我們要讓LEDS6爲低電平才能導通三極管Q16,所以ENLED = 0;ADDR3 = 1;保證74HC138使能。然後ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;這樣保證了三極管Q16這個開關開通5V電源加到LED

74HC245左側是通過P0口控制,我們讓P0.0引腳等於0,就是DB_0等於0,而右側DB0等於DB_0的狀態,也是0,那麼這樣在這一排共8LED小燈當中,只有最右側的小燈和5V之間有壓差,有壓差就會有電流通過,有電流通過我們的LED2就會發光。

74HC245左側我們可以看出來,是直接接到P0口上的,而74HC138ADDR0 ~ ADDR3接在何處呢?

圖片
 

3-18 跳線帽接口部分

跳線帽是大家以後要常用的一個器件,他的作用就是起到導線的作用,我們可以通過跳線帽來實現連接線的切換。

圖片

3-19 跳線實物圖

大家看,跳線帽本身可以佔2個針的位置,現在是把右側和中間的針插到了一起,這樣實現的就是圖3-18中的P1.0ADDR0接到一起,P1.1ADDR1接一起,P1.2ADDR2接一起,P1.3ADDR3接一起。這樣就可以透徹理解我們第二課的程序了。

好了,大家認真再回顧一下我們第二課的那個程序,再領悟一下這幾個數字器件的用法。

3.4 LED閃爍程序

點亮LED小燈的程序我們第二課完成了,就是讓LED = 0;熄滅小燈的程序也很簡單,就是LED = 1;亮和滅中間加個時間延時,點亮和熄滅都學會了,那麼我們中間加個延時程序,反覆不停的點亮和熄滅小燈,就成了閃爍了。

我們首先複習一下Keil寫程序的過程,建立工程--保存工程--建立文件--添加文件到工程--編寫程序--編譯--下載程序。

LED閃爍程序對於有C基礎的同學來說很簡單,那我先寫出來,大家可以先看下。沒有C語言基礎的同學也可以跟着抄一遍,下節課我會補充部分C語言基礎知識,這樣你先抄一遍後,再跟着看C語言基礎知識的時候也比較容易理解透徹。

#include<reg52.h>         //包含寄存器的庫文件                   

sbit  LED = P0^0;         //位地址聲明注意:sbit必須小寫! 

sbit  ADDR0 = P1^0;

sbit  ADDR1 = P1^1;

sbit  ADDR2 = P1^2;

sbit  ADDR3 = P1^3;

sbit  ENLED = P1^4;

 

void  main()

{

    unsigned int i = 0;

 

    ENLED = 0;

    ADDR0 = 0;

    ADDR1 = 1;

    ADDR2 = 1;

    ADDR3 = 1;            //74HC138開啓三極管   

 

    while(1)              //程序死循環  

    {

           LED = 0;                //點亮小燈

           for(i=0;i<30000;i++);  //延時一段時間

           LED = 1;                //熄滅小燈

           for(i=0;i<30000;i++);  //延時一段時間

    }

}

大家把這個程序編譯一下,下載到單片機裏,會發現LED2這個小燈會閃爍了。關於閃爍燈程序的詳解請看:http://www.51hei.com/mcuteach/248.html 裏面有c語言和彙編2個版本的.

發佈了13 篇原創文章 · 獲贊 72 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章