5x24 模擬開關陣列芯片 CH446X
一、概述
CH446X 是 5x24 矩陣模擬開關芯片。CH446X 包含 120 只模擬開關,分布於 5x24 信號通道矩陣的各個交叉點,每只模擬開關都可以獨立的開啟或者關閉,從而實現 5x24 信號通道的任意路由。
二、引腳
三、功能說明
參考首頁的框圖,CH446X 芯片內部分為三個部分:接口控制邏輯、128 只鎖存器、120 只模擬開關陣列。
128 只模擬開關分布於由 24 個 X 端口和5 個 Y 端口組成的 5x24 矩陣的每個交叉點,使得任意一個 X 端口和任意一個 Y 端口之間能夠在需要時導通或者斷開,甚至可以使某兩個 X 端口分別導通到某個 Y 端口,實現任意兩個 X 端口之間或者任意兩個 Y 端口之間的間接導通(CH446X 雖然有 128 只鎖存器,但是只有 120 只模擬開關,有 8 只鎖存器沒有任何用途)
128 只鎖存器用於分別控制 128 只模擬開關的導通或者斷開,128 只鎖存器被編址為 0 到 127,由 7 位地址 ADDR6~ADDR0 譯碼后選擇。從 RST 引腳輸入高電平復位信號可以將所有鎖存器清 0,從而導致所有模擬開關斷開。需要開啟或者關閉某一模擬開關時,應該通過 7 位的 ADDR 提供鎖存器的地址,並通過 DAT 提供開關數據(1 則導通,0 則關閉),然后產生一個 ACT 激活脈沖,將開關數據寫入由 ADDR 譯碼指定的鎖存器,實現對指定的某個模擬開關的控制。
接口控制邏輯主要用於產生 ADDR 地址和 ACT 激活脈沖。在串行地址輸入方式下,由 CS/CK 引腳輸入時鍾,在其每個上升沿,從 DAT 引腳依次輸入 ADDR6、ADDR5直到ADDR1、ADDR0(分別對應於 AY2、AY1 直到 AX1、AX0),CS/CK 引腳需要提供 7 個上升沿得到 7位地址,並由 STB 引腳輸入的高電平選通脈沖直接產生 ACT 激活脈沖。
實際上,在串行地址輸入方式下,ACT 信號只是來自 STB 引腳的輸入。RST 復位信號優先於 ACT 信號,當 RST 輸入高電平時,ACT 信號將被忽略,所有鎖存器總是被清 0。在 ACT 激活脈沖有效期間,DAT 引腳可以動態改變輸入的開關數據,並使得相應的模擬開關實時地導通或者關閉,但是在 ACT 信號結束之前(即STB 的下降沿之前),DAT 引腳的輸入數據應該保持穩定以便正確地鎖存數據。
下圖是一個串行地址輸入的實例,控制 14H 地址(Y1 和 X4 之間)的模擬開關,先開再關。
下表是 CH446X 芯片 7 位地址 ADDR 的譯碼真值表,也是 120 只模擬開關的編址表。
四、應用 -- 串行地址輸入
如果 VEE 接負電壓,那么模擬開關可以通過負電壓的模擬信號,否則 VEE 接 GND,模擬開關只能通過高於-0.3V 的模擬信號。
由於模擬電路與數字電路共用 VDD,為減少干擾,VDD 和 VEE 引腳必須外接退耦電容,並且建議將數字輸入信號的邊沿適當放緩,降低傳輸頻率。另外,對於強干擾的應用環境,單片機可以每隔數秒定期對 CH446 進行刷新,確保各個模擬開關處於正確的開關狀態。
串行地址輸入方式下的控制步驟:通過 DAT 引腳依次提供 7 位地址並用 CS/CK 引腳的 7 個上升沿移入 CH446,通過 DAT 引腳提供數據、向 STB 引腳提供一個高電平脈沖。
如果單片機通過 SPI 總線連接 CH446X,那么 SPI 提供的一字節 8 位數據的位 7 將被 CH446 丟棄,SPI 的位 6 到位 0 作為地址,單片機 SPI 的串行數據輸出引腳連接 DAT 引腳提供開關數據,單片機使用一個獨立引腳控制 CH446 的 STB 引腳。
圖為8x16 矩陣模擬開關芯片CH446Q,CH446X類似
五、程序接口
1 /* ***************************************************** 2 // 函數功能:CH446X模擬開關復位,即通道全部關閉 3 // 輸入參數: 4 // 輸出參數: 5 // 函數返回: 6 // 修改記錄: 7 // 補充說明: 8 ***************************************************** */ 9 void Control_Switch_Reset(void) 10 { 11 CH446X_RST = 1; // RST引腳高電平 12 CH446X_RST = 1; 13 CH446X_RST = 1; 14 NOP; // 延時 15 NOP; 16 NOP; 17 NOP; 18 NOP; 19 NOP; 20 CH446X_RST = 0; 21 CH446X_RST = 0; 22 } 23 24 /* ***************************************************** 25 // 函數功能:CH446X模擬開關通道選擇導通 26 // 輸入參數: 27 // 輸出參數: 28 // 函數返回: 29 // 修改記錄: 30 // 補充說明: 31 ***************************************************** */ 32 void Control_Switch_State(u8 Address,u8 State) 33 { 34 u8 ByteCnt; 35 36 CH446X_STB = 0; 37 CH446X_DAT = 0; 38 NOP; 39 NOP; 40 for(ByteCnt = 0; ByteCnt < 7; ByteCnt++ ) 41 { 42 CH446X_CK = 0; 43 NOP; 44 if( Address & 0x80 ) 45 { 46 CH446X_DAT = 1; 47 } 48 else 49 { 50 CH446X_DAT = 0; 51 } 52 CH446X_CK = 1; 53 NOP; 54 NOP; 55 NOP; 56 NOP; 57 NOP; 58 Address <<= 1; // 左移1位 59 } 60 CH446X_CK = 0; 61 if( State == 1 ) 62 { 63 CH446X_DAT =1; 64 } 65 else 66 { 67 CH446X_DAT =0; 68 } 69 NOP; 70 NOP; 71 NOP; 72 NOP; 73 CH446X_STB =1; 74 NOP; 75 NOP; 76 CH446X_STB =0; 77 NOP; 78 NOP; 79 } 80 81 void main( void ) 82 { 83 Control_Switch_Reset(); 84 85 Control_Switch_State(0x00, 1); // Y0,X0導通 86 Control_Switch_State(0x01, 1); // Y0,X1導通 87 while(1) 88 { 89 90 } 91 92 }