<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)IO引腳驅(qū)動能力與上拉電阻

          單片機(jī)IO引腳驅(qū)動能力與上拉電阻

          作者: 時間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
          單片機(jī)的引腳,可以用程序來控制,輸出高、低電平,這些可算是單片機(jī)的輸出電壓。

          但是,程序控制不了單片機(jī)的輸出電流?!纹瑱C(jī)的輸出電流,很大程度上是取決于引腳上的外接器件。

          本文引用地址:http://www.ex-cimer.com/article/201611/318348.htm

          單片機(jī)輸出低電平時,將允許外部器件,向單片機(jī)引腳內(nèi)灌入電流,這個電流,稱為“灌電流”,外部電路稱為“灌電流負(fù)載”;
          單片機(jī)輸出高電平時,則允許外部器件,從單片機(jī)的引腳,拉出電流,這個電流,稱為“拉電流”,外部電路稱為“拉電流負(fù)載”。

          這些電流一般是多少?最大限度是多少? 這就是常見的單片機(jī)輸出驅(qū)動能力的問題。

          早期的51系列單片機(jī)的帶負(fù)載能力,是很小的,僅僅用“能帶動多少個TTL輸入端”來說明的。
          P1、P2和P3口,每個引腳可以都帶動3個TTL輸入端,只有P0口的能力強(qiáng),它可以帶動8個!

          分析一下TTL的輸入特性,就可以發(fā)現(xiàn),51單片機(jī)基本上就沒有什么驅(qū)動能力。
          它的引腳,甚至不能帶動當(dāng)時的LED進(jìn)行正常發(fā)光。

          記得是在AT89C51單片機(jī)流行起來之后,做而論道才發(fā)現(xiàn):單片機(jī)引腳的能力大為增強(qiáng),可以直接帶動LED發(fā)光了。
          看看下圖,圖中的D1、D2就可以不經(jīng)其它驅(qū)動器件,直接由單片機(jī)的引腳控制發(fā)光顯示。

          雖然引腳已經(jīng)可以直接驅(qū)動LED發(fā)光,但是且慢,先別太高興,還是看看AT89C51單片機(jī)引腳的輸出能力吧。
          從AT89C51單片機(jī)的PDF手冊文件中可以看到,穩(wěn)態(tài)輸出時,“灌電流”的上限為:

          MaximumIOLperportpin:10mA;
          MaximumIOLper8-bitport:Port0:26mA,Ports1,2,3:15mA;
          MaximumtotalIforalloutputpins:71mA.

          這里是說:
          每個單個的引腳,輸出低電平的時候,允許外部電路,向引腳灌入的最大電流為10mA;
          每個8位的接口(P1、P2以及P3),允許向引腳灌入的總電流最大為15mA,而P0的能力強(qiáng)一些,允許向引腳灌入的最大總電流為26mA;
          全部的四個接口所允許的灌電流之和,最大為71mA。

          而當(dāng)這些引腳“輸出高電平”的時候,單片機(jī)的“拉電流”能力呢? 可以說是太差了,竟然不到1mA。

          結(jié)論就是:單片機(jī)輸出低電平的時候,驅(qū)動能力尚可,而輸出高電平的時候,就沒有輸出電流的能力。
          這個結(jié)論是依照手冊中給出的數(shù)據(jù)做出來的。

          51單片機(jī)的這些特性,是源于引腳的內(nèi)部結(jié)構(gòu),引腳內(nèi)部結(jié)構(gòu)圖這里就不畫了,很多書中都有。
          在芯片的內(nèi)部,引腳和地之間,有個三極管,所以引腳具有下拉的能力,輸出低電平的時候,允許灌入10mA的電流;而引腳和正電源之間,有個幾百K的“內(nèi)部上拉電阻”,所以,引腳在高電平的時候,能夠輸出的拉電流很小。特別是P0口,其內(nèi)部根本就沒有上拉電阻,所以P0口根本就沒有高電平輸出電流的能力。

          再看看上面的電路圖:
          圖中的D1,是接在正電源和引腳之間的,這就屬于灌電流負(fù)載,D1在單片機(jī)輸出低電平的時候發(fā)光。這個發(fā)光的電流,可以用電阻控制在10mA之內(nèi)。
          圖中的D2,是接在引腳和地之間的,這屬于拉電流負(fù)載,D2應(yīng)該在單片機(jī)輸出高電平的時候發(fā)光。但是單片機(jī)此時幾乎沒有輸出能力,必須采用外接“上拉電阻”的方法來提供D2所需的電流。

          哦,明白了,外接電路如果是“拉電流負(fù)載”,要求單片機(jī)輸出高電平時發(fā)揮作用,那就必須用“上拉電阻”來協(xié)助,產(chǎn)生負(fù)載所需的電流。

          下面做而論道就專門說說上拉電阻存在的問題。

          從上面的圖中可以看到,D2發(fā)光,是由上拉電阻R2提供的電流,D2導(dǎo)通發(fā)光的電壓約為2V,那么發(fā)光的電流就是:(5-2)/1K,約為3mA。

          而當(dāng)單片機(jī)輸出低電平(0V),D2不發(fā)光的時候,R2這個上拉電阻閑著了嗎?沒有!它兩端的電壓,比LED發(fā)光的時候還高,現(xiàn)在是5V了,其中的電流,是5mA!
          注意到了嗎? LED不發(fā)光的時候,上拉電阻給出了更大的電流!并且,這個大于正常發(fā)光的電流,全部灌入單片機(jī)的引腳了!

          如果在一個8位的接口,安裝了8個1K的上拉電阻,當(dāng)單片機(jī)都輸出低電平的時候,就有40mA的電流灌入這個8位的接口!
          如果四個8位接口,都加上1K的上拉電阻,最大有可能出現(xiàn)32×5=160mA的電流,都流入到單片機(jī)中!
          這個數(shù)值已經(jīng)超過了單片機(jī)手冊上給出的上限。如果此時單片機(jī)工作不穩(wěn)定,就是理所當(dāng)然的了。
          而且這些電流,都是在負(fù)載處于無效的狀態(tài)下出現(xiàn)的,它們都是完全沒有用處的電流,只是產(chǎn)生發(fā)熱、耗電大、電池消耗快...等后果。
          呵呵,特別是現(xiàn)在,都在提倡節(jié)能減排,低碳...。

          那么,把上拉電阻加大些,可以嗎? 
          回答是:不行的,因?yàn)樾枰鼮槔娏髫?fù)載提供電流。對于LED,如果加大電阻,將使電流過小,發(fā)光暗淡,就失去發(fā)光二極管的作用了。

          對于D1,是灌電流負(fù)載,單片機(jī)輸出低電平的時候,R1、D1通路上會有灌電流;輸出高電平的時候,那就什么電流都沒有,此時就不產(chǎn)生額外的耗電。

          綜上所述,灌電流負(fù)載,是合理的;而“拉電流負(fù)載”和“上拉電阻”會產(chǎn)生很大的無效電流,這種電路不合理。

          有些網(wǎng)友對上拉電阻情有獨(dú)鐘,有用沒用的,都想在引腳上安裝個上拉電阻,甚至還能說出些理由:穩(wěn)定性啦、速度啦...。
          其實(shí),“上拉電阻”和“拉電流負(fù)載”電路,是會對單片機(jī)系統(tǒng)造成不良后果的。

          做而論道看過很多關(guān)于單片機(jī)引腳以及上拉電阻方面的書籍、參考資料,基本上它們對于使用上拉電阻的弊病都沒有進(jìn)行仔細(xì)的討論。

          在此,做而論道鄭重向大家提出建議:設(shè)計(jì)單片機(jī)的負(fù)載電路,應(yīng)該采用“灌電流負(fù)載”的電路形式,以避免無謂的電流消耗。

          上拉電阻,僅僅是在P0口才考慮加不加的問題:當(dāng)用P0口做為輸入口的時候,需要加上、當(dāng)用P0口輸出高電平驅(qū)動MOS型負(fù)載的時候,也需要加上,其它的時候,P0口也不用加入上拉電阻。

          在其它接口(P1、P2和P3),都不應(yīng)該加上拉電阻,特別是輸出低電平有效的時候,外接器件就有上拉的作用。



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();