嵌人式丁業(yè)控制系統的突出特點(diǎn)是在高低溫、高電磁輻射環(huán)境下的抗干擾性和可靠穩定性。和PLC系統相比。其明顯的優(yōu)點(diǎn)是處理速度快、方便進(jìn)行工業(yè)以太網(wǎng)的組建、編程方便、通用性好,而且價(jià)格僅僅是PLC的幾分之一,具有很好的發(fā)展前景。本論文主要論述了以EP9315和MAX2_EPM240為核心的嵌入式輸入輸出系統的設計。 1 系統構成 整個(gè)嵌入式輸入輸出系統分為嵌入式系統、應用模塊(即輸入輸出模塊)和轉換模塊三部分,總體結構如圖1所示。 ![]() 圖1系統結構框圖 1.1 嵌入式系統 本設計選擇Cirrus Logic公司高性能的ARM9嵌入式微處理器EP9315.該微處理器具有ARM920T內核所有的優(yōu)異性能。豐富的集成外設接口包括以太網(wǎng)MAC、串口,2.0全速HOST USB、專(zhuān)用SDRAM通道的LCD接口、觸摸屏接口等。 Cirrus logic公司為用戶(hù)提供了基于該處理器的全功能開(kāi)發(fā)板。配合Windows CE.net嵌入式操作系統,系統開(kāi)發(fā)效率高、運行穩定,為工業(yè)控制提供了可靠的系統平臺;诙ㄖ频腤inCE操作系統實(shí)現工業(yè)控制中應用模塊的專(zhuān)用驅動(dòng),提高嵌入式系統的通用性。 本文所述系統應用了開(kāi)發(fā)板豐富的集成外設接口。通過(guò)串口進(jìn)行eboot下載;通過(guò)以太網(wǎng)進(jìn)行操作系統內核和應用程序的下載,并實(shí)現以太網(wǎng)通信;HOST USB接鼠標方便用戶(hù)操作;LCD屏實(shí)現顯示,觸摸屏接口實(shí)現面板觸摸操作。 1.2轉換模塊的設計 轉換模塊用于將開(kāi)發(fā)板上需要用到的信號線(xiàn)引出,主要包括數據線(xiàn)、地址線(xiàn)和部分I/O控制信號(如nWR,nRD,NCS3,nWAIT等)。在轉換模塊中主要用到了電平轉換驅動(dòng)芯片74LVXC4245,其作用包括:(1)改善信號的質(zhì)量;(2)抗干擾;(3)實(shí)現電平轉換;(4)提高EP9315管腳的驅動(dòng)能力。 1.3基于CPLD的輸入輸出模塊的設計 1.3.1輸入輸出模塊的設計思想 在工業(yè)應用現場(chǎng),輸人/輸出模塊通常包括數字量輸入模塊、數字量輸出模塊、數字量輸入/輸出模塊、模擬量輸入模塊、模擬量輸出模塊、模擬量輸入/輸出模塊等。 考慮到不同應用系統復雜程度不同,因而對輸入輸出端口的需求也就不同。為了能根據實(shí)際需要靈活添加不同種類(lèi)的輸入輸出模塊,設計時(shí)采用了如下思想: ARM9的數據總線(xiàn)、地址總線(xiàn)和控制總線(xiàn)同時(shí)和多個(gè)插槽相連接,并且給每個(gè)插槽賦予一個(gè)固定的地址,稱(chēng)為插槽地址,各類(lèi)模塊可插入任何一個(gè)插槽。 各類(lèi)輸入/輸出模塊均基于CPLD進(jìn)行開(kāi)發(fā)設計[6],實(shí)現對外界系統的檢測與控制。但對于不同的輸入輸出應用系統而言,其輸入信號以及輸出信號特性各異,表現出復雜性。設計時(shí)必須考慮到上述復雜性,根據實(shí)際情況,對相應輸入輸出信號進(jìn)行信號調理。為了保證輸入輸出模塊和ARM9主控器連接的穩定性和快速性,采用了總線(xiàn)方式的擴展:將CPLD掛在A(yíng)RM9的BANK3空間,連接11根地址線(xiàn),16根數據線(xiàn),以及相應的控制線(xiàn)(包括nRD、nWR、nCS3、nWAIT)。各類(lèi)輸入/輸出模塊總體設計框圖可如圖2表示。 ![]() 圖2輸入輸出模塊結構框圖 信號條理電路的主要功能為:實(shí)現對各類(lèi)輸入信號的凋理,使之滿(mǎn)足CPLD輸入管腳的電氣要求;實(shí)現對CPLD輸出信號的調理,使之滿(mǎn)足應用系統的電氣要求。CPLD總線(xiàn)功能:通過(guò)各類(lèi)總線(xiàn)建立CPLD與ARM9之19的信號聯(lián)系,實(shí)現CPLD與ARM9之間的通信。 因各類(lèi)模塊可插入任何一個(gè)插槽,為了實(shí)現不同種類(lèi)的模塊的自動(dòng)識別,通過(guò)硬件設計語(yǔ)言賦予每類(lèi)模塊一個(gè)ID碼。ARM通過(guò)“讀ID碼地址”讀取ID碼,即可判斷是何種模塊。隨后即可根據模塊類(lèi)型實(shí)行對應的操作。 1.3.2 CPLD的選用端口數據。 Altera公司的MAXII器件采用了全新的CPLD結構,比以往的MAX器件具有更高的性?xún)r(jià)比、更低的功耗、更大的容量,使其成為復雜控制應用的理想方案?紤]到輸入輸出模塊的功能相對簡(jiǎn)單,不需要大量的復雜運算,本系統選用容量相對較小的EPM240進(jìn)行設計。 1.3.3 CPLD的軟件設計 為了通過(guò)ARM9的地址總線(xiàn)、數據總線(xiàn)和控制總線(xiàn)實(shí)現對輸入輸出模塊的讀寫(xiě)控制,必須根據ARM9的讀寫(xiě)時(shí)序圖對輸入輸出模塊的CPLD進(jìn)行硬件語(yǔ)言編程設計。 輸入模塊關(guān)鍵代碼如下: assign data_bus=((~(RDICS))&(address==baddr[10:5])&(haddr[4:0]==5'b00000))?16'b0000000011011111:16'bz; assign data_bus=((~(RDICS))&(address==baddr[10:5])&(baddr[4:0]==57b00100))?dc24v_in:16'bz; 程序中第一個(gè)assign語(yǔ)句功能:當地址總線(xiàn)的低五位為5'b00000,即為“讀模塊ID碼地址”,就向數據總線(xiàn)輸出該模塊的ID碼。 第二個(gè)assign語(yǔ)句功能:當地址總線(xiàn)的低五位為5"b00100,即為“讀模塊數據地址”,就將模塊輸入端口數據讀入數據總線(xiàn)。 輸入模塊Quatuttis II仿真結果如圖3所示。從圖中可以看出,當地址總線(xiàn)的低五位地址為5'b00100時(shí),模塊輸入端口數據(de24v_in)被讀入到數據總線(xiàn)(data_bus)。 ![]() 圖3輸入模塊仿真時(shí)序圖 同理,可進(jìn)行輸池模塊設計,關(guān)鍵代碼如下: always @ (posedge pro_clk) begin if((-WRITS))&(address==baddr [10:5])&(bad&[4:0]==5'00010))begin mem_data[ i ]=data_bus; i=i+1; if((mem data [0]==mem_data[1])&(mem_data[1]==mem_data[2])&(mem_data[2]== mem_data[3])) begin relay_reg = mem_data[0]; end end end assign relay = relay_reg; assign led = ~relay_reg; assign data_bus = ((~(RDICS))&(address==baddr[10:5])&(baddr[4:0]==5'b00000))?16'b0000000011011110:16'bz; 程序中alwavs語(yǔ)句功能:當地址總線(xiàn)的低五位為5'b00010,即為“寫(xiě)模塊數據地址”,就將數據總線(xiàn)數據寫(xiě)入到寄存器mem_data[]。為了增強抗干擾能力,程序中采取了連續讀取四次數據總線(xiàn)數據并判斷是否一致,若一致,才更新模塊輸出端口數據。 程序中第三個(gè)assign語(yǔ)句功能:當地址總線(xiàn)的低五位為5'b00000,即為“讀模塊ID碼地址”,就向數據總線(xiàn)輸出該模塊的ID碼。 輸出模塊Quarutu。II仿真結果如圖4所示。從圖中可以看出,當地址總線(xiàn)的低五位為5'b00100時(shí),數據總線(xiàn)(data_bus)被寫(xiě)入到模塊輸出端口(relay)。 ![]() 圖4輸出模塊仿真時(shí)序圖 2 系統軟件設計 2.1驅動(dòng)程序設計思想 輸入輸出模塊驅動(dòng)程序基于流接口驅動(dòng)程序類(lèi)型進(jìn)行設計。驅動(dòng)程序的設計一方面應根據實(shí)現功能考慮到物理地址的合理分配,另一方面應考慮到與應用程序的接口。下面就圍繞這兩個(gè)方面具體論述驅動(dòng)程序的設計思想。 2.1.1物理地址的合理分配 對輸入模塊,包含有如下兩種操作。(1)讀lD碼;(2)讀取輸入端口數據。對輸出模塊,包含有如下兩種操作。(1)讀ID碼;(2)寫(xiě)數據至輸出端口。 為了保證驅動(dòng)程序的通用行,即是說(shuō),對插入某個(gè)插槽的模塊,無(wú)論是是輸入模塊,還是輸出模塊,驅動(dòng)程序結構是一樣的?蓪γ總(gè)插槽分配三個(gè)物理地址,包括讀取ID碼地址(簡(jiǎn)稱(chēng)“ID地址”)、讀取輸人模塊數據地址(簡(jiǎn)稱(chēng)“讀地址”)、寫(xiě)數據至輸出模塊地址(簡(jiǎn)稱(chēng)“寫(xiě)地址”)。應用程序通過(guò)“ID地址”讀取的ID碼數據判斷模塊的類(lèi)型,進(jìn)而通過(guò)“讀地址”對輸入模塊進(jìn)行讀操作,或是通過(guò)“寫(xiě)地址”對輸出模塊進(jìn)行寫(xiě)操作。對輸入輸出模塊的讀寫(xiě)操作包含字操作、字節操作、位操作三種方式,可在驅動(dòng)程序中通過(guò)“與運算和移位運算”變換實(shí)現。對每一插槽,三個(gè)物理地址可如表1分配: 表1應用模塊物理地址分配 ![]() 在初始化函數(IO_Init)中,通過(guò)函數VirtualAlloc()和VirtualCopy()把EP9315針對輸入輸I葉J模塊的物理地址和操作系統的虛擬空間聯(lián)系起來(lái),實(shí)現地址映射。 2.1.2輸入輸出模塊讀寫(xiě)操作實(shí)現 操作輸入輸出模塊的應用程序流程可簡(jiǎn)述如下[3]:發(fā)送“讀模塊ID命令碼”->接收驅動(dòng)程序返回數據(即模塊ID碼)->根據模塊ID碼判斷模塊類(lèi)型(輸入模塊還是輸出模塊)->根據模塊具備功能發(fā)相關(guān)命令碼進(jìn)行模塊讀操作或寫(xiě)操作(包括字操作、字節操作和位操作三種情況)。 驅動(dòng)程序設計思路如下:在寫(xiě)函數(IO_WRITE)中實(shí)現功能為:接受命令碼,并將命令碼存入某指定變量一判斷命令碼是否是寫(xiě)命令碼一若是就執行寫(xiě)操作(包括字操作、字節操作和位操作三種情況)。在讀函數(IO_READ)中實(shí)現功能為:判斷命令碼是否是讀命令碼一若是就執行讀操作并返回讀取的數據(包括字操作、字節操作和位操作三種情況)。 2.1.3輸入輸出模塊讀寫(xiě)脈寬的調整 EP9315在WinCE操作系統下主頻達到200MHz,總線(xiàn)頻率為100MHz,外設時(shí)鐘為50MHz,因而,EP9315發(fā)出的讀寫(xiě)及使能信號脈寬不足50ns?梢酝ㄟ^(guò)改變EP9315的BANK3上的讀寫(xiě)時(shí)序.使其能和CPLD交互。具體可通過(guò)設置應用模塊地址空間存儲空問(wèn)讀寫(xiě)特性寄存器SMCBCR3中等待時(shí)間位WST1和WST2實(shí)現。 若SMCBCR3的代碼設置為:SMCBCR3=2000ffef實(shí)現功能為:設置nCS3數據寬度為32bits,讀寫(xiě)脈寬為320ns。這種設置使得CPLD擁有較低的總線(xiàn)頻率,滿(mǎn)足對CPLD的讀寫(xiě)時(shí)序要求。 3 小結 本文作者創(chuàng )新點(diǎn)是基于MAX2_EPM240進(jìn)行了輸入輸出模塊的硬件軟件設計,在Windows CE.net操作系統下,實(shí)現了EP9315嵌入式系統對輸入輸出模塊的控制,且可根據實(shí)際需要,靈活選用各類(lèi)模塊。該系統功耗低、穩定性好,適合工業(yè)控制中的運用。 作者:許弟建 來(lái)源:《微計算機信息》(嵌入式與SOC)2009年第3-2期 |