用實驗講解:巧用1個GPIO控制2個LED顯示4種狀態

2021-02-21 電路啊

前幾天發了一篇文章:

巧用1個GPIO控制2個LED顯示4種狀態(點擊閱讀)

同步發在公眾號「晶片之家」上,引起了大家的熱烈討論。當時沒有帶具體的實驗現象,有點小遺憾。

清華大學的卓老師看到之後,做了具體的實驗分析。不僅重點分析了串並聯兩種實現方式,還對串聯方式時兩個LED存在微亮的問題提出了解決方案。

文章講解得非常到位,有理有據,實在是「實踐出真知的典範」。

下面分享給大家,通過實驗看用1個GPIO控制2個LED顯示4種狀態的實驗現象,原文如下:



在下面的麵包板上,演示了使用一條IO控制線控制兩個LED分別點亮和熄滅的四種狀態。

▲ 一個個單片機IO埠分別控制兩個LED

為了理解其中的工作原理,則需要熟悉LED的兩個工作特性:

正如發光二極體名字所說,LED只能向二極體那樣單向導電發光。如果施加電壓極性反了,LED則不工作。

導通閾值特性是指,只要施加的正向電壓超過一定閾值之後,LED才能夠導通。這一點可以從下面這支紅色LED的正向V-A特性曲線看出。

▲ 紅色LED的V-A特性

上面曲線表明,只有當正向電壓超過大約1.6V之後,電流才會出現快速增加。在此之前,正嚮導通電流很小。

不同顏色的LED由於所使用的半導體材料不同,導通閾值電壓會有所區別。比如下面這支黃色LED的正嚮導通電壓超過了1.7V。

▲ 黃色LED的V-A曲線

如果LED發射光譜中包括更短的光譜成分,則相應的導通閾值會更高。下面的綠色和藍色LED的正嚮導通電壓的閾值都已經超過了2.5V了。

▲ 綠色LEDV-A特性曲線
▲ 藍色LED的V-A曲線

將不同LED的V-A特性曲線繪製在一起,可以凸顯出不同LED的閾值電壓的差異。值得說明的是,當電壓小於閾值電壓的時候,LED並不是不導電,只是電流極小。比如在2.5V,雖然還沒有超過藍色LED的閾值電壓,但在LED燈芯處還是能夠隱約看到發光。

一旦電壓超過閾值電壓,LED正嚮導通電流便會迅速增加到1mA以上。之後雖然電流增加很快,但在導通電流2 ~ 10mA之內,LED都顯示為點亮狀態,亮度倒是看起來差不多。

▲ 不同顏色LED的伏安特性

合理應用LED的單向導電和導通閾值特性,便可以在一條單片機IO口的四種工作狀態下,來控制兩個LED的點亮和熄滅了。

比如利用LED管的單向導通特性,將兩個LED正反向並聯在一起,分別連接在分壓電阻中心和單片機的IO口上,就可以實現單個IO口控制兩個LED的目標。在下圖中,顯示了在一個工作在5V電壓下的單片機IO控制兩個LED(紅色,黃色)的四種狀態。

▲ 兩個LED正反並聯連接在MCU的IO口與分壓電阻中點

當IO口為高阻狀態,兩個LED都熄滅;當IO埠為高電平時,紅色LED點亮;當IO埠為低電平的時候,黃色LED點亮;當IO輸出方波信號時(通常要求頻率大於100Hz),兩個LED交替點亮,根據人眼色視覺暫留特性,看起來兩個LED都點亮了。

下面動圖顯示了IO口的四種狀態對應兩個LED的點亮與熄滅。

▲ 對應兩個LED四個狀態的IO輸出波形

上面的LED並聯方案是利用了LED的單向導通特性。如果考慮到LED的閾值特性,這種方案就會受到一定限制。比如,控制的LED綠色或者藍色時,由於它們的導通閾值電壓超過了2.5V,因此綠色和藍色LED就很難被點亮。

下面動圖顯示,綠色和藍色LED只能發出微弱的光線。

▲ 對於兩個LED四種狀態的IO波形

如果當單片機和LED的供電電壓為3.3V時,情況將會更加嚴重。比如在3.3V供電情況下,使用並聯LED方案,對於紅色的LED還可以勉強工作,但對於綠色和藍色LED則無法點亮了。

▲ 對於兩個LED四種狀態的IO波形

在前面推文中則介紹了另外一種方案,即LED串聯方案,可以解決藍色和綠色LED閾值電壓高的問題。

下圖顯示了LED串聯方案電路示意圖:

▲ 兩個LED串聯控制方案

當IO埠為高阻時,由於兩個LED的導通閾值電壓之和大於電源電壓(+5V),它們都不導通;當IO埠為低電平時;上面的綠色LED點亮;當IO埠為高電平時,下面的藍色LED點亮;當輸出高頻方波信號時,兩個LED都被點亮。

下面動圖顯示了麵包板上綠色和藍色串聯工作狀態下,並一條IO埠控制的情況:

▲ 對應兩個LED四種狀態IO波形

串聯LED控制模式只能應用於兩個LED的電壓加起來超過電路電源電壓的情況。比如藍色、綠色LED,工作在3.3V,5V電壓下都是可以的。

如果將兩個LED更換成紅色(1.6V)和綠色(2.5V),使用串聯模式,則只能應用在電源電壓小於4.1V的情況下,比如3.3V的單片機電路中。如果在5V電路中,則會出現兩個LED無法同時熄滅的情況。

下面就顯示了一個紅色,一個綠色LED工作在5V電源電壓下,當IO為高阻時,它們實際上無法熄滅。

▲ 對應兩個LED四種狀態IO波形

在5V電壓下,那麼對於紅色、綠色LED使用前面並聯LED方案行不行呢?

通過實驗會發現,也出現了問題。由於綠色LED在2.5V下無法點亮,因此並聯方案也無法工作。如下圖所示:

▲ 對應兩個LED四種狀態IO波形

那麼問題來了,在5V電壓下,該使用什麼方案,才能夠利用單片機一個IO口的四種模式,來分別控制一個綠色LED和一個紅色LED的點亮和熄滅呢?就像下面這個動圖裡所示的那樣。

▲ 對於兩個LED四種狀態的IO波形

如果你對並聯LED和串聯LED工作原理已經理解了,我想此時,你的腦子裡已經有了答案了。如果你有了想法,就將答案寫在後面的留言中吧。(答案就在上圖中)

對串聯方案的補充說明

使用另外一個二極體對串聯的兩個LED進行並聯,消除無法完全關閉的問題。

▲ 改進的方案

▲ 在沒有旁濾二極體的時候,紅色、黃色LED無法截止

▲ 有著旁濾的二極體是,紅色黃色LED可以有效截止了

▲ 增加旁濾二極體的時候,可以有效解決無法截止的問題

相關焦點

  • 終極教程,帶具體實驗現象,1個GPIO控制2個LED顯示4種狀態,歡迎討論!
    今天在卓老師公眾號看到了具體的實驗分析,並分析兩種串並聯方式的實驗現象,講解的非常到位,今天分享給大家閱讀。在下面的麵包板上,演示了使用一條IO控制線控制兩個LED分別點亮和熄滅的四種狀態。比如在2.5V,雖然還沒有超過藍色LED的閾值電壓,但在LED燈芯處還是能夠隱約看到發光。一旦電壓超過閾值電壓,LED正嚮導通電流便會迅速增加到1mA以上。之後雖然電流增加很快,但在導通電流2 ~ 10mA之內,LED都顯示為點亮狀態,亮度倒是看起來差不多。
  • stm32的gpio模擬iic小記
    在用stm32的模擬iic讀取mpu6050時發現讀whoami寄存器為0xd1,而正確的值應該為0x68,導致這個問題基本上有以下幾個原因:    1、如果是杜邦線連接,線太長且線質量不好會導致這個問題;    2、上拉電阻不合適,上拉電阻不合適的話會導致iic兩根線上的波形不好
  • IO埠映射和IO內存映射(詳解S3C24XX_GPIO驅動)
    物理地址空間,一部分給物理RAM(內存)用,一部分給總線用,這是由硬體設計來決定的,因此在32 bits地址線的x86處理器中,物理地址空間是2的32次方,即4GB,但物理RAM一般不能上到4GB,因為還有一部分要給總線用(總線上還掛著別的許多設備)。在PC機中,一般是把低端物理地址給RAM用,高端物理地址給總線用。
  • 「正點原子Linux連載」連載第二十八章多點電容觸控螢幕實驗
    FT5426的I2C設備地址為0X38,FT5426的寄存器有很多,本章我們只用到了其中的一部分,如表28.1.1所示:表28.1.1.1 FT5426使用到的寄存器表表28.1.1.1中就是本章實驗我們會使用到的寄存器。關於觸控螢幕和FT5426的知識就講解到這裡。
  • 單片機快速入門實驗:控制LED閃爍發光
    用編程器燒寫程序時可以選擇使用哪種類型的振蕩器。在這裡,我們選用片內RC振蕩器,所以在圖中是沒有晶振電路的。發光二極體電路由1隻LED和1隻電阻串聯而成。當P0.4引腳輸出低電平時,點亮LED。在LPC900系列單片機中所有型號都擁有P0.4口。
  • 6位LED動態顯示接口電路
    要想每位顯示不同的字符,就必須採用掃描方***流點亮各位LED,即在每一瞬間只使某一位顯示字符。在此瞬間,段選控制I/O口輸出相應字符段選碼(字型碼),而位選則控制I/O口在該顯示相應字符。  若LED為共陽型,段選2的控制信號先使a段為低電平,其餘b、c、d、e、f、g、dp段全為高電平,這樣led1、led2....led23、led24是否要點亮其中的a劃還要受段選1的控制,段選1又是由待顯示的數據控制,然後段選
  • 「正點原子Linux連載」第二十七章SPI實驗
    第二十七章SPI實驗同I2C一樣,SPI是很常用的通信接口,也可以通過SPI來連接眾多的傳感器。相比I2C接口,SPI接口的通信速度很快,I2C最多400KHz,但是SPI可以到達幾十MHz。I.MX6U也有4個SPI接口,可以通過這4個SPI接口來連接一些I2C外設。
  • 基於Cortex-A9 LED彙編、C語言驅動編寫
    用主控晶片控制這些外設的一般步驟:看電路原理圖,弄明白主控晶片和外設是怎麼連接的,對於驅動工程師來說,主要是看外設的一些clk、數據引腳、控制引腳是如何連接的;外設一般都會連接到SOC的1個或者多個控制器上,比如i2c、spi、gpio等,有的是數據線有的是信號線,中斷線等;根據電路連接和需求對主控晶片進行設置,往往對外設的設置都是通過寄存器操作實現
  • 「正點原子Linux連載」第二十四章RGBLCD顯示實驗
    2、像素格式上面講了,一個像素點就相當於一個RGB小燈,通過控制R、G、B這三種顏色的亮度就可以顯示出各種各樣的色彩。那該如何控制R、G、B這三種顏色的顯示亮度呢?如果學習過STM32的話應該還聽過RGB565這種像素格式,在本章實驗中我們使用ARGB8888這種像素格式,一個像素佔用4個字節的內存,這四個字節每個位的分配如圖24.1.1.2所示:圖24.1.1.2 ARGB8888數據格式在圖24.1.1.2中,一個像素點是4個字節,其中bit31~bit24是Alpha通道,bit23
  • led燈帶怎麼安裝_led燈帶安裝圖解_led燈帶效果圖
    LED燈帶安裝時的注意事項1、在整卷led燈帶未拆離包裝物或堆成一團的情況下,切勿通電點亮LED燈帶;2、根據現場安裝長度需裁剪led燈帶時,只能在印有剪刀標記處剪開燈帶,否則會造成其中一個單元不亮,一般每個單元長度為1.5—2米;3、接駁電源或兩截燈帶串接時
  • STM32 模塊篇-溫溼度傳感器模塊(DHT11)實驗
    DHT11 數字溫溼度傳感器模塊為4 針PH2.0 封裝。連接方便。如右圖所示。5.03.1.1 性能描述1. 供電電壓:3-5.5V2. 5.03.2 實驗目的1. 掌握溫度採集模塊DHT11的工作原理; 2. 掌握單片機實現溫度採集模塊DHT11數據採集的基本方法,其中包括硬體和軟體實現兩部分;     3. 熟悉單片機數據採集系統中,溫度採集模塊DHT11作為傳感器對象的系統設計方法。
  • 技術文章:基於Cortex-A9 LED彙編、C語言驅動編寫
    用主控晶片控制這些外設的一般步驟:看電路原理圖,弄明白主控晶片和外設是怎麼連接的,對於驅動工程師來說,主要是看外設的一些clk、數據引腳、控制引腳是如何連接的;外設一般都會連接到SOC的1個或者多個控制器上,比如i2c、spi、gpio等,有的是數據線有的是信號線,中斷線等;根據電路連接和需求對主控晶片進行設置,往往對外設的設置都是通過寄存器操作實現;書寫相應代碼,實現功能
  • 「正點原子Linux連載」第五十八章Linux INPUT子系統實驗
    關於input子系統就講解到這裡,接下來我們就以開發板上的KEY0按鍵為例,講解一下如何編寫input驅動。58.2 硬體原理圖分析本章實驗硬體原理圖參考15.2小節即可。58.4 運行測試58.4.1 編譯驅動程序和測試APP1、編譯驅動程序編寫Makefile文件,本章實驗的Makefile文件和第四十章實驗基本一樣,只是將obj-m變量的值改為「keyinput.o」,Makefile
  • 單片機實驗簡明過程
    (8)查看寄存器進入調試狀態後,「工程窗口」變為「寄存器窗口」,可以查看CPU各寄存器的值。(9)查看存儲器單擊「存儲器窗口」按鈕,打開存儲器窗口;該窗口共有4個標籤,可顯示4個存儲器的值。(10)單步運行在調試狀態下,源程序的左邊有一個黃色的箭頭,指示當前程序執行的位置,即將要執行的一條指令。單擊「單步」按鈕,程序執行一條指令,黃色箭頭下移一行。寄存器和存儲器的值的變化顯示在相應位置。執行過的指令左邊用一綠色方塊標記。
  • 基於MSP430F149控制的LED圖文顯示的設計
    MSP430F149的突出優點有:(1)低電壓、超低功耗;(2)強大的處理能力;(3)豐富的片上外圍模塊;(4)系統工作穩定;(5)方便高效的開發環境。本課題利用MSP430F149單片機及外圍接口實現圖文顯示,利用單片機的定時器/計數器定時和記數的原理,將軟、硬體有機地結合起來,使得系統能夠正確地進行計時,同時使LED燈能夠正確地顯示圖形和文字。
  • 6位LED顯示單片機控制電子鐘/計數器
    我們能提供的完整的彙編語言源程序清單及電路原理設計圖有助於學習者進行分析和進行實驗驗證產品1:6位LED顯示單片機控制電子鐘/計數器成品板成品每套84元本文引用地址:http://www.eepw.com.cn/article/201611/317464
  • 小間距LED顯示屏的技術原理分析
    小顯示屏暫時還是做不到,如果按照以往標準來看,一萬平米就有1個死燈,那顯示屏就幾乎沒法看了。   2、實現低亮高灰   很多人都知道人體感應燈不同於室外顯示要求高亮度那麼高、刷新率及節能要求,室內顯示更需要將亮度降下來,實驗表明,從人眼感光度來看,LED(主動發光源)的亮度是被動發光源的2倍,就具體數據而言,小間距LED進入室內的最佳亮度在200——400cd/m2。但降低亮度帶來的灰度損失需要通過技術補充來完成。