前兩天,開(kāi)始我們樂(lè)創(chuàng)客第一塊開(kāi)發(fā)板的設(shè)計(jì),當(dāng)我在進(jìn)行電路設(shè)計(jì)時(shí),我發(fā)現(xiàn)一些電路設(shè)計(jì)軟件的使用,一些電路設(shè)計(jì)的方案,一些創(chuàng)新的想法,一些元器件的選型這些都是可以記錄成文,并且分享出來(lái)一起討論的。因此從本節(jié)文字開(kāi)始,正式開(kāi)啟電路【電路設(shè)計(jì)筆記】的更新。當(dāng)然,這里的部分電路是我用了非常多年的成熟電路,一些電路是我臨時(shí)創(chuàng)新想出的未經(jīng)過(guò)驗(yàn)證的電路,這些沒(méi)有被驗(yàn)證的電路我會(huì)指出來(lái),大家閱讀時(shí)如果發(fā)現(xiàn)有問(wèn)題也希望不吝指出。
世界上最尷尬的事情是什么?這個(gè)我真不知道。但是做電子系統(tǒng)時(shí)最尷尬的事莫過(guò)于想要增加一個(gè)新的功能卻發(fā)現(xiàn)單片機(jī)的引腳不夠。
在我們?nèi)粘5碾娐吩O(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ù)鎖存住。
圖中黃色框選出的是輸出門(mén)控電路,這是 8 個(gè)三態(tài)門(mén)組成的電路,當(dāng) G 非為低電平時(shí),三態(tài)門(mén)被開(kā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ù)?9 個(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ù)右移一位( 以此類(lèi)推)。利用這種特性,只要把 Q7 輸出綁定到下一級(jí)的輸入,即可實(shí)現(xiàn)移位寄存器位數(shù)的擴(kuò)展。
74HC165 的時(shí)鐘輸入是一個(gè)“門(mén)控與”結(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)的,因此速度都是有限的。
專(zhuān)用 IO 擴(kuò)展芯片
專(zhuān)用的 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ī)電流消耗低,最大 10µA
•I2C 到并行端口擴(kuò)展器
•漏極開(kāi)路中斷輸出
•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ō)到專(zhuān)用的 IO 擴(kuò)展芯片,其大致功能和移位寄存器相似,細(xì)節(jié)上還是有很多不同,當(dāng)然專(zhuān)用的 IO 擴(kuò)展芯片功能更加強(qiáng)大,比如 PCF8574 的 IO 口能同時(shí)支持輸入輸出功能。這些細(xì)致的功能用起來(lái)雖然更加順手,方便,但是跟其昂貴的售價(jià)比起來(lái),這些功能顯然性價(jià)比太低。
以上就是兩種單片機(jī) IO 口擴(kuò)展的方案,孰優(yōu)孰劣,一目了然。