曹鳳蓮,李 磊,周 平
(淮陰師范學(xué)院物理與電子電氣工程學(xué)院,江蘇 淮安 223300)
可編程控制器(PLC)具有結(jié)構(gòu)簡(jiǎn)單、編程方便、性能優(yōu)異和應(yīng)用方便等特點(diǎn),尤其近年來通用開發(fā)平臺(tái)與軟系統(tǒng)的開發(fā),使得PLC成為當(dāng)今用途最為廣泛的工業(yè)控制器,但是隨著應(yīng)用復(fù)雜度的提高,PLC的應(yīng)用瓶頸也開始顯示出來,如EC10系列PLC主模塊輸入點(diǎn)數(shù)的范圍是16點(diǎn)到60點(diǎn)。主模塊以TMS470R1A288為控制核心,該芯片雖然有豐富的輸入點(diǎn)數(shù)資源,但是一部分輸入接口復(fù)用于控制和通訊功能之后,留作輸入點(diǎn)數(shù)的只有30點(diǎn)左右,對(duì)于大于30點(diǎn)的模塊必須考慮輸入點(diǎn)數(shù)的擴(kuò)展。在文獻(xiàn)[3]、[4]中,這樣復(fù)雜的控制采用多級(jí)PLC控制,將使整個(gè)控制系統(tǒng)復(fù)雜而不穩(wěn)定。如果在PLC主模塊中增加I/O端口數(shù),將會(huì)減少使用PLC的級(jí)數(shù),從而降低系統(tǒng)的復(fù)雜度。
本文提出了一種通過MCU的SPI總線與移位寄存器相結(jié)合擴(kuò)展16路輸入的設(shè)計(jì)方法。SPI總線模塊工作在Master方式下,向HC165提供同步時(shí)鐘輸入。在EC10系列主模塊中TMS470R1A288的SPI1用于主模塊與擴(kuò)展模塊I/O之間的通訊,SPI2用來擴(kuò)展主模塊本機(jī)的I/O點(diǎn)數(shù)。SPI的信號(hào)線SPI2SOMI(主入從出)用于擴(kuò)展輸入點(diǎn)數(shù),連接HC165的串行輸出端。
SPI總線用于微處理器與外設(shè)或其它處理器之間的高速通訊,它的時(shí)鐘速度、數(shù)據(jù)位長(zhǎng)度、時(shí)鐘模式可以靈活控制,實(shí)質(zhì)上是一個(gè)長(zhǎng)度可編程的移位寄存器。SPI總線具有同步串行輸入和輸出接口,串行數(shù)據(jù)流在同步時(shí)鐘的作用下移入或移出設(shè)備,且數(shù)據(jù)位數(shù)和同步時(shí)鐘速率是可編程的。
SPI總線以主從模式工作,其接口的結(jié)構(gòu)見參考文獻(xiàn)[5],其中,主入從出(SOMI)用于數(shù)據(jù)輸入,主出從入(MOSI)用于數(shù)據(jù)輸出,還有控制時(shí)鐘端(SPICLK)和片選端(NSS)。根據(jù)SPI時(shí)鐘的相位和極性的不同組合,SPI模塊有四種時(shí)鐘模式。CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平??赏ㄟ^配置時(shí)鐘相位(CPHA)來選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)據(jù)傳輸。如果 CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降),數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降),數(shù)據(jù)被采樣。
根據(jù)SPI時(shí)鐘的相位和極性的不同組合,TMS470R1A288的SPI模塊有四種時(shí)鐘模式,這樣可以適應(yīng)不同的外部設(shè)備。HC165是由D觸發(fā)器構(gòu)成的寄存器,狀態(tài)的變化都是發(fā)生在時(shí)鐘脈沖的上升沿。根據(jù)HC165的時(shí)序特點(diǎn),設(shè)計(jì)中選用SPI的時(shí)鐘模式0,其時(shí)序圖如圖1所示。
圖1 SPI時(shí)鐘模式0的時(shí)序
從圖1中可以看出,SPICLK的初始狀態(tài)應(yīng)該為低電平,SPISIMO的數(shù)據(jù)在時(shí)鐘的上升沿輸出,而SPISOMI的數(shù)據(jù)在時(shí)鐘的下降沿被SPI模塊采樣鎖存。
74HC165是8位并行讀取或串行輸入移位寄存器,方便多片級(jí)聯(lián)和與SPI總線相連接。結(jié)合SPI總線的特點(diǎn),因此選擇74HC165來擴(kuò)展嵌入式智能PLC的輸入點(diǎn)數(shù)。74HC165狀態(tài)的變化都是發(fā)生在時(shí)鐘脈沖的上升沿,根據(jù)其時(shí)序特點(diǎn)及SPI時(shí)序特點(diǎn),設(shè)計(jì)中選擇SPI時(shí)鐘模式0,即SPI總線模塊工作在Master方式下。
HC165擴(kuò)展16路輸入的原理如圖2所示,兩片HC165為級(jí)聯(lián)的關(guān)系,U1的串行輸出端QH連接到U2的串行輸入端SER,而U2的串行輸出端QH連接到TMS470R1A288的SPI總線SPI2SOMI。兩片HC165的時(shí)鐘輸入端同時(shí)接到SPI的時(shí)鐘信號(hào)SPI2CLK。TMS470R1A288的另外一個(gè)控制信號(hào)為UDTX,同時(shí)連接到U1和U2的并行信號(hào)裝入端SH_LD。UDTX上的濾波電容C1需要根據(jù)信號(hào)的實(shí)際應(yīng)用速率來選取。
當(dāng)SH_LD為低電平時(shí),HC165會(huì)裝入并行輸入信號(hào),所以在UDTX上加上拉電阻R1使CPU在不發(fā)出裝入信號(hào)時(shí)SH_LD保持高電平。另外,在SPI2CLK端加下拉電阻R2,保證在CPU上電初始化時(shí),SPI的時(shí)鐘信號(hào)處于一個(gè)固定的狀態(tài),不至于是不確定的雜亂信號(hào);同時(shí)要滿足本設(shè)計(jì)中選取的SPI時(shí)鐘模式的要求,SPI2CLK在初始狀態(tài)時(shí)必須處于低電平。
從HC165的時(shí)序圖可以看出,8位并行輸入數(shù)據(jù)裝入移位寄存器后,最高位H直接輸出到了串行輸出端QH,當(dāng)?shù)谝粋€(gè)移位時(shí)鐘脈沖SPI2CLK的上升沿到來時(shí),HC165的最高位H將從QH丟失,第七位輸入G(LX17)的狀態(tài)將會(huì)出現(xiàn)在QH。而且,SPI對(duì)SPI2SOMI的數(shù)據(jù)是在移位時(shí)鐘脈沖SPI2CLK的下降沿被采樣并鎖存的。如果8位輸入信號(hào)對(duì)應(yīng)的接到HC165的輸入端A~H的話,將會(huì)造成輸入數(shù)據(jù)的最高位丟失。因此,U2的并行輸入最高位H管腳接地,而8位并行輸入的最低位LX10接到了下一級(jí)芯片U1的最高位H。圖2中的這種設(shè)計(jì)可以使SPI采樣到的第一個(gè)數(shù)據(jù)是LX17,而第八個(gè)數(shù)據(jù)是LX10。
圖2 SPI輸入擴(kuò)展電路
SPI在同步時(shí)鐘的作用下讀入外部數(shù)據(jù)時(shí),數(shù)據(jù)的第一位(HC165的第七位G)首先移入接收寄存器SPI2DAT0的最低位,然后依次向最高位移位,也就是說首先移入的數(shù)據(jù)位最終是SPI讀入數(shù)據(jù)的最高位,這就決定了外部擴(kuò)展輸入LX10~LX17和LX20~LX27在HC165上的排列順序。為了方便,在程序中將LX10~LX17作為一個(gè)字節(jié)處理,那么在HC165的接線上應(yīng)該從LX17~LX10由高到低排列。
I/O電壓為3.3V,因此設(shè)計(jì)電路中電源采用3.3V直流電,考慮系統(tǒng)外引線對(duì) PLC的干擾,LX10~LX17和LX20~LX27接經(jīng)過光耦隔離和門電路整形后的輸入信號(hào),而且電路中使用很多濾波電容,以降低擴(kuò)展電路對(duì)PLC主模塊的干擾。
硬件系統(tǒng)設(shè)計(jì)完成后,通過軟件編程進(jìn)行調(diào)試。TMS470R1A288的SPI模塊數(shù)據(jù)的接收是通過寄存器SPI2DAT0實(shí)現(xiàn)的。SPI工作于主模式時(shí)的讀過程如下:
需要接收的數(shù)據(jù)從 SPI2SOMI端口移入SPI2DAT0的最低位。在設(shè)定的數(shù)據(jù)位數(shù)發(fā)送完成后,接收到的數(shù)據(jù)自動(dòng)從 SPI2DAT0拷貝到SPI2BUF,讀寄存器SPI2BUF就可以接收到數(shù)據(jù)。
輸入擴(kuò)展的主函數(shù)為Unsigned char ReadX(unsigned char*inputArray,unsigned char input-Num),*inputArray為接收到的輸入量,inputNum為輸出量的個(gè)數(shù)。接收的數(shù)據(jù)從SPI2SOMI端口移入SPI2DAT0的最低位,設(shè)置UDTX=1,讀輸入數(shù)據(jù),當(dāng)SPI2中斷或讀數(shù)讀完,運(yùn)行結(jié)束,具體程序如下:
在程序中首先要完成SPI2的初始化,如下所示:
讀擴(kuò)展輸入數(shù)據(jù)的函數(shù)如下:
通過初始化及控制輸入擴(kuò)展主函數(shù)Unsigned char ReadX(unsigned char*inputArray,unsigned char inputNum)實(shí)現(xiàn)了SPI在時(shí)鐘模式0條件下,時(shí)鐘速率100K、數(shù)據(jù)長(zhǎng)度8位、串行16位的擴(kuò)展輸入。
利用SPI總線時(shí)鐘速度、數(shù)據(jù)位長(zhǎng)度、時(shí)鐘模式可以靈活控制,且具有同步串行輸入、輸出接口,以及數(shù)據(jù)位數(shù)和同步時(shí)鐘速率可編程等優(yōu)勢(shì),提出了SPI總線與移位寄存器74HC165相結(jié)合擴(kuò)展PLC主模塊輸入點(diǎn)數(shù)的設(shè)計(jì)方法,電路設(shè)計(jì)簡(jiǎn)單,成本較低,而且輸入擴(kuò)展是一個(gè)獨(dú)立的模塊,應(yīng)用起來比較方便,這種設(shè)計(jì)方案可以廣泛地應(yīng)用到PLC上。
[1]吳寧,葛芬.可編程邏輯控制器通用開發(fā)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].儀器儀表學(xué)報(bào),2007,28(8):1486-1491.
[2]吳玉香,周東霞,林錦赟.嵌入式軟PLC系統(tǒng)的研究和實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2009,35(10):235-237.
[3]張園園,龔慶武.基于IEC61850的數(shù)字化變電站開裝設(shè)備接口裝置[J].電力自動(dòng)化設(shè)備,2009,29(1):108-111.
[4]王健強(qiáng),王長(zhǎng)潤(rùn),孫純哲,等.多PLC及多級(jí)現(xiàn)場(chǎng)總線在機(jī)器人焊裝線中的應(yīng)用[J].上海交通大學(xué)學(xué)報(bào),2008,42(增刊):20-24.
[5]胡小喬,薛敏彪,王健.基于i.MX27處理器的串行SPI接口設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2011,19(2):442-444.
[6]Andrew Sloss,Dominic Symes,Chris Wright,etal.ARM System Developer's Guide:Designing and Optimizing System Software[M].Leiden:Elsevier,2003.