0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用晶體管實(shí)現(xiàn)多路復(fù)用

454398 ? 來源:網(wǎng)絡(luò)整理 ? 作者:佚名 ? 2019-11-01 10:36 ? 次閱讀

步驟1:晶體管背景

如何使用晶體管實(shí)現(xiàn)多路復(fù)用

如何使用晶體管實(shí)現(xiàn)多路復(fù)用

晶體管起著多種作用,但它們基本上是電子開關(guān)。這正是我們將如何使用它們進(jìn)行多路復(fù)用的方法。

我實(shí)際上并不會研究它們的工作原理或其他任何東西,而只是將其視為電子開關(guān)。我將使用NPN晶體管,這是最常用的晶體管。有一個發(fā)射極,一個基極和一個集電極,確保將電路組合在一起時知道哪個引腳。電流從集電極流向發(fā)射極,而基極則啟用/禁用該電流。實(shí)際上,這就是使它成為開關(guān)的原因。如果您要使用兩個不同的電源或需要大量電流,這也很有用。由于底座與收集器和發(fā)射器是分開的,因此可以單獨(dú)供電。這有什么用?那么,所有微控制器都有一個數(shù)字引腳(GPIO)最大輸出電流,通常不會超過200mA。如果一次有多個LED亮起,則可能超過200mA,這對微控制器不利。因此,使用晶體管,微控制器無需向?qū)嶋H組件(例如LED)提供電流。與復(fù)用無關(guān),但您也可以使用晶體管讓微控制器控制不同的電源以及繼電器的使用方法。上面的第二幅圖是使用晶體管的陽極和陰極原理圖的基本原理圖。 (注意:不需要陽極電路上的電容器)。該電路實(shí)際上不是陽極或陰極,但是我這樣稱呼它們是因?yàn)殛枠O電路的輸出連接到LED的陽極。而陰極電路連接到LED的陰極。 LED的陽極是電流進(jìn)入組件的地方,陰極是電流離開組件的地方。因此,當(dāng)然,陽極晶體管電路為VCC提供電源,陰極晶體管電路為地提供電源。

我正在使用的晶體管:http://www.taydaelectronics.com/2n3904-npn-general-propose-transistor.html

步驟2:多路復(fù)用

多路復(fù)用時,將其視為行和列,具體取決于您的處理方式(在本例中為LEDs)您總是會有行和列。在最后一步,您看到了陽極和陰極的示意圖,一個是行,另一個是列。

此步驟中的圖片顯示了一組9個LED,共有3行和3列。行和列無關(guān)緊要,它們的順序是什么,或者陽極/陰極是哪一個,但是硬件必須與軟件匹配!對于圖片,該行是該列上的“主要”。我的意思是,如果您查看這些步驟,則將一行設(shè)置為亮,而將某些列設(shè)置為為LED供電。怎么做?好吧,根據(jù)代碼的不同,您需要做一個“顯性的”,我這樣做是通過讓行函數(shù)每次行更改時都調(diào)用列函數(shù)來實(shí)現(xiàn)的。

由于有3個步驟,最終圖像顯示“您看到的內(nèi)容” , 這是如何運(yùn)作的?好吧,如果發(fā)生這種變化,每隔1毫秒說一次,那么人眼就無法分辨出差異,這與電視上的刷新率或每秒幀數(shù)非常相似。因此,實(shí)際上一次只能打開一排LED,但在眼睛上它們似乎一次都亮著。

當(dāng)您添加更多的行和列時,多路復(fù)用率會進(jìn)一步提高!假設(shè)您想要一個16 x 16的顯示屏,即256個LED。使用16行,16列的多路復(fù)用,因此32個引腳可控制256個LED! 32仍然是很多數(shù)字引腳(Arduino只有12 。..),但是您可以在其中使用移位寄存器使用更少的引腳。

現(xiàn)在,這確實(shí)帶來了一個問題,以便不斷查看此圖像。代碼必須每隔幾毫秒不斷更改行,以便所有行都處于打開狀態(tài)。因此,延遲等功能無法與多路復(fù)用一起使用。不幸的是,Arduino代碼似乎嚴(yán)重依賴于延遲。..解決方案?使用最后一個示例中的Atmega328s計(jì)時器/計(jì)數(shù)器,您可以看到實(shí)現(xiàn)計(jì)時器之一的代碼。

步驟3:制作多路復(fù)用原理圖

您需要確定要作為陽極或陰極的行/列,但實(shí)際上并不重要。在示意圖中,我選擇了行作為陽極,列選擇了陰極。

在示意圖中,由于行是陽極,所以LED陽極的每一行都連接到陽極彼此。列的情況相同,LED的所有陰極都已連接。

多路復(fù)用與將LED直接連接至引腳的真正不同之處在于控制接地的方式。如果僅將LED連接到引腳,則LED的陰極通常連接到公共接地。通過多路復(fù)用電路,微控制器控制接地的可用性。這使您可以禁用整個行或列,因?yàn)樵撾娐酚捎跊]有接地而無法完成。

在任何情況下,這都是理想的電路,但是對于陽極,您不一定需要一個晶體管。如果您想使用微控制器并從中汲取電流,則可以直接將引腳連接到LED的陽極。但是,這并不理想,因?yàn)槟鷱奈⒖刂破骷橙‰娏?,就像我在步驟1中所說的那樣,微控制器具有最大的電流供應(yīng)。陽極不一定需要一個晶體管,但陰極必須有一個。您仍然需要啟用/禁用地面才能使多路復(fù)用工作。

第二張圖片顯示的原理圖與我在示例中使用的物理電路幾乎相同。下一步將顯示如何編寫用于復(fù)用的程序。

步驟4:復(fù)用代碼

要實(shí)現(xiàn)復(fù)用,您將需要編寫代碼以某種方式。實(shí)際上并沒有那么復(fù)雜,可以說行在列上是“主要的”。這意味著單行晶體管導(dǎo)通,而該行的列運(yùn)行一次。之后,您移至下一行并一次又一次地執(zhí)行相同操作,直到重復(fù)為止!

刷新LED的速度不夠快而無法注意到的問題是您無法擁有同步系統(tǒng)。這意味著您不能有長時間持續(xù)的延遲。因此,如果您有1秒的延遲,那么行和列所在的位置將只在整個整秒鐘顯示一次。

最簡單的方法是使用兩個函數(shù),其中一個函數(shù)重復(fù)調(diào)用另一個函數(shù)。由于在這種情況下行是列的“主要”,我們將有兩個函數(shù)可以調(diào)用它們:

-Display_LED()

-Column_Load()

所以這是一些sudo代碼:

無效Display_LED(char a,char b,char c)

{

Column_Load(a);

digitalWrite(transistor_pin1,HIGH);

delay(1);

digitalWrite(transistor_pin1,LOW);

//根據(jù)行數(shù)重復(fù)

}

因此,上面的Display_LED函數(shù)是行的“顯性”函數(shù)。同樣,您可以使用行或列作為主導(dǎo),這并不重要。首先,您調(diào)用列函數(shù)來設(shè)置這些晶體管的開或關(guān)。然后將某個行晶體管設(shè)置為高電平。我的延遲很短,所以LED亮了1ms。如果將其更改為1000毫秒,您實(shí)際上可以看到每個更改。這就是為什么您不能在程序的其余部分中使用延遲的原因。從那里關(guān)閉晶體管,并重復(fù)從a到b的代碼,然后切換到第二行。

void Column_Load(char LEDs)

{

如果(LEDs_on == 0x07)

{

digitalWrite(colum1_transistor,HIGH)

digitalWrite(colum2_transistor,HIGH)

digitalWrite(colum3_transistor,HIGH)

}

}

此函數(shù)非常簡單,具體取決于值參數(shù)是否已按照需要設(shè)置LED。如果您使用PORT_和DDR_,那么編寫代碼實(shí)際上比使用digitalWrites簡單。在大多數(shù)情況下,我將vale設(shè)置為十六進(jìn)制值,因此,如果我輸入0x03,這意味著LED 1和3在2處于關(guān)閉狀態(tài)時都打開。

下一步是使用上述以下功能的3x3 LED陣列示例。唯一的區(qū)別是行和列是相反的。

步驟5:3 x 3 LED顯示示例

示例代碼:

您可以使用以下代碼查看帶有LED指示燈的圖片。該代碼也作為.ino文件附加。點(diǎn)亮的LED由0x02,0x05,0x02設(shè)置。這些十六進(jìn)制值的十進(jìn)制表示形式是00000010,00000101,00000010。您可以查看這些值如何與顯示匹配。

如果您想自己嘗試一下,下面提供了代碼,只需復(fù)制第3步中的電路即可!

/*晶體管多路復(fù)用3x3 LEDs

通過: Marty Peltz

日期:2013年7月19日

目的:使用多路復(fù)用以3x3模式控制9個LED。

用于Martin Peltz的Instructiable

*/

/****變量* ***/ char col1_cathode = 0;

char col2_cathode = 1; char col3_cathode = 2;

char row1_anode = 3;

char row2_anode = 4;

char row3_anode = 5;

void setup()

{

//將引腳設(shè)置為輸出

pinMode(col1_cathode,OUTPUT);

pinMode(col2_cathode,OUTPUT);

pinMode(col3_cathode,OUTPUT) );

pinMode(row1_anode,OUTPUT);

pinMode(row2_anode,OUTPUT);

pinMode(row3_anode,OUTPUT);

//關(guān)閉所有GPIO引腳

digitalWrite(col1_cathode,LOW) );

digitalWrite(col2_cathode,LOW);

digitalWrite(col3_cathode,LOW);

digitalWrite(row1_anode,LOW);

digitalWrite(row2_anode,LOW);

digitalW rite(row3_anode,LOW);

}

無效循環(huán)()

{

display_LED(0x02,0x05,0x02);

}

/****顯示LED功能* ***/

/*用途:使用要顯示的十六進(jìn)制參數(shù)調(diào)用此函數(shù)

*注意:此函數(shù)控制陰極,在我的情況下控制列

*/

void display_LED (字符c1,字符c2,字符c3)

{

row_anode(c1);//用第一個十六進(jìn)制值調(diào)用row_anode

digitalWrite(col1_cathode,HIGH);//顯示第一列

delay(1);//等待一小段延遲,以便LED亮起1ms

digitalWrite(col1_cathode,LOW);//禁用第一列,然后繼續(xù)

row_anode(c2);//用第二個十六進(jìn)制值調(diào)用row_anode

digitalWrite(col2_cathode,HIGH);//顯示第二列

delay(1);//等待一小段延遲,以便LED點(diǎn)亮1ms。

digitalWrite(col2_cathode,LOW);//禁用第二列,然后繼續(xù)

row_anode(c3);//用第二個十六進(jìn)制值調(diào)用row_anode

digitalWrite(col3_cathode,HIGH);//顯示第三列

delay(1);//等待一小段延遲,以便LED亮起1ms

digitalWrite(col3_cathode,LOW);//禁用第三列,然后繼續(xù)操作

//(請注意,嘗試將1ms更改為100ms-1s,您會看到不同)

}

/****陰極(列)功能** **/

/*目的:取參數(shù)值并打開相關(guān)的引腳

*注意:由于使用Arduinos digitalWrite,必須設(shè)置引腳,

*但是,如果使用DDRx/PORTx,則可以僅應(yīng)用十六進(jìn)制值,用于設(shè)置端口上的引腳。

*/ void row_anode(char LEDs_on)

{

if(LEDs_on == 0x00)

{

digitalWrite(row1_anode,LOW );

digitalWrite(row2_anode,LOW);

digitalWrite(row3_anode,LOW);

}

else if(LEDs_on == 0x01)

{

digitalWrite(row1_anode,HIGH) ;

digitalWrite(row2_anode,LOW);

digitalWrite(row3_anode,LOW);

}

否則if(LEDs_on == 0x02)

{

digitalWrite(row1_anode,LOW);

digitalWrite(row2_anode,HIGH);

digitalWrite(row3_anode,LOW);

}

否則if(LEDs_on == 0x03)

{

digitalWrite(row1_anode,HIGH);

digitalWrite(row2_anode,HIGH);

digitalWrite(row3 _anode,LOW);

}

否則if(LEDs_on == 0x04)

{

digitalWrite(row1_anode,LOW);

digitalWrite(row2_anode,LOW);

digitalWrite(row3_anode ,HIGH);

}

else if(LEDs_on == 0x05)

{

digitalWrite(row1_anode,HIGH);

digitalWrite(row2_anode,LOW);

digitalWrite(row3_anode, HIGH);

}

否則if(LEDs_on == 0x06)

{

digitalWrite(row1_anode,LOW);

digitalWrite(row2_anode,HIGH);

digitalWrite(row3_anode,HIGH );

}

否則if(LEDs_on == 0x07)

{

digitalWrite(row1_anode,HIGH);

digitalWrite(row2_anode,HIGH);

digitalWrite(row3_anode,HIGH) ;

}

}

步驟6:3 x 3 LED示例-多個顯示器

擴(kuò)展示例代碼:

在此情況下,我通過設(shè)置Atmega328的寄存器實(shí)現(xiàn)了一個Timer。這允許1秒的計(jì)時器是異步的,因此不會造成顯示延遲。要設(shè)置寄存器,您確實(shí)需要查看Atmega328的數(shù)據(jù)表。

當(dāng)定時器中斷每1秒關(guān)閉一次時,我將計(jì)數(shù)器增加3,以顯示數(shù)組中的下一組值。數(shù)組具有要用于顯示的值。

要查看示例,請查看附件。

步驟7:結(jié)論

我希望一旦您了解了復(fù)用的概念實(shí)際上非常簡單,該指令就很有幫助。

我計(jì)劃使另一個指令與移位寄存器進(jìn)行復(fù)用。除了一些額外的編碼,電路之外,它的復(fù)雜程度也沒有太多,而且您可以使用更少的引腳!

責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 晶體管
    +關(guān)注

    關(guān)注

    77

    文章

    9529

    瀏覽量

    137028
收藏 人收藏

    評論

    相關(guān)推薦

    通過使用多路復(fù)用實(shí)現(xiàn)基于SPI的閃存擴(kuò)展

    電子發(fā)燒友網(wǎng)站提供《通過使用多路復(fù)用實(shí)現(xiàn)基于SPI的閃存擴(kuò)展.pdf》資料免費(fèi)下載
    發(fā)表于 09-21 10:50 ?0次下載
    通過使用<b class='flag-5'>多路復(fù)用</b>器<b class='flag-5'>實(shí)現(xiàn)</b>基于SPI的閃存擴(kuò)展

    多路復(fù)用器應(yīng)用中的防護(hù)

    電子發(fā)燒友網(wǎng)站提供《多路復(fù)用器應(yīng)用中的防護(hù).pdf》資料免費(fèi)下載
    發(fā)表于 09-21 10:47 ?0次下載
    <b class='flag-5'>多路復(fù)用</b>器應(yīng)用中的防護(hù)

    基于帶寬的無源多路復(fù)用器>Ron

    電子發(fā)燒友網(wǎng)站提供《基于帶寬的無源多路復(fù)用器>Ron.pdf》資料免費(fèi)下載
    發(fā)表于 09-21 10:46 ?0次下載
    基于帶寬的無源<b class='flag-5'>多路復(fù)用</b>器>Ron

    電源多路復(fù)用器基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《電源多路復(fù)用器基礎(chǔ)知識.pdf》資料免費(fèi)下載
    發(fā)表于 09-21 10:21 ?0次下載
    電源<b class='flag-5'>多路復(fù)用</b>器基礎(chǔ)知識

    為MCU擴(kuò)展選擇正確的多路復(fù)用

    電子發(fā)燒友網(wǎng)站提供《為MCU擴(kuò)展選擇正確的多路復(fù)用器.pdf》資料免費(fèi)下載
    發(fā)表于 09-18 11:52 ?0次下載
    為MCU擴(kuò)展選擇正確的<b class='flag-5'>多路復(fù)用</b>器

    多路復(fù)用器和信號開關(guān)詞匯表

    電子發(fā)燒友網(wǎng)站提供《多路復(fù)用器和信號開關(guān)詞匯表.pdf》資料免費(fèi)下載
    發(fā)表于 09-05 11:44 ?0次下載
    <b class='flag-5'>多路復(fù)用</b>器和信號開關(guān)詞匯表

    電源多路復(fù)用器電路設(shè)計(jì)指南

    電子發(fā)燒友網(wǎng)站提供《電源多路復(fù)用器電路設(shè)計(jì)指南.pdf》資料免費(fèi)下載
    發(fā)表于 07-13 09:33 ?0次下載

    什么是多路復(fù)用器?它有哪些作用和應(yīng)用?

    在現(xiàn)代通信與數(shù)據(jù)處理領(lǐng)域,多路復(fù)用器(Multiplexer,簡稱MUX)作為一種關(guān)鍵設(shè)備,發(fā)揮著不可替代的作用。它能夠?qū)⒍鄠€輸入信號選擇性地合并到一個輸出信號中,從而實(shí)現(xiàn)了對通信信道的高效利用
    的頭像 發(fā)表于 05-23 16:38 ?2174次閱讀

    頻分多路復(fù)用和時分多路復(fù)用的區(qū)別有哪些

    頻分多路復(fù)用(FDM)和時分多路復(fù)用(TDM)是兩種主要的多路復(fù)用技術(shù),它們在通信系統(tǒng)中扮演著至關(guān)重要的角色。
    的頭像 發(fā)表于 05-07 15:24 ?1189次閱讀

    多路復(fù)用技術(shù)主要有幾種類型?它們各有什么特點(diǎn)?

    多路復(fù)用是指使用一個進(jìn)程同時處理多個任務(wù)。它主要依靠操作系統(tǒng)的調(diào)度機(jī)制,在一個進(jìn)程中通過不斷輪詢多個任務(wù),來達(dá)到并發(fā)處理的效果。進(jìn)程多路復(fù)用的特點(diǎn)是實(shí)現(xiàn)簡單,適用于并發(fā)任務(wù)較少的場景。但是它并不能很好地應(yīng)對大量并發(fā)任務(wù)的情況。
    的頭像 發(fā)表于 03-28 15:36 ?1727次閱讀

    一文詳解多路復(fù)用的類型

    多路復(fù)用最初是在電話中發(fā)展起來的。多個信號被組合在一起,通過一根電纜發(fā)送。
    的頭像 發(fā)表于 03-05 15:44 ?2483次閱讀
    一文詳解<b class='flag-5'>多路復(fù)用</b>的類型

    多路復(fù)用的原理 為什么要多路復(fù)用?多路復(fù)用技術(shù)的應(yīng)用

    在計(jì)算機(jī)網(wǎng)絡(luò)中,多路復(fù)用是一種重要的通信技術(shù),它允許多個信號通過同一個通信信道進(jìn)行傳輸。
    的頭像 發(fā)表于 03-05 15:09 ?1730次閱讀
    <b class='flag-5'>多路復(fù)用</b>的原理 為什么要<b class='flag-5'>多路復(fù)用</b>?<b class='flag-5'>多路復(fù)用</b>技術(shù)的應(yīng)用

    頻分多路復(fù)用的原理 頻分多路復(fù)用方式的分類

    頻分多路復(fù)用(Frequency-division multiplexing,F(xiàn)DM),是指載波帶寬被劃分為多種不同頻帶的子信道,每個子信道可以并行傳送一路信號的一種多路復(fù)用技術(shù)。
    的頭像 發(fā)表于 03-05 14:10 ?956次閱讀
    頻分<b class='flag-5'>多路復(fù)用</b>的原理 頻分<b class='flag-5'>多路復(fù)用</b>方式的分類

    在特殊類型晶體管的時候如何分析?

    ,則分析時則按照單獨(dú)的晶體管電路分析,與一般晶體管電路無差。 如果多發(fā)射極或多集電極的電路在非多極的一側(cè)全部短起來當(dāng)作一個晶體管,那么此時的關(guān)系可以看作一個或門的關(guān)系,只要有一路導(dǎo)通,則晶體管
    發(fā)表于 01-21 13:47

    IO多路復(fù)用基本概念

    一、IO多路復(fù)用基本概念 select、poll、epoll都是IO多路復(fù)用的機(jī)制。IO多路復(fù)用就是通過一種機(jī)制,讓一個進(jìn)程/線程可以監(jiān)視多個描述符,一旦某個描述符就緒(一般是讀寫就緒),能夠通知
    的頭像 發(fā)表于 11-10 16:34 ?1137次閱讀
    IO<b class='flag-5'>多路復(fù)用</b>基本概念