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