中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

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

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

        ▲ 本文要分析的電路


        事情是這樣開始的。

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


        收到的實物長這樣:


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


        拆開看看電路板:


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


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

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

        那么是怎么做到夠用的?

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


        這個巧妙的電路如下:


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


        一、原理分析

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

        • 高電平

        • 低電平

        • 高阻態(tài)

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

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

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


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


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


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


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


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


        整理如下:


        就是這么簡單!


        二、總結提升

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

        為什么叫查理復用?


        很簡單,因為這個方法來源于美信半導體公司的工程師Charlie Allen。


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

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

        • 使用2個GPIO可以驅動2個LED。

        • 使用3個GPIO可以驅動6個LED。

        • 使用4個GPIO可以驅動12個LED。

        • 以此類推。

        這種方式能夠實現(xiàn)的基礎是:

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

        • LED具有單向導電性。

        查理復用設計的方法:

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

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

        • 前面電動牙刷中6個LED燈的電路,就是這么設計的。

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

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


        LED1亮起時:


        LED2亮起時:


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

        2、使用3個GPIO時,前面已經分析過:


        可以等效為下圖:


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

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


        點亮LED1時:


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

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

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


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


        三、繼續(xù)進階

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

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

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




        評論


        相關推薦

        技術專區(qū)

        關閉