新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于I2C總線的I/O口擴(kuò)展設(shè)計

基于I2C總線的I/O口擴(kuò)展設(shè)計

作者: 時間:2012-07-17 來源:網(wǎng)絡(luò) 收藏

摘要:由于傳統(tǒng)的NI-DIO驅(qū)動板卡能夠驅(qū)動的I/O口數(shù)量比較有限,一般只應(yīng)用在測試通道數(shù)比較少的實(shí)驗(yàn)場合。而在一般的大型環(huán)境試驗(yàn)中,要求能對多個產(chǎn)品同時測量。如果使用傳統(tǒng)的DIO板卡測試,就會出現(xiàn)測量通道數(shù)量不夠的情況。針對此類問題,提出了運(yùn)用單片機(jī)與I/O芯片PCA9554/A采用通信進(jìn)行I/O,上位機(jī)采用LabVIEW編程,界面友好、操作方便,在環(huán)境實(shí)驗(yàn)中起到了良好效果。
關(guān)鍵詞:I/O口;MCU;PCA9554/A;LabVIEW

0 引言
隨著電子技術(shù)的飛速發(fā)展,各類電子產(chǎn)品像雨后春筍般大量的進(jìn)軍電子市場,其中也包括正在蓬勃發(fā)展的汽車電子行業(yè)。一般汽車電子行業(yè)對這些電子產(chǎn)品的要求比較高,會有很多的技術(shù)指標(biāo)去規(guī)范它們,其中很重要的一環(huán)便是環(huán)境實(shí)驗(yàn)。出于對工作效率的考慮,一個環(huán)境測試臺架往往要求能對多個產(chǎn)品進(jìn)行同時測試。而這些產(chǎn)品的引腳數(shù)量一般也會比較多,這樣一來,測試臺架上所需的測試通道數(shù)量就會很多,往往多達(dá)幾百個。
一般多數(shù)用于汽車電子產(chǎn)品的環(huán)境測試臺架里面會集成有NI公司的DIO驅(qū)動板卡,由于它們的驅(qū)動端口比較多,便專用來負(fù)責(zé)產(chǎn)品的環(huán)境實(shí)驗(yàn)測試。以NI-6509為例,這是一個12×8的板卡,總共有12個通道,每通道8位I/O控制組成,總計96路I/O控制;NI-2532的矩陣板卡,其能支持的通道數(shù)是32×16,共512路。這些I/O端口,針對一般的應(yīng)用是夠的,但如果用于引腳數(shù)量比較多的產(chǎn)品測試,便會出現(xiàn)I/O口數(shù)
量不夠用的局面。假如環(huán)境實(shí)驗(yàn)要同時測試12個產(chǎn)品,每個產(chǎn)品有40個引腳,那么對于產(chǎn)品引腳繼電器就必須要有480個,再加上一些外圍輔助儀器介入的切換,那么在這種情況下,這類DIO板卡的應(yīng)用就顯得很勉強(qiáng)。
針對此類問題,本文提出了一種有效的解決方法,便是應(yīng)用單片機(jī)的I/O口配合市面上一些常見的I/O芯片,進(jìn)行端口的擴(kuò)展。單片機(jī)有4個端口,每個端口8位,總計32個位控制;擴(kuò)展芯片,比如芯片,只需要2根線(SDA&SCL)即可,因此可以連16組通信,且每組可同時支持8個芯片(每組最大可容納8個地址),每個芯片又可控制8個端口。因此,單片機(jī)理論上,至少可支持16×8×8個端口。并且,如果芯片頭地址可以不一樣的話,例如PCA9554和PCA9554A,那么端口數(shù)量又可以增加一倍,達(dá)到2 048個,這是一般的板卡所遠(yuǎn)遠(yuǎn)不能及的。

1 系統(tǒng)硬件
本文所涉及到的硬件比較簡單,上位機(jī)與MCU之間通過RS 232串口連接,MCU靠外部電源提供的5 V直流電進(jìn)行工作。再將MCU的2個端口模擬成SCL,SDA兩根線與PCA9554/A進(jìn)行通信連接。這樣就形成了上位機(jī)發(fā)送指令,單片機(jī)接受指令并進(jìn)行相應(yīng)解析后再通過SDA、SCL兩根線向PCA9554/A發(fā)送命令數(shù)據(jù),控制它的輸入與輸出。
1.1 PCA9554/A芯片介紹
PCA9554和PCA9554A是16腳的CMOS器件,它們提供了I2C的應(yīng)用中的8位通用并行輸入/輸出口(GPIO),PCA9554/54A包含一個8位配置寄存器(輸入或輸出選擇)、8位輸入寄存器、8位輸出寄存器和一個極性反轉(zhuǎn)(高電平或低電平操作有效)寄存器。系統(tǒng)主控制器通過寫I/O口相應(yīng)的配置位來激活端口的輸入或輸出。PCA9554/A有3個硬件管腳(A0,A1,A2)來實(shí)現(xiàn)不同的I2C地址,最多允許8個器件共用一個I2C上。PCA9554與PCA554A的惟一區(qū)別在于I2C地址不同,這樣最多允許16個器件(9554和9554A各8個)連接接到同一個I2C上。
1.2 PCA9554/A的硬件
按I2C規(guī)約,PCA9554的器件地址為0x40,PCA9554A的器件地址為0x70,當(dāng)然,由于硬件地址引腳A0~A2可尋址8個器件,所以器件地址并不惟一,例如:A0接GND,A1接VCC,則PCA9554的器件地址為0x4C。使用STC89C52單片機(jī)為主控芯片,單片機(jī)的P1.3管腳與PCA9554的SDA管腳相連,P1.2管腳與PCA9554的SCL管腳相連。4個LED燈可以受四個按鍵控制,也可以受上位機(jī)進(jìn)行控制。

本文引用地址:http://m.butianyuan.cn/article/171158.htm


2 系統(tǒng)軟件
本文系統(tǒng)軟件設(shè)計主要分為兩部分,一個是上位機(jī)的LabVIEW程序設(shè)計;另一個則是單片機(jī)底層C語言的程序設(shè)計。
2.1 LabVIEW的程序設(shè)計
上位機(jī)的程序設(shè)計主要是與MCU串口通信,通過向MCU發(fā)送控制命令來達(dá)到對PCA9554/A的I/O口進(jìn)行控制的目的。
LabVIEW是一種圖形化編程語言,由美國國家儀器(NI)公司研制開發(fā)的,類似于C和BASIC開發(fā)環(huán)境。使用這種語言編程時,基本上不寫程序代碼,取而代之的是流程圖。使用它進(jìn)行原理研究、設(shè)計、測試并實(shí)現(xiàn)儀器系統(tǒng)時,可以大大提高工作效率。
本文主要是用LabVIEW語言編寫與MCU的串口通信程序,界面友好、操作方便。LabVIEW控制單片機(jī)是通過Instrument I/O的Serial控件調(diào)用來實(shí)現(xiàn)的。主要用到其中的VISA配置串口節(jié)點(diǎn),包括串口配置、讀、寫、關(guān)閉等節(jié)點(diǎn)。通過對這些節(jié)點(diǎn)的調(diào)用就可以方便的對串口進(jìn)行操作。
這里,Command to RS 232欄中的指令必須與單片機(jī)事先燒錄好的代碼相符合。這樣,單片機(jī)才能將接收到的指令進(jìn)行正確匹配,并執(zhí)行相應(yīng)操作。
程序左端調(diào)用Configuration模塊,進(jìn)行串口的基本配置,比如BaudRate、數(shù)據(jù)位等,使這些參數(shù)與單片機(jī)里面的串口預(yù)定義設(shè)置相一致;右側(cè)是Close模塊,用于程序退出時,釋放對串口的控制;中間是程序主體,包含對串口的讀、寫操作,實(shí)現(xiàn)對串口的雙向通信。為了程序簡潔、形象易懂,此次程序中用到了對LabVIEW子函數(shù)的調(diào)用,如RS 232-ini,RS 232W-R等模塊,這些子函數(shù)就是用VISA串口節(jié)點(diǎn)來編寫的,只是做了封裝而已。
2.2 MCU的串口通信
上位機(jī)是通過串口將指令字符傳遞給單片機(jī)的。單片機(jī)對串口的讀操作是通過中斷的方式實(shí)現(xiàn)的,以字符為單位,每接收到一個8位的字符,MCU產(chǎn)生一個讀中斷RI=1,此時,單片機(jī)將接收到的字符儲存起來,然后軟件將RI復(fù)位置0,繼續(xù)接收下一個字符。本系統(tǒng)中,所有計算機(jī)發(fā)送給單片機(jī)的指令均以‘?’結(jié)尾。MCU接收到‘?’后,產(chǎn)生一個終止位,然后與事先定義好的指令進(jìn)行匹配,如果指令事先有定義,那么就會執(zhí)行相應(yīng)的操作。

2.3 MCU的I2C時序模擬
上位機(jī)向單片機(jī)發(fā)送指令數(shù)據(jù),如果這些指令已在單片機(jī)中事先定義好,那么單片機(jī)將會通過模擬的SDA與SCL兩個引腳,根據(jù)PCA9554/A的datasheet時序圖,將控制命令數(shù)據(jù)傳遞給PCA9554/A,從而實(shí)現(xiàn)對PCA9554/A的I/O口進(jìn)行控制。
2.3.1 PCA9554/A的寫操作
根據(jù)I2C傳輸協(xié)議以及PCA9554/A的總線讀寫特性,可以看出:對PCA9554/A端口的寫操作主要是通過對它的輸出端口寄存器進(jìn)行寫操作的。具體過程為:在SCL為高電平期間,SDA由高電平向低電平轉(zhuǎn)換作為起始信號,SDA由低電平向高電平轉(zhuǎn)化則為停止信號。在起始條件后,必須是從機(jī)地址,對于PCA9554來說從地址的高4位是0100,而PCA9554A則是0111,A2,A1,A0的高低電平狀態(tài)可以有8種組合,最后一位是讀寫選擇位。從地址發(fā)送完后便是等待從機(jī)的應(yīng)答信號ACK,從機(jī)正確應(yīng)答后便開始由主機(jī)發(fā)送命令字節(jié),接著又是等待從機(jī)應(yīng)答,應(yīng)答后便開始發(fā)送數(shù)據(jù)了。以下為PCA9554的寫操作部分代碼。

2.3.2 PCA9554/A的讀操作
對PCA9554/A的讀操作稍微麻煩一點(diǎn),需要在收到第二次從機(jī)應(yīng)答信號后再一次發(fā)送總線起始信號及從機(jī)地址即可。

由于篇幅原因,以上均只給出了部分重要程序。需要提出的是I2C總線上的起始、停止、以及讀寫數(shù)據(jù)的時序模擬均要參考PCA9554/A的datasheet中的時間參數(shù)要求,嚴(yán)格對應(yīng)。

3 結(jié)語
本文運(yùn)用單片機(jī)與I/O擴(kuò)展芯片PCA9554/A采用I2C通信進(jìn)行I/O擴(kuò)展,提出了具體的軟硬件設(shè)計,完成了上位機(jī)對PCA9554/A端口的直接控制,并進(jìn)行了I/O的有效擴(kuò)展。并成功的應(yīng)用在對多個汽車電子產(chǎn)品同時測量的環(huán)境試驗(yàn)中,取得了很好的效果。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉