基于I2C總線的I/O口擴展設(shè)計
摘要:由于傳統(tǒng)的NI-DIO驅(qū)動板卡能夠驅(qū)動的I/O口數(shù)量比較有限,一般只應(yīng)用在測試通道數(shù)比較少的實驗場合。而在一般的大型環(huán)境試驗中,要求能對多個產(chǎn)品同時測量。如果使用傳統(tǒng)的DIO板卡測試,就會出現(xiàn)測量通道數(shù)量不夠的情況。針對此類問題,提出了運用單片機與I/O擴展芯片PCA9554/A采用I2C通信進行I/O擴展,上位機采用LabVIEW編程,界面友好、操作方便,在環(huán)境實驗中起到了良好效果。
關(guān)鍵詞:I/O口;MCU;PCA9554/A;LabVIEW
0 引言
隨著電子技術(shù)的飛速發(fā)展,各類電子產(chǎn)品像雨后春筍般大量的進軍電子市場,其中也包括正在蓬勃發(fā)展的汽車電子行業(yè)。一般汽車電子行業(yè)對這些電子產(chǎn)品的要求比較高,會有很多的技術(shù)指標(biāo)去規(guī)范它們,其中很重要的一環(huán)便是環(huán)境實驗。出于對工作效率的考慮,一個環(huán)境測試臺架往往要求能對多個產(chǎn)品進行同時測試。而這些產(chǎn)品的引腳數(shù)量一般也會比較多,這樣一來,測試臺架上所需的測試通道數(shù)量就會很多,往往多達幾百個。
一般多數(shù)用于汽車電子產(chǎn)品的環(huán)境測試臺架里面會集成有NI公司的DIO驅(qū)動板卡,由于它們的驅(qū)動端口比較多,便專用來負(fù)責(zé)產(chǎn)品的環(huá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)境實驗要同時測試12個產(chǎn)品,每個產(chǎn)品有40個引腳,那么對于產(chǎn)品引腳繼電器就必須要有480個,再加上一些外圍輔助儀器介入的切換,那么在這種情況下,這類DIO板卡的應(yīng)用就顯得很勉強。
針對此類問題,本文提出了一種有效的解決方法,便是應(yīng)用單片機的I/O口配合市面上一些常見的I/O擴展芯片,進行端口的擴展。單片機有4個端口,每個端口8位,總計32個位控制;擴展芯片,比如I2C芯片,只需要2根線(SDA&SCL)即可,因此可以連16組I2C通信,且每組可同時支持8個芯片(每組最大可容納8個地址),每個芯片又可控制8個端口。因此,單片機理論上,至少可支持16×8×8個端口。并且,如果芯片頭地址可以不一樣的話,例如PCA9554和PCA9554A,那么端口數(shù)量又可以增加一倍,達到2 048個,這是一般的板卡所遠(yuǎn)遠(yuǎn)不能及的。
1 系統(tǒng)硬件設(shè)計
本文所涉及到的硬件比較簡單,上位機與MCU之間通過RS 232串口連接,MCU靠外部電源提供的5 V直流電進行工作。再將MCU的2個端口模擬成SCL,SDA兩根線與PCA9554/A進行通信連接。這樣就形成了上位機發(fā)送指令,單片機接受指令并進行相應(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)來實現(xiàn)不同的I2C地址,最多允許8個器件共用一個I2C總線上。PCA9554與PCA554A的惟一區(qū)別在于I2C地址不同,這樣最多允許16個器件(9554和9554A各8個)連接接到同一個I2C總線上。
1.2 基于PCA9554/A的硬件設(shè)計
按I2C規(guī)約,PCA9554的器件地址為0x40,PCA9554A的器件地址為0x70,當(dāng)然,由于硬件地址引腳A0~A2可尋址8個器件,所以器件地址并不惟一,例如:A0接GND,A1接VCC,則PCA9554的器件地址為0x4C。使用STC89C52單片機為主控芯片,單片機的P1.3管腳與PCA9554的SDA管腳相連,P1.2管腳與PCA9554的SCL管腳相連。4個LED燈可以受四個按鍵控制,也可以受上位機進行控制。
2 系統(tǒng)軟件設(shè)計
本文系統(tǒng)軟件設(shè)計主要分為兩部分,一個是上位機的LabVIEW程序設(shè)計;另一個則是單片機底層C語言的程序設(shè)計。
2.1 LabVIEW的程序設(shè)計
上位機的程序設(shè)計主要是與MCU串口通信,通過向MCU發(fā)送控制命令來達到對PCA9554/A的I/O口進行控制的目的。
LabVIEW是一種圖形化編程語言,由美國國家儀器(NI)公司研制開發(fā)的,類似于C和BASIC開發(fā)環(huán)境。使用這種語言編程時,基本上不寫程序代碼,取而代之的是流程圖。使用它進行原理研究、設(shè)計、測試并實現(xiàn)儀器系統(tǒng)時,可以大大提高工作效率。
本文主要是用LabVIEW語言編寫與MCU的串口通信程序,界面友好、操作方便。LabVIEW控制單片機是通過Instrument I/O的Serial控件調(diào)用來實現(xiàn)的。主要用到其中的VISA配置串口節(jié)點,包括串口配置、讀、寫、關(guān)閉等節(jié)點。通過對這些節(jié)點的調(diào)用就可以方便的對串口進行操作。
這里,Command to RS 232欄中的指令必須與單片機事先燒錄好的代碼相符合。這樣,單片機才能將接收到的指令進行正確匹配,并執(zhí)行相應(yīng)操作。
程序左端調(diào)用Configuration模塊,進行串口的基本配置,比如BaudRate、數(shù)據(jù)位等,使這些參數(shù)與單片機里面的串口預(yù)定義設(shè)置相一致;右側(cè)是Close模塊,用于程序退出時,釋放對串口的控制;中間是程序主體,包含對串口的讀、寫操作,實現(xiàn)對串口的雙向通信。為了程序簡潔、形象易懂,此次程序中用到了對LabVIEW子函數(shù)的調(diào)用,如RS 232-ini,RS 232W-R等模塊,這些子函數(shù)就是用VISA串口節(jié)點來編寫的,只是做了封裝而已。
2.2 MCU的串口通信
上位機是通過串口將指令字符傳遞給單片機的。單片機對串口的讀操作是通過中斷的方式實現(xiàn)的,以字符為單位,每接收到一個8位的字符,MCU產(chǎn)生一個讀中斷RI=1,此時,單片機將接收到的字符儲存起來,然后軟件將RI復(fù)位置0,繼續(xù)接收下一個字符。本系統(tǒng)中,所有計算機發(fā)送給單片機的指令均以‘?’結(jié)尾。MCU接收到‘?’后,產(chǎn)生一個終止位,然后與事先定義好的指令進行匹配,如果指令事先有定義,那么就會執(zhí)行相應(yīng)的操作。
2.3 MCU的I2C時序模擬
上位機向單片機發(fā)送指令數(shù)據(jù),如果這些指令已在單片機中事先定義好,那么單片機將會通過模擬的SDA與SCL兩個引腳,根據(jù)PCA9554/A的datasheet時序圖,將控制命令數(shù)據(jù)傳遞給PCA9554/A,從而實現(xiàn)對PCA9554/A的I/O口進行控制。
2.3.1 PCA9554/A的寫操作
根據(jù)I2C總線傳輸協(xié)議以及PCA9554/A的總線讀寫特性,可以看出:對PCA9554/A端口的寫操作主要是通過對它的輸出端口寄存器進行寫操作的。具體過程為:在SCL為高電平期間,SDA由高電平向低電平轉(zhuǎn)換作為起始信號,SDA由低電平向高電平轉(zhuǎn)化則為停止信號。在起始條件后,必須是從機地址,對于PCA9554來說從地址的高4位是0100,而PCA9554A則是0111,A2,A1,A0的高低電平狀態(tài)可以有8種組合,最后一位是讀寫選擇位。從地址發(fā)送完后便是等待從機的應(yīng)答信號ACK,從機正確應(yīng)答后便開始由主機發(fā)送命令字節(jié),接著又是等待從機應(yīng)答,應(yīng)答后便開始發(fā)送數(shù)據(jù)了。以下為PCA9554的寫操作部分代碼。
2.3.2 PCA9554/A的讀操作
對PCA9554/A的讀操作稍微麻煩一點,需要在收到第二次從機應(yīng)答信號后再一次發(fā)送總線起始信號及從機地址即可。
由于篇幅原因,以上均只給出了部分重要程序。需要提出的是I2C總線上的起始、停止、以及讀寫數(shù)據(jù)的時序模擬均要參考PCA9554/A的datasheet中的時間參數(shù)要求,嚴(yán)格對應(yīng)。
3 結(jié)語
本文運用單片機與I/O擴展芯片PCA9554/A采用I2C通信進行I/O擴展,提出了具體的軟硬件設(shè)計,完成了上位機對PCA9554/A端口的直接控制,并進行了I/O的有效擴展。并成功的應(yīng)用在對多個汽車電子產(chǎn)品同時測量的環(huán)境試驗中,取得了很好的效果。
評論