單片機IO擴展方案討論
世界上最尷尬的事情是什么?這個我真不知道。但是做電子系統時最尷尬的事莫過于想要增加一個新的功能卻發現單片機的引腳不夠。
在我們日常的電路設計時,除了最基本的產品需求要滿足之外,還需要考慮的就是整個電路設計的成本,在很多公司中,成熟產品的cost down(成本降低)也基本上是個日常日程。產品成本的cost down比起供應鏈端哥們的努力,設計源頭的cost down顯然更加直接簡單。一個好的電子工程師并不是能設計出多么復雜穩定的電路,而是可以利用最簡單最便宜的方案來滿足復雜的產品設計要求。
在我們做單片機選型的時候,往往會發現這樣一個規律,同一個core的單片機選型時,單片機的引腳越多,其單價就越貴。以STM32為例,LQFP32封裝的價格是最便宜的,往上依次是LQFP48封裝,LQFP64封裝,LQFP100封裝,LQFP144封裝。在我們選型時,往往單片機的內部資源LQFP48封裝的引腳就能滿足我們的需求,正當我們決定選用這個芯片時,發現正好少了幾個用作IO口的引腳,因此不得不選用更高一級別的LQFP64封裝,正由于這個原因,電路的成本增加了好幾塊RMB。其實解決單片機IO口不夠用的情況,除了選用引腳更多的芯片之外,還有一個簡單而便宜的方法,那就是IO口擴展。
單片機的IO口擴展一般有以下三種方案。
串轉并芯片
串轉并芯片來擴展單片機的IO可能是成本最低的IO擴展解決方案,而且對于單片機來說可以犧牲最少的端口來獲得最多的端口擴展收益。串轉并方案所利用的芯片就是我們日常所謂的“移位寄存器”芯片。由于移位寄存器是一種單向器件,因此需要利用只能做串行數據轉并行數據的移位輸出寄存器芯片和只能做并行數據轉串行數據的移位輸入寄存器芯片來完成這個單片機IO口的雙向傳輸方案。
首先來討論單片機輸出口的擴展方案。單片機輸出口擴展需要利用串行數據轉并行數據的移位寄存器芯片,最常用的芯片是74HC595。
74HC595是一個8位串行輸入、平行輸出的位移緩存器:平行輸出為三態輸出。我們從它的邏輯框圖中可以看到,這個74HC595芯片內部分成三個部分:
圖中紅色框選出的是移位寄存器單元,這個單元的功能為SER引腳上的數據會在每個SCK上升沿到來時被移位進入移位寄存器。
圖中藍色部分框選出的是數據暫存器單元,其實這里就是8個并聯的D觸發器,這8個D觸發器的輸出分別和其對應的前級移位寄存器輸出端相連,在每個RCK上升沿到來時就將數據鎖存住。
圖中黃色框選出的是輸出門控電路,這是8個三態門組成的電路,當G非為低電平時,三態門被開啟,輸出有效,反之芯片輸出為高阻狀態。
?
最后一個Q’H引腳,是將串行數據輸出的,比如當SCK第8個脈沖到來時,8個移位寄存器正好可以存儲一個字節的數據,但是當第9個脈沖到來時,最先來的那個SER上的數據會被最晚到來的第9個脈沖頂出來,頂出來的那一位數據就會出現在Q’H引腳上面,這個引腳的主要目的是用來做74HC595芯片擴展的。
?
接著來討論單片機輸入口的擴展方案。單片機輸入口擴展需要利用并行數據轉串行數據的移位寄存器芯片,最常用的芯片是74HC165。
74HC165是8位并行讀取或串行輸入移位寄存器,可在末級得到互補的串行輸出(Q7和!Q7),當異步并行讀取引腳(!PL)輸入為低時,從D0到D7口輸入的并行數據將被讀取進寄存器內。而當異步并行讀取引腳為高時,數據將在每個時鐘脈沖的上升沿從 引腳串行進入寄存器并將現有數據右移一位( 以此類推)。利用這種特性,只要把Q7輸出綁定到下一級的輸入,即可實現移位寄存器位數的擴展。
74HC165的時鐘輸入是一個“門控與”結構,CP(時鐘脈沖)和CE(時鐘允許)共同產生有效時鐘輸入。只有在CE(時鐘允許)為低時,CP(時鐘脈沖)才有效。
應當注意的是,在PL上升沿到來前,CP或者CE必須置高,以防止數據在PL的狀態尚未穩定時發生移位。
以上就是關于移位寄存器用來擴展單片機IO口的,但是移位寄存器擴展出來的單片機IO口只能用作一些低速設備的驅動擴展,如按鍵,LED等,無法去驅動一些高速的設備,因為串行數據轉并行數據都是通過循環一位一位地移出來的,因此速度都是有限的。
專用IO擴展芯片
專用的IO擴展芯片很多,這里以NXP的PCF8574為例。
PCF8574是一種硅CMOS電路。它通過雙線雙向總線(I2C)為大多數微控制器系列提供通用遠程I/O擴展。
該器件由8位準雙向端口和I2C總線接口組成。PCF8574具有低電流消耗,包括鎖存輸出,具有高電流驅動能力,可直接驅動LED。它還具有中斷線(INT),可以連接到微控制器的中斷邏輯。通過在這條線上發送一個中斷信號,遠程I/O可以通知微控制器其端口上是否有傳入數據,而無需通過I2C總線進行通信。這意味著PCF8574仍然是一個簡單的從設備。PCF8674具有以下特性:
工作電源電壓2.5至6 V
待機電流消耗低,最大10A
I2C到并行端口擴展器
漏極開路中斷輸出
I2C總線的8位并行I/O端口
兼容大多數微控制器
鎖定輸出,具有高電流驅動能力,可直接驅動LED
通過3個硬件地址引腳尋址,最多可使用8個設備(PCF8574A最多可使用16個)
DIP16或節省空間的SO16或SSOP20封裝。
說到專用的IO擴展芯片,其大致功能和移位寄存器相似,細節上還是有很多不同,當然專用的IO擴展芯片功能更加強大,比如PCF8574的IO口能同時支持輸入輸出功能。這些細致的功能用起來雖然更加順手,方便,但是跟其昂貴的售價比起來,這些功能顯然性價比太低。
以上就是兩種單片機IO口擴展的方案,孰優孰劣,一目了然。
評論
查看更多