基于SOPC的現(xiàn)場總線多通道實時溫度采集系統(tǒng)設(shè)計
引言
溫度是表征物體冷熱程度的物理量,是工業(yè)生產(chǎn)中常見和最基本的參數(shù)之一,在生產(chǎn)過程中常常需要對溫度進(jìn)行監(jiān)控。傳統(tǒng)的溫度采集系統(tǒng),通常采用單片機或數(shù)字信號處理器DSP作為微控制器,控制模數(shù)轉(zhuǎn)換器ADC及其他外圍設(shè)備的工作;但是,基于單片機或DSP的高速多路溫度采集系統(tǒng)都有一定的不足。由于單片機運行的時鐘頻率較低,并且單片機是基于順序語言的,各種功能都要靠軟件的運行來實現(xiàn),因此隨著程序量的增加,如果程序的健壯性不好,會出現(xiàn)“程序跑飛”和“復(fù)位”現(xiàn)象。DSP的運算速度快,處理復(fù)雜的乘加運算有一定的優(yōu)勢,但是很難完成外圍設(shè)備的復(fù)雜硬件邏輯控制。因而單片機或DSP很難滿足在復(fù)雜的工業(yè)現(xiàn)場進(jìn)行多路溫度采集時對實時性和同步性的要求。鑒于此,本文介紹一種基于SOPC技術(shù)的多通道實時溫度采集系統(tǒng)。該系統(tǒng)開發(fā)周期短、資源配置靈活、穩(wěn)定性良好,滿足了對溫度采集實時性和同步性有較高要求的工業(yè)生產(chǎn)領(lǐng)域中的應(yīng)用。
1 系統(tǒng)的總體結(jié)構(gòu)
溫度采集系統(tǒng)的硬件主要由溫度采集模塊、數(shù)據(jù)存儲模塊、FPGA邏輯控制模塊以及通信模塊組成,其總體架構(gòu)如圖1所示。
系統(tǒng)上電后,先由靜態(tài)存儲器EPCS16自動將配置數(shù)據(jù)載入到FPGA(CycloneII系列的EP2C8Q208C)的SDRAM(HY57V641620)之中,即將固化在其中的數(shù)字邏輯電路映射到FPGA器件中。溫度傳感器單元AD590首先采集溫度信號,然后經(jīng)過信號調(diào)理電路的處理,使信號的輸出幅度滿足A/D采樣的量程要求。此時FPGA控制模擬選擇開關(guān)ADG706進(jìn)行通道選擇,同時控制多片16位A/D轉(zhuǎn)換器ADS8402進(jìn)行A/D轉(zhuǎn)換,并將采集到的實時數(shù)據(jù)分時存儲到兩片類型為FIFO、容量為16K×9位的存儲器IDT72V06中。然后,將其中處于讀狀態(tài)的IDT72V06中的數(shù)據(jù)讀取出來,并經(jīng)過FPGA控制SPC3通信模塊,通過PROFIBUS總線傳送至上位機。
2 溫度采集系統(tǒng)設(shè)計
2.1 溫度采集模塊
溫度采集模塊由多片溫度傳感器單元、多路信號調(diào)理電路、多路模擬開關(guān)電路以及多路A/D轉(zhuǎn)換器四大部分組成。
溫度傳感器單元采用熱電偶。它具有以下優(yōu)點:測溫范圍寬,性能穩(wěn)定;測量精度高,熱電偶與被測對象直接接觸,不受中間介質(zhì)的影響;熱響應(yīng)時間快,熱電偶對溫度變化反應(yīng)靈活;測量范圍大,-40~+1600℃均可連續(xù)測溫;性能牢靠,機械強度好;壽命長,按裝方便,特別適合于在復(fù)雜的工業(yè)生產(chǎn)過程中對溫度的實時檢測。
多路模擬開關(guān)電路選用16路模擬選擇開關(guān)ADG706。其4位地址位.A0、A1、A2、A3的輸入直接由FPGA的I/O端口CH0、CH1、CH2、CH3控制,決定16路輸入信號中要輸出的通道,每條通道選擇指令將同時啟動多片ADG706相應(yīng)的溫度采集通道。然后啟動相應(yīng)的溫度采集通道進(jìn)行A/D轉(zhuǎn)換。本設(shè)計采用高速逐次逼近寄存器(SAR)類比數(shù)位轉(zhuǎn)換器ADS8402,多片ADS8402A/D轉(zhuǎn)換器的啟動轉(zhuǎn)換引腳共用FPGA的一個I/O端口A/D Start。ADS8402A/D轉(zhuǎn)換結(jié)果的高、低字節(jié)控制引腳BYTE及ADS8402的數(shù)據(jù)輸出控制,分別由FPGA單獨的I/O控制。FPGA每給A/DStart端口一個100ns的負(fù)脈沖,即可啟動多片ADS8402進(jìn)行相應(yīng)通道上的數(shù)據(jù)采集。轉(zhuǎn)換結(jié)束后,可通過控制BYTE端口讀取A/D轉(zhuǎn)換結(jié)果,并暫存到相應(yīng)的數(shù)據(jù)單元。
2.2 數(shù)據(jù)存儲模塊
多通道采集信號的路數(shù)多、處理的數(shù)據(jù)量大,需要外擴數(shù)據(jù)存儲模塊來緩存FPGA處理結(jié)果。與此同時,由于上位機的多任務(wù)性,它不可能專一對并行口讀取數(shù)據(jù),為了保證FPGA控制核心與上位機通信一次性讀取大量數(shù)據(jù),本系統(tǒng)用到了2片異步FIFO芯片IDT72V06,其存儲容量16K×9位,存取時間15 ns,其中一片用來對采集過來的數(shù)據(jù)進(jìn)行存儲,另一片用來讀取存儲在FIFO中的采集數(shù)據(jù),以便與上位機進(jìn)行并行口通信。系統(tǒng)運行過程中,兩片F(xiàn)IFO位擴展進(jìn)行雙緩存乒乓控制,輪流進(jìn)行讀寫操作,可大大提高并口通信速度及數(shù)據(jù)吞吐量。
2.3 通信模塊
PROFIBUS—DP是一種經(jīng)過優(yōu)化的高速、廉價的通信連接方式,專為自動控制系統(tǒng)和設(shè)備級的分散I/O之間的通信而設(shè)計,用于分布式控制系統(tǒng)的高速數(shù)據(jù)傳輸,實現(xiàn)自控系統(tǒng)和分散外圍I/O設(shè)備及智能現(xiàn)場儀表之間的高速數(shù)據(jù)通信。SPC3集成了全部的PROFIBUS—DP協(xié)議,SP C3在DP方式下將完成所有DP—SAP的設(shè)置。
SPC3內(nèi)部集成了1.5 KB的雙口RAM,包括參數(shù)寄存器、方式寄存器、狀態(tài)寄存器和中斷控制器等。SPC3內(nèi)部集成的看門狗定時器有3種工作狀態(tài):波特率檢測、波特率控制和從站控制。內(nèi)部的USART可實現(xiàn)并行數(shù)據(jù)流和串行數(shù)據(jù)流的相互轉(zhuǎn)換,微順序控制器控制整個工作過程,空閑定時器直接控制串行總線時序。通信模塊的設(shè)計選用了PROFIBUS—DP專用通信協(xié)議芯片SPC3,這樣可加速通信的執(zhí)行,而且可以減輕微處理器的負(fù)擔(dān)。
2.4 FPGA邏輯控制模塊
基于FPGA的采集控制單元,采用自頂而下的模塊化設(shè)計方法,使用Verilog HDL語言完成各控制模塊的設(shè)計。FPGA邏輯控制模塊包括A/D采樣控制模塊、FIFO讀寫控制模塊和SPC3控制模塊。
2.4.1 A/D采樣控制模塊
A/D采樣控制模塊負(fù)責(zé)控制外部ADS8402芯片多路模擬輸入量的選通,并實現(xiàn)對A/D采樣過程的合理控制。
由于ADS8402對16通道的模擬量采取分時轉(zhuǎn)換的方式,因此在啟動轉(zhuǎn)換的同時還要進(jìn)行通道選擇。ADS8402設(shè)置了4根通道地址線A0、A1、A2、A3,以及地址鎖存允許信號ALE。當(dāng)ALE變高時,鎖存由A0、A1、A2、A3編碼所確定的通道號,將該通道的模擬量接入A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。依據(jù)這樣的特性,設(shè)計一個帶復(fù)位端的十六進(jìn)制計數(shù)器,其計數(shù)輸出端Q3、Q2、Q1、Q0分別與ADS8402的4根地址線相連。計數(shù)器上電復(fù)位以確保系統(tǒng)從0號通道開始采樣。將ADS8402的轉(zhuǎn)換結(jié)束信號EOC作為計數(shù)器的時鐘信號,實現(xiàn)一路轉(zhuǎn)換結(jié)束后自動啟動對下一路模擬輸入的采樣控制。
A/D采樣過程的控制采用有限狀態(tài)機來實現(xiàn),把某一通道的采樣過程劃分為7個狀態(tài),如圖2所示。首先S0狀態(tài)對各個控制信號進(jìn)行初始化。在S1狀態(tài)產(chǎn)生ALE信號的上升沿,鎖存通道地址。啟動信號START應(yīng)在產(chǎn)生ALE信號的同一時鐘下降沿產(chǎn)生,由于VHDL語言在同一進(jìn)程內(nèi)不允許時鐘的兩個沿作為敏感變量,所以將產(chǎn)生START信號單列為一個狀態(tài)S2,啟動轉(zhuǎn)換。在啟動轉(zhuǎn)換后,ADS8402使EOC置為低電平,設(shè)置S3狀態(tài)等待A/D轉(zhuǎn)換結(jié)束。轉(zhuǎn)換結(jié)束后,EOC信號由低電平轉(zhuǎn)換為高電平,狀態(tài)機進(jìn)入S4狀態(tài),開啟輸出允許OE。狀態(tài)機進(jìn)入S5狀態(tài),開啟數(shù)據(jù)鎖存信號LOCK鎖存數(shù)據(jù)。為產(chǎn)生與其他進(jìn)程通信的信號,狀態(tài)機設(shè)置S6作為最后一個狀態(tài),然后跳轉(zhuǎn)回SO初始狀態(tài)。
2.4.2 FIFO讀寫控制模塊
采用2片F(xiàn)IFO輪流讀寫操作,實現(xiàn)FPGA與PC機之間的數(shù)據(jù)緩存。乒乓傳輸控制原理示意圖如圖3所示,圖中的實線箭頭與虛線箭頭分別代表不同的讀寫數(shù)據(jù)周期。輸入數(shù)據(jù)流通過輸入數(shù)據(jù)流選擇單元,等時地將數(shù)據(jù)流分配到FIFO1、FIFO2中。在第1個緩沖周期,將輸入的數(shù)據(jù)流緩存到FIFO1。在第2個緩沖周期,通過輸入數(shù)據(jù)流選擇單元的切換,將輸入的數(shù)據(jù)流緩存到FIFO2,與此同時,將FIFO1緩存的第1個周期的數(shù)據(jù)通過輸出數(shù)據(jù)流選擇單元的選擇,送到數(shù)據(jù)流運算處理模塊被運算處理。在第3個緩沖周期,通過輸入數(shù)據(jù)流選擇單元的再次切換,將輸入的數(shù)據(jù)流緩存到FIFO1,與此同時,將FIFO2緩存的第2個周期的數(shù)據(jù)通過輸出數(shù)據(jù)流選擇單元的切換,送到數(shù)據(jù)流運算處理模塊被運算處理。如此循環(huán),周而復(fù)始。
2.4.3 SPC3控制模塊
由于SPC3集成了完整的DP協(xié)議,因此在進(jìn)行通信時,F(xiàn)PGA不用參與處理DP狀態(tài)機。主要任務(wù)是根據(jù)SPC3產(chǎn)生的中斷,將SPC3接收到的數(shù)據(jù)轉(zhuǎn)存,組織要通過SPC3發(fā)給的數(shù)據(jù),并根據(jù)要求組織外部診斷。在SPC3正常工作之前,需要進(jìn)行初始化,以配置需要的寄存器,包括設(shè)置協(xié)議芯片的中斷允許,寫入從站識別號和地址,設(shè)置SPC3方式寄存器,設(shè)置診斷緩沖區(qū),配置緩沖區(qū)、地址緩沖區(qū)、初始化長度,并根據(jù)以上初始值得出各個緩沖區(qū)的指針和輔助緩沖區(qū)的指針。通信模塊的控制流程如圖4所示。
3 系統(tǒng)的FPGA實現(xiàn)
3.1 Nios II系統(tǒng)架構(gòu)設(shè)計
Nios II系統(tǒng)模塊包含:Nios II處理器、Avalon總線、并行輸入/輸出口PIO、串行外圍設(shè)備接口SPI、定時器Timer、片內(nèi)存儲器EPCS、片外存儲器SDRAM、PROFIBUS-DP的客戶定制邏輯。由Nios II處理器完成程序控制,主要負(fù)責(zé)對溫度的采集與數(shù)據(jù)存儲操作,并控制PROFIBUS -DP的通信過程。其架構(gòu)如圖5所示。
3.2 系統(tǒng)軟件設(shè)計
Nios II處理器的軟件設(shè)計是在軟核內(nèi)存放一段編寫的C/C++語言控制程序。來控制系統(tǒng)運行,它可以讀寫芯片的存儲單元,同時與外圍的設(shè)備進(jìn)行通信。在本系統(tǒng)中,Nios II程序的任務(wù)是:在規(guī)定的周期內(nèi),F(xiàn)PGA通過通信模塊接收上位機發(fā)出的采樣任務(wù)及控制參數(shù),然后控制模擬選擇開關(guān)ADG706和A/D轉(zhuǎn)換器ADS8402,使它們對選定通道的模擬信號進(jìn)行調(diào)理及A/D轉(zhuǎn)換,并讀取采樣數(shù)據(jù)以乒乓傳輸數(shù)據(jù)方式傳送至片外FIFO緩存,再通過PROFIBUS—DP通信接口將采樣數(shù)據(jù)傳輸至上位機。主程序流程如圖6所示。
結(jié)語
基于FPGA的多通道實時溫度采集系統(tǒng)以Nios II軟核處理器實現(xiàn)SOPC,進(jìn)一步簡化了硬件設(shè)計。與傳統(tǒng)的基于MCU的多通道溫度采集系統(tǒng)相比,該系統(tǒng)具有資源配置靈活、運行穩(wěn)定可靠、實時性強等優(yōu)點。另外,該系統(tǒng)具有標(biāo)準(zhǔn)PROFIBUS—DP接口,作為一個DP從站實現(xiàn)與多種DP主站的通信,可廣泛應(yīng)用于工業(yè)生產(chǎn)領(lǐng)域的PROFIBUS分布式控制系統(tǒng)中。