早期的51單片機(jī),驅(qū)動能力很低。P1、P2和P3口只能驅(qū)動3個LSTTL輸入端,P0口可驅(qū)動8個。如果想要驅(qū)動更多的器件,就要用到“總線驅(qū)動芯片”。經(jīng)常用的就是74LS244(單向)和74LS245(雙向)。
現(xiàn)在常用的 AT89C51 單片機(jī)引腳的輸出能力已經(jīng)大多了,從 PDF 手冊文件中可查出:
單片機(jī)輸出低電平的時候,單個的引腳,向引腳灌入的最大電流為 10 mA;
一個 8 位的接口(P1、P2 以及 P3),灌入的總電流最大為 15 mA,P0 允許灌入的最大總電流為 26 mA;
全部的四個接口所允許的灌電流之和,最大為 71 mA。
但是當(dāng)引腳輸出高電平的時候,它們的“拉電流”能力可就差多了,竟然還不到 1 mA。
單片機(jī)的輸出特性和很多常用的LS系列TTL器件的輸出特性是相同的,都有灌電流較大的特點。
實際上,現(xiàn)在常用的單片機(jī)IO引腳驅(qū)動能力,就和早期的單片機(jī)增加了“總線驅(qū)動芯片”的效果基本是相同的。現(xiàn)在的單片機(jī)輸出低電平的時候,就已經(jīng)可以直接驅(qū)動LED發(fā)光了。
上述的數(shù)值,也并非是不可逾越的破壞性極限數(shù)值。當(dāng)略超過這些數(shù)值范圍的時候,單片機(jī)IO引腳的電壓,就會發(fā)生變化,造成“高電平不高”、“低電平不低”,這就會縮小外接器件的噪聲容限。如果環(huán)境再稍有干擾,外接器件就無法正確判定單片機(jī)送來的高、低電平,將會胡亂動作。
為了合理利用IO引腳的低電平能力強(qiáng)的特點,在外接耗電較大的器件(如LED數(shù)碼顯示器、繼電器等)的時候,應(yīng)該優(yōu)先選用低電平輸出來驅(qū)動外部器件。使用IO口輸出高電平驅(qū)動負(fù)載,就是一個錯誤的選擇。
下圖是一個直接利用單片機(jī)IO引腳驅(qū)動LED的電路。
圖中P0口使用低電平驅(qū)動方式,只要加上約1K的限流電阻即可,甚至不需要常見的P0口上拉電阻。發(fā)光的段,每個引腳灌電流約為3mA,不發(fā)光的段,電流為0。即使各個段全都發(fā)光,電流也不超過P0所容許的電流,這是一個合理的驅(qū)動方式。
圖中P3口使用了高電平驅(qū)動方式,這就必須加上上拉電阻來幫助IO接口輸出電流。電阻也采用了1K,發(fā)光的段,LED上的電流約為3mA,不發(fā)光的段,電流則為5mA,灌入了單片機(jī)的IO引腳。
這種電路,給單片機(jī)IO引腳帶來了很大的電流,一個8位的接口最大有可能被灌入40mA的電流,遠(yuǎn)遠(yuǎn)超過了容許的數(shù)值。上拉電阻能夠增加大量不需要的電流,不僅會造成單片機(jī)工作不穩(wěn)定,還會導(dǎo)致電源效率的嚴(yán)重下降,發(fā)熱,紋波增大。這說明,高電平輸出、加上拉電阻,就是一個不合理的驅(qū)動方式。
如果只是一個引腳的電流取值稍大一些,還算可以;但是綜合考慮一個8位的接口,則每個引腳的電流就不要大于23mA。這樣來看,上拉電阻最小應(yīng)該在1.8K2.5K之間,不宜再小,以免總電流超過接口所容許的電流。
在網(wǎng)上看到一篇“51單片機(jī)P0口上拉電阻的深入研究”的文章,對上拉電阻的最小選擇,寫的很低,甚至說可以選200歐姆!呵呵,這會燒毀單片機(jī)引腳的。
驅(qū)動更大電流的負(fù)載,可以使用三極管來擴(kuò)充電流,也可使用集成芯片ULN2003(或ULN2008),另外也可使用專用的驅(qū)動器件L298、各種型號的IGBT等等。
集成芯片的引腳比較密集,維修檢查較困難,更換的時候更是不便。做而論道比較喜歡使用三極管,它的耐壓和電流承受能力都遠(yuǎn)遠(yuǎn)超過集成芯片,在PCB上布線也很靈活方便。
8550(PNP)和8050(NPN):它們是一組可以配對使用的三極管,特點是集電極允許的電流很大,Icm竟然能達(dá)到1500mA!而且還不需要使用散熱片。它們的集電極反向擊穿電壓BVceo為25V,Pcm為0.5W。
2N5401(PNP)和2N5551(NPN):它們也是一組可以配對使用的三極管,它們的特點是耐壓比較高,集電極反向擊穿電壓BVceo可達(dá)160V!它們的最大集電極電流Icm為0.6A,Pcm為0.6W。
下面以常見的繼電器為負(fù)載繼續(xù)說明驅(qū)動方法。繼電器線圈的驅(qū)動電流往往要有40mA以上,單片機(jī)的引腳肯定是不能承受了,必須用三極管來擴(kuò)充輸出能力。
+5V的大電流負(fù)載,用8550(PNP型)驅(qū)動電路可見下圖。
P3.7輸出低電平的時候,在R1中形成Ib約有2mA,經(jīng)過8550的放大,Ic足夠驅(qū)動繼電器了。
用這個電路,不僅可以驅(qū)動繼電器,也驅(qū)動蜂鳴器、揚(yáng)聲器、多個LED等等,甚至驅(qū)動小型的直流電機(jī),也是可以的。一般來說,電機(jī)的工作電流要大一些,只要不超過8550可以輸出的最大電流是1500mA即可。驅(qū)動電機(jī)時,圖中電阻R1的取值應(yīng)該再小一些。
用這個電路,可以各種大電流負(fù)載,但是做而論道為什么單單要用繼電器,來說明問題呢?
因為在網(wǎng)上,發(fā)現(xiàn)很多不適當(dāng)?shù)睦^電器驅(qū)動電路,這些電路都是一個特點,即使用了射極輸出電路結(jié)構(gòu)。射極輸出電路要求輸入的動態(tài)范圍要大,而且輸出的電壓范圍永遠(yuǎn)比輸入小0.7V。射極輸出電路就不能有效的利用+5V的電源,實際上,加到繼電器上的電壓,不足+4V,除非是使用4V的繼電器,否則這就是不穩(wěn)定的隱患。
做而論道給出的電路是共射極結(jié)構(gòu),有電壓放大能力,所以對輸入的要求較低,輸出動態(tài)范圍大。
對于大于+5V的負(fù)載,如+12V,上面的電路就不行了。
如果只是簡單的把電源由+5V改為+12V,那么單片機(jī)輸出的高、低電平,還是只有0~5V的變化幅度,這對8550射極的+12V來說,都是低電平。8550將不能截止。
對于大于+5V的負(fù)載,只能使用NPN型的8050三極管來驅(qū)動,先以單片機(jī)輸出高電平來驅(qū)動。電路如下:
在上述電路中,上拉電阻R2也會帶來無謂的電流,其害處前面已經(jīng)討論過。
更重要的缺點是:在開機(jī)單片機(jī)復(fù)位后,自然輸出的高電平,會使繼電器吸合,或者是使電機(jī)轉(zhuǎn)動。(使用ULN2003等芯片擴(kuò)充輸出電流的時候,也存在這個問題。)
雖然編程的時候,可以先進(jìn)行接口的初始化,令其馬上就輸出0。但是每次開機(jī),還是會有瞬間的大電流沖擊,這往往是不允許的。
改進(jìn)一下,可以再加上個8550,進(jìn)行倒相,這就可以讓單片機(jī)用輸出低電平來驅(qū)動負(fù)載。
上圖中倒相用的8550,也可以使用“光耦”器件,這樣一來,又增加了電氣隔離的功能,這就是最完美的單片機(jī)輸出驅(qū)動電路。電路見下圖。
圖中的4N25經(jīng)過實際測量,當(dāng)LED的電流大于等于4.5mA時,輸出端的光電管即可為Q4提供足夠的基極電流。所以圖中的R3,可以使用810~1K的電阻。
上述的各個電路,都是以擴(kuò)充單片機(jī)的輸出電流為主題。其實,很多數(shù)字IC的輸出端,都存在擴(kuò)充電流輸出能力的問題,這里給出的電路,是普遍適用的。
這里介紹的8050/8550可以輸出1500mA的電流,如果要求更大的輸出電流,一種方法更換三極管,另外也可以使用專用大功率驅(qū)動器件,如L298,固態(tài)繼電器,IGBT等等。
評論
查看更多