<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

作者: 時(shí)間:2024-10-21 來(lái)源:硬件筆記本 收藏

▲ 本文要分析的電路


事情是這樣開(kāi)始的。

買(mǎi)了個(gè)電動(dòng)牙刷,幾十塊錢(qián)那種:


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


牙刷手柄上有1個(gè)按鍵和6個(gè)燈:


拆開(kāi)看看電路板:


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


初看之下,GPIO應該是不夠用的。

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

那么是怎么做到夠用的?

原來(lái),經(jīng)過(guò)巧妙的,這款電動(dòng)牙刷實(shí)現了用3個(gè)GPIO控制6個(gè)燈,節省了GPIO。


這個(gè)巧妙的電路如下:


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


一、原理分析

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

  • 高電平

  • 低電平

  • 高阻態(tài)

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

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

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


2、當只有LED2亮起時(shí),單片機各GPIO的狀態(tài)如下:


3、當只有LED3亮起時(shí),單片機各GPIO的狀態(tài)如下:


4、當只有LED4亮起時(shí),單片機各GPIO的狀態(tài)如下:


5、當只有LED5亮起時(shí),單片機各GPIO的狀態(tài)如下:


6、當只有LED6亮起時(shí),單片機各GPIO的狀態(tài)如下:


整理如下:


就是這么簡(jiǎn)單!


二、總結提升

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

為什么叫查理復用?


很簡(jiǎn)單,因為這個(gè)方法來(lái)源于美信半導體公司的工程師Charlie Allen。


查理復用是一種能夠在驅動(dòng)LED,特別是驅動(dòng)大量LED時(shí)有效地節約GPIO的方法。

使用該方法,n個(gè)GPIO可以驅動(dòng) n*(n-1) 個(gè)LED,所以:

  • 使用2個(gè)GPIO可以驅動(dòng)2個(gè)LED。

  • 使用3個(gè)GPIO可以驅動(dòng)6個(gè)LED。

  • 使用4個(gè)GPIO可以驅動(dòng)12個(gè)LED。

  • 以此類(lèi)推。

這種方式能夠實(shí)現的基礎是:

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

  • LED具有單向導電性。

查理復用設計的方法:

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

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

  • 前面電動(dòng)牙刷中6個(gè)LED燈的電路,就是這么設計的。

下面從最簡(jiǎn)單的開(kāi)始,一步一步體會(huì )查理復用的。

1、使用2個(gè)GPIO時(shí)最簡(jiǎn)單:


LED1亮起時(shí):


LED2亮起時(shí):


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

2、使用3個(gè)GPIO時(shí),前面已經(jīng)分析過(guò):


可以等效為下圖:


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

3、同樣的原理,使用4個(gè)GPIO時(shí):


點(diǎn)亮LED1時(shí):


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

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

首先,LED亮起時(shí)完全由單片機的GPIO輸出電流,所以對于GPIO的電流驅動(dòng)能力有一定的要求。設計電路時(shí)要注意查詢(xún)自己使用的MCU的電流驅動(dòng)能力,下圖是STM32單片機中對GPIO電流驅動(dòng)能力的說(shuō)明:


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


三、繼續進(jìn)階

如果要同時(shí)亮起兩個(gè)以上的LED,怎么辦?

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

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




關(guān)鍵詞: LED 驅動(dòng)電路 電路設計

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>