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

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 用3個IO口控制6個LED燈,怎么做到的?

          用3個IO口控制6個LED燈,怎么做到的?

          作者: 時間:2024-10-21 來源:硬件筆記本 收藏

          ▲ 本文要分析的電路


          事情是這樣開始的。

          買了個電動牙刷,幾十塊錢那種:


          收到的實(shí)物長這樣:


          牙刷手柄上有1個按鍵和6個燈:


          拆開看看電路板:


          可以看出,電路板上用的單片機(jī),只有8個腳,卻要控制1個按鍵、6個燈、1個震動的馬達(dá)電機(jī):


          初看之下,GPIO應(yīng)該是不夠用的。

          單片機(jī)除去電源腳(正極)和GND腳(負(fù)極),只剩最多6個GPIO腳。

          那么是怎么做到夠用的?

          原來,經(jīng)過巧妙的,這款電動牙刷實(shí)現(xiàn)了用3個GPIO控制6個燈,節(jié)省了GPIO。


          這個巧妙的電路如下:


          6個LED燈為相同的型號,為方便查看,用紅綠兩種顏色區(qū)分兩種不同的方向。


          一、原理分析

          這個電路用到了單片機(jī)GPIO的三種狀態(tài):

          • 高電平

          • 低電平

          • 高阻態(tài)

          所謂“高阻態(tài)”,是指GPIO對外部電路表現(xiàn)出極大的阻抗。因阻抗很大,幾乎不會吸入電流,也不會對外輸出電流。

          各個LED燈單獨(dú)亮起,分為六種情況。

          1、當(dāng)只有LED1亮起時,單片機(jī)各GPIO的狀態(tài)如下:(帶箭頭的紅線為電流回路)


          2、當(dāng)只有LED2亮起時,單片機(jī)各GPIO的狀態(tài)如下:


          3、當(dāng)只有LED3亮起時,單片機(jī)各GPIO的狀態(tài)如下:


          4、當(dāng)只有LED4亮起時,單片機(jī)各GPIO的狀態(tài)如下:


          5、當(dāng)只有LED5亮起時,單片機(jī)各GPIO的狀態(tài)如下:


          6、當(dāng)只有LED6亮起時,單片機(jī)各GPIO的狀態(tài)如下:


          整理如下:


          就是這么簡單!


          二、總結(jié)提升

          以上其實(shí)是用了一種叫“查理復(fù)用”(Charlieplex)的方法。

          為什么叫查理復(fù)用?


          很簡單,因?yàn)檫@個方法來源于美信半導(dǎo)體公司的工程師Charlie Allen。


          查理復(fù)用是一種能夠在驅(qū)動LED,特別是驅(qū)動大量LED時有效地節(jié)約GPIO的方法。

          使用該方法,n個GPIO可以驅(qū)動 n*(n-1) 個LED,所以:

          • 使用2個GPIO可以驅(qū)動2個LED。

          • 使用3個GPIO可以驅(qū)動6個LED。

          • 使用4個GPIO可以驅(qū)動12個LED。

          • 以此類推。

          這種方式能夠?qū)崿F(xiàn)的基礎(chǔ)是:

          • 單片機(jī)GPIO的三個狀態(tài):高電平、低電平、高阻態(tài)。

          • LED具有單向?qū)щ娦浴?/p>

          查理復(fù)用設(shè)計(jì)的方法:

          • 任意兩個GPIO引腳之間串入兩個LED,這兩個LED為并聯(lián),且LED方向相反。

          • 當(dāng)你想要點(diǎn)亮某個特定的LED時,就將其兩端所連接到的GPIO引腳分別設(shè)定為高電平和低電平,其它剩余的GPIO引腳設(shè)定為高阻態(tài)。

          • 前面電動牙刷中6個LED燈的電路,就是這么設(shè)計(jì)的。

          下面從最簡單的開始,一步一步體會查理復(fù)用的。

          1、使用2個GPIO時最簡單:


          LED1亮起時:


          LED2亮起時:


          這里只用到高電平、低電平的狀態(tài),不需要用高阻態(tài)的狀態(tài)。

          2、使用3個GPIO時,前面已經(jīng)分析過:


          可以等效為下圖:


          可以看出,確實(shí)是任意兩個GPIO之間均串入了兩個并聯(lián)的LED,且LED方向相反。

          3、同樣的原理,使用4個GPIO時:


          點(diǎn)亮LED1時:


          其他LED亮起的情況不再列舉。

          查理復(fù)用這樣的電路接法也會引發(fā)一些問題。

          首先,LED亮起時完全由單片機(jī)的GPIO輸出電流,所以對于GPIO的電流驅(qū)動能力有一定的要求。設(shè)計(jì)電路時要注意查詢自己使用的MCU的電流驅(qū)動能力,下圖是STM32單片機(jī)中對GPIO電流驅(qū)動能力的說明:


          其次,如果出現(xiàn)了某個LED開路或短路的情況,電流的流向會被打亂,LED亮起來的邏輯會變得錯亂。最壞的情況下,電路會對GPIO索取大電流,導(dǎo)致單片機(jī)損壞。下圖是假設(shè)LED1短路,那么在點(diǎn)亮LED5時,LED3也會亮起:


          三、繼續(xù)進(jìn)階

          如果要同時亮起兩個以上的LED,怎么辦?

          交替點(diǎn)亮他們就行,只要交替切換的速度夠快,由于人眼的視覺暫留效應(yīng),看起來就是同時亮起的。

          值得一提的是,如果要同時亮起的LED較多,比如大規(guī)模的LED點(diǎn)陣,那么還要注意一些新的問題,頗有門道。




          評論


          相關(guān)推薦

          技術(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); })();