在項目中經常會遇到單片機IO口資源不夠用的情況,那么如何讓單片機的IO口利用最大化呢,這里分享一下幾種方法。
一、如何使用1個GPIO口控制2個LED燈顯示四種狀態
1、LED的兩大特性:
1).單向導電性
2).閾值特性:在LED兩端加壓到一定的閥值電壓后才能導通(材料不同,閥值電壓不同)
2、電路設計
并聯
3、原理詳解
1).IO口為高阻態時,兩個LED均熄滅
2).IO口為高電平的時候,紅色LED點亮
3).IO口為低電平的時候,黃色LED點亮
4).IO口輸出方波信號(頻率大于100Hz),兩個LED交替點亮,根據人眼視覺惰性,兩個燈相當于都點亮
限制:電源電壓只有5V,只有部分低閥值的LED可點亮
解決方法:
串聯
1).IO口為高阻態時,兩個LED均熄滅(兩個LED導通所需電壓大于電源電壓)
2).IO口為高電平的時候,藍色LED點亮
3).IO口為低電平的時候,綠色LED點亮
4).IO口輸出方波信號(頻率大于100Hz),兩個LED交替點亮,根據人眼視覺惰性,兩個燈相當于都點亮
總結:當兩個LED導通電壓大于電源電壓時,串聯
當兩個LED導通電壓小于電源電壓時,并聯
LED燈驅動
使用NPN和PNP三極管
如果是一個IO口,IO口驅動電流很小。控制兩個LED燈時不能同時發光也就是一個發光一個不發光,則可以使用如下電路;兩個三極管一個NPN一個PNP來實現LED燈控制。
使用NPN和NPN
如果是一個IO口,IO口驅動電流很小。控制兩個LED燈時不能同時發光也就是一個發光一個不發光,則可以使用如下電路;兩個三極管都是NPN三極管,因為NPN從集電極拿出來信號,剛好是和基極信號相位相反的。
直接驅動無需放大
如上所示,LED燈直接可以用IO口驅動,此時一個接成IO口上拉的形式;一個接成IO口下拉的形式,此時IO口高低狀態會驅動不同顏色的了的LED燈發光。
兩個NPN使用兩個IO口
IO口無法驅動而且需要使用兩種不同顏色的LED燈時,我們可以直接使用兩個NPN三極管來驅動;當然也可以使用PNP三極管。
以上兩種燈需要交替亮起來一般很常見,例如系統正常工作時需要紅色指示燈亮起來,但是待機時,需要綠色指示燈亮起來。
請注意紅色、綠色、藍色LED燈除了顏色不一致,正常發光時的壓降也是不一致的;如下所示:
紅色:1.6~2.0V
綠色:2.2~2.5V
藍色:2.5~3.1V
小知識:2014年諾貝爾物理學獎,被授予日本名古屋大學、名城大學教授赤崎勇,名古屋大學教授天野浩,以及美國加州大學圣芭芭拉分校教授、美籍日裔科學家中村修二,以表彰他們發明了藍色發光二極管(LED),并因此帶來的新型節能光源?
二、如何使用兩個IO口控制三個LED燈
方法一:
S1和S2分別接單片機兩個IO口,這里通過一個單刀雙擲按鍵模擬IO口輸出高低電平。
S1和S2同時為低電平時,LED燈全滅。
S1為低電平,S2為高電平時,LED2亮。
S1為高電平,S2為低電平時,LED3亮。
S1為高電平,S2為高電平時,LED1亮。
方法二:
S3和S4分別接單片機兩個IO口,這里通過一個單刀雙擲按鍵模擬IO口輸出高低電平。
S3和S4同時為低電平時,LED4亮。
S3為低電平,S4為高電平時,LED6亮。
S3為高電平,S4為低電平時,LED5亮。
S3為高電平,S4為高電平時,LED5、LED6同時亮。
方法三:
S1和S2分別接單片機兩個IO口,這里通過一個單刀雙擲按鍵模擬IO口輸出高低電平。
S1和S2同時為低電平時,LED燈全滅。
S1為低電平,S2為高電平時,LED3亮。
S1為高電平,S2為低電平時,LED2亮。
S1為高電平,S2為高電平時,LED1亮。
方法四:
S3和S4分別接單片機兩個IO口,這里通過一個單刀雙擲按鍵模擬IO口輸出高低電平。
S3和S4同時為低電平時,LED燈全滅。
S3為低電平,S4為高電平時,LED6亮。
S3為高電平,S4為低電平時,LED5亮。
S3為高電平,S4為高電平時,LED4亮。
通過兩個IO口的高低電平4種組合方式,結合外部電路就可以控制3個LED燈的亮滅。
三、如何用3個IO口控制6個LED燈
這個電路用到了單片機GPIO的三種狀態:高電平 低電平 高阻態
所謂“高阻態”,是指GPIO對外部電路表現出極大的阻抗。因阻抗很大,幾乎不會吸入電流,也不會對外輸出電流。
各個LED燈單獨亮起,分為六種情況。
1、當只有LED1亮起時,單片機各GPIO的狀態如下:(帶箭頭的紅線為電流回路)
2、當只有LED2亮起時,單片機各GPIO的狀態如下:
3、當只有LED3亮起時,單片機各GPIO的狀態如下:
4、當只有LED4亮起時,單片機各GPIO的狀態如下:
5、當只有LED5亮起時,單片機各GPIO的狀態如下:
6、當只有LED6亮起時,單片機各GPIO的狀態如下:
整理如下:
就是這么簡單!
使用該方法,n個GPIO可以驅動 n*(n-1) 個LED,所以:
使用2個GPIO可以驅動2個LED。
使用3個GPIO可以驅動6個LED。
使用4個GPIO可以驅動12個LED。
以此類推。
這種方式能夠實現的基礎是:
單片機GPIO的三個狀態:高電平、低電平、高阻態。
LED具有單向導電性。
查理復用設計的方法:
任意兩個GPIO引腳之間串入兩個LED,這兩個LED為并聯,且LED方向相反。
當你想要點亮某個特定的LED時,就將其兩端所連接到的GPIO引腳分別設定為高電平和低電平,其它剩余的GPIO引腳設定為高阻態。
下面從最簡單的開始,一步一步體會查理復用的電路設計。
1、使用2個GPIO時最簡單:
LED1亮起時:
LED2亮起時:
這里只用到高電平、低電平的狀態,不需要用高阻態的狀態。
2、使用3個GPIO時,前面已經分析過:
可以等效為下圖:
可以看出,確實是任意兩個GPIO之間均串入了兩個并聯的LED,且LED方向相反。
查理復用這樣的電路接法也會引發一些問題。
首先,LED亮起時完全由單片機的GPIO輸出電流,所以對于GPIO的電流驅動能力有一定的要求。設計電路時要注意查詢自己使用的MCU的電流驅動能力,下圖是STM32單片機中對GPIO電流驅動能力的說明:
其次,如果出現了某個LED開路或短路的情況,電流的流向會被打亂,LED亮起來的邏輯會變得錯亂。最壞的情況下,電路會對GPIO索取大電流,導致單片機損壞。下圖是假設LED1短路,那么在點亮LED5時,LED3也會亮起:
審核編輯:黃飛
?
評論
查看更多