Un 多路復用器 是具有多個輸入和單個數據輸出的組合電路。 這樣,可以選擇僅其入口之一的通道以將其引導至其出口。 也就是說,您可以選擇從哪個輸入中獲取輸入中的數據或位,而忽略其餘的輸入。 當多個連接需要共享一條線路或總線時,這在電子產品中非常常見。
也就是說,通過控制多路復用器,您可以 始終選擇適當的輸入。 這使得儘管只有一個連接,但您可以同時使用多個輸入設備而不會彼此干擾,這是有可能的。 此外,您應該知道,在許多項目中,多路分解器通常與多路復用器結合使用...
什麼是多路復用器?
這些組合服務稱為 多路復用器 它們通常並不復雜。 它們由幾個邏輯門組成,具體取決於它們的數據輸入量,控制可能會增加複雜性。 它們通常包括 2n 輸入和單個輸出,以及控制線。 並且可以將其中幾個結合使用以增加可用票證的數量。
可以理解為 選擇器。 例如,假設您有一個非常簡單的輸入,其中有兩個輸入,這是最簡單的輸入。 該電路將具有單個控制輸入和輸出。 如果輸入是A和B,則可以使用控制輸入來控制是將值傳遞給輸出S的是A還是將值傳遞給輸出S的B。 為此,您只需要更改控制線C的值即可。例如,如果C = 0,它將是A;如果C = 1,它將是B。
如您所知,如果有更多的輸入,將需要更多的輸入 控制輸入 供選擇。 實際上,多路復用器是一種特殊類型的解碼器,其中包括每個“與”門的使能信號以及輸出和“與”門之間的“或”門。 這樣就可以很容易地選擇它。
至於它的應用,你可以使用它 對於很多事情:
- 當您有多個輸入時,輸入選擇器可共享一條總線或線路。
- 串行器,以便按順序獲取其每個輸入的值。
- 對於來自不同設備的各種數據,使用相同的連接線進行多路傳輸。 例如,假設您要使用微控制器的同一數據引腳來連接多個設備輸出,但是一次只能發送一個信息...
- 執行邏輯功能等
多路復用器類型
根據傳輸方式的不同,有 各種類型 多路復用器或多路復用:
- 按頻分
- 按時分
- 按代碼劃分
- 按除法 波長
可以想像,它們是由頻率,時鐘,二進制代碼和波長控制的。 但是在這裡我只對常規...感興趣
除了類型,與解復用器一樣,您可以通過以下方式找到它 或多或少的渠道 2、4、8、16等,具體取決於您的DIY項目所需。
與解復用器的區別
在數字電子學中有 解復用器,是多路復用器的對手的組合電路。 在這種情況下,將只有一個信息輸入,但是可以通過其各種輸出進行傳輸。 換句話說,在這種情況下,控制信號將決定將輸入數據傳輸到哪個輸出。
Si 您將解復用器連接到復用器的輸出,您可以擁有一個非常有用的系統來學習兩種設備的工作方式。
去哪買?
這些設備通常在以下位置實現 浸片 很簡單的。 在作為解復用器的情況下,您可以在各種各樣的品牌中找到它們,並具有大量的輸入或輸出。 此外,在各種專門的媒體或在線商店中也很容易找到它們。 如果您有興趣以高價購買一個,那麼可以從您的項目開始的這些很好的例子:
我建議你閱讀 數據表 從他們的製造商那裡了解他們的想法 引腳,因為它們可能會根據您購買的製造商或類型而有所不同。
cd74hc4067
另外,如您所見,還有非常好的模塊,可讓您將兩個設備合而為一。 是這樣的 已知的CD74HC4067,這是一種採用TTL技術的小型模塊,可通過安裝MUX / DEMUX來幫助您雙向處理其16個面板。 也就是說,您可以將其用作一種智能開關。
因此,您的Arduino最多可以讀寫16種不同的設備 僅5個引腳,其中4個用於控制,另外XNUMX個用於收集要根據所選通道讀取或寫入的信號。
關於這款芯片的好處是 適用於數字和模擬信號,因此它與許多在模擬和其他數字芯片上工作的傳感器以及多種不同的電子元件兼容。 它具有出色的多功能性。 這就是為什麼它們也被稱為I / O擴展器或輸入和輸出放大器的原因。
您甚至可以將其用於 通過串口通訊, I2C總線 或我們在其他場合已經談到的SPI。
當然,在與他合作之前,您必須確保 滿足電壓和電流 允許該電路,以免損壞它。 例如,在這種情況下,它可以提供高達20 mA的電流以及2至6v的電壓。 但是,如果您想使用更高的電流 你可以用一個繼電器 或通過晶體管。
與Arduino集成
一種形式 在Arduino板上有更多輸入或更多輸出,就是使用這些多路復用器和多路分解器。 有了它們,您將不必購買價格更高,帶有更多引腳的電路板,也不必使用其他技巧來連接所需的所有東西。
例如,您可以使用 MUX和DEMUX模塊 以便將兩者都包含在一個元素中,然後使用Arduino以一種簡單的方式將其集成到您的項目中。 使用CD74HC4067,您可以非常輕鬆地連接它,因此必須遵循以下規則:
- MUX / DEMUX芯片的Vcc必須將其連接到Arduino的Vcc或5V。
- GND,接地,您必須將其連接到Arduino的GND。
- 標記為S0,S1,S2,S3的引腳是控制活動通道的引腳,具有四個Arduino數字I / O,例如D8,D9,D10和D11。
- EN也啟用,因此它可以作為多路復用器使用,您可以將其連接到Arduino的GND。
- SIG是確定所選通道的輸出信號。 它可以連接到Arduino或需要讀取輸出的任何設備。 在這種情況下,我已將其連接到A0以從Arduino本身獲取值。
- 在這種情況下,模塊的另一端將具有輸入,它們是可以連接到設備的C0-C10。
連接後,Arduino代碼可以很簡單。 這 Arduino IDE草圖作為多路復用器 可以是以下內容(此代碼只會分別關閉和打開它們的通道,但是您可以對其進行修改以創建所需的項目):
const int muxSIG = A0; const int muxS0 = 8; const int muxS1 = 9; const int muxS2 = 10; const int muxS3 = 11; int SetMuxChannel(byte channel) { digitalWrite(muxS0, bitRead(channel, 0)); digitalWrite(muxS1, bitRead(channel, 1)); digitalWrite(muxS2, bitRead(channel, 2)); digitalWrite(muxS3, bitRead(channel, 3)); } void setup() { pinMode(muxSIG, OUTPUT); pinMode(muxS0, OUTPUT); pinMode(muxS1, OUTPUT); pinMode(muxS2, OUTPUT); pinMode(muxS3, OUTPUT); } void loop() { for (byte i = 0; i < 16; i++) { SetMuxChannel(i); digitalWrite(muxSIG, HIGH); delay(200); digitalWrite(muxSIG, LOW); delay(200); } }
如果要將其用作DEMUX,則應僅考慮C0-C10作為輸出,而SIG作為輸入。 萬一你想要 用作解復用器,代碼將像這樣更改:
onst int muxSIG = A0; const int muxS0 = 8; const int muxS1 = 9; const int muxS2 = 10; const int muxS3 = 11; int SetMuxChannel(byte channel) { digitalWrite(muxS0, bitRead(channel, 0)); digitalWrite(muxS1, bitRead(channel, 1)); digitalWrite(muxS2, bitRead(channel, 2)); digitalWrite(muxS3, bitRead(channel, 3)); } void setup() { Serial.begin(9600); pinMode(muxS0, OUTPUT); pinMode(muxS1, OUTPUT); pinMode(muxS2, OUTPUT); pinMode(muxS3, OUTPUT); } void loop() { for (byte i = 0; i < 16; i++) { SetMuxChannel(i); byte muxValue = analogRead(muxSIG); Serial.print(muxValue); Serial.print("\t"); } Serial.println(); delay(1000); }
請記住,您可以在我們的幫助下獲取更多信息 免費的Arduino編程課程.
您好,我正在做一個項目,就像將74hc4067用於16個紅外障礙傳感器的輸入一樣,每個傳感器為我點亮不同的輸出。 好吧,如果我可以使用arduino mega做到這一點,但是我需要使用50個紅外傳感器,並且每個紅外傳感器都打開一個輸出,即50個輸出,那麼我正在考慮將多個744067用於傳感器輸入,將tlc5940用於輸出,但是在什麼是編程代碼中,我有點迷路,在此先感謝您的幫助。