摘 要: 介紹了一種基于PC104總線的多通道高速同步采集卡" title="采集卡">采集卡" title="數(shù)據(jù)采集卡" title="數(shù)據(jù)采集卡">數(shù)據(jù)采集卡">數(shù)據(jù)采集卡的設(shè)計(jì)方法, 硬件上采用FPGA進(jìn)行控制邏輯設(shè)置和數(shù)據(jù)緩存" title="數(shù)據(jù)緩存">數(shù)據(jù)緩存的實(shí)現(xiàn), 簡(jiǎn)化了硬件電路, 同時(shí)也提高了其使用的簡(jiǎn)易性和配置的靈活性, 具有準(zhǔn)確和快速的特點(diǎn)。
關(guān)鍵詞: 數(shù)據(jù)采集; 現(xiàn)場(chǎng)可編程門陣列; 模數(shù)轉(zhuǎn)換
?
PC104 作為一種國(guó)際標(biāo)準(zhǔn)的控制總線, 在測(cè)試和控制中得到了廣泛應(yīng)用, 但目前市場(chǎng)上與之配套的同步數(shù)據(jù)采集卡還很少?;赑C104總線的高精度數(shù)據(jù)采集卡的主要功能是把外界模擬信號(hào)的電壓參量經(jīng)過(guò)A/D" title="A/D">A/D轉(zhuǎn)換器轉(zhuǎn)換成數(shù)字量,并把轉(zhuǎn)換結(jié)果存儲(chǔ)以便分析處理。本文所述采集卡采用了AD公司推出的高速、低功耗、四通道同步采樣12位并行接口的A/D轉(zhuǎn)換器AD7864,用FPGA進(jìn)行邏輯功能控制和數(shù)據(jù)緩存,使得該數(shù)據(jù)采集卡硬件電路極為簡(jiǎn)單。
1 數(shù)據(jù)采集卡的原理及組成
采集卡包括模擬輸入、A/D 采集、數(shù)據(jù)緩存及基于PC104 接口的數(shù)據(jù)傳輸四部分,其核心設(shè)計(jì)是A/D采集、數(shù)據(jù)緩存部分。數(shù)據(jù)采集卡系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
?
該采集卡采用LM324對(duì)模擬輸入信號(hào)進(jìn)行隔離,它的功能實(shí)現(xiàn)是在濾波器MAX274的每個(gè)輸入端前設(shè)計(jì)一個(gè)跟隨器,使輸入信號(hào)在被濾波之前先經(jīng)過(guò)隔離,A/D采集模塊主要采用三片AD7864-1來(lái)實(shí)現(xiàn)12通道的同步采樣。邏輯控制及數(shù)據(jù)緩存模塊是在FPGA內(nèi)部編程實(shí)現(xiàn)的。在數(shù)據(jù)送入PC104總線時(shí),74LS245在PC104總線與FPGA之間也起驅(qū)動(dòng)的作用。在PC104總線與FPGA不進(jìn)行數(shù)據(jù)傳輸時(shí),74LS245呈高阻狀態(tài),這樣可以防止主機(jī)與采集卡間的數(shù)據(jù)相互干擾。
2 硬件電路設(shè)計(jì)
整個(gè)系統(tǒng)硬件是把12通路的A/D同步采集設(shè)計(jì)在一塊電路板上,包括濾波、A/D轉(zhuǎn)換、數(shù)據(jù)緩存、FPGA邏輯控制以及總線接口,本文主要介紹A/D采集電路和FPGA內(nèi)部電路的設(shè)計(jì)與實(shí)現(xiàn)。
2.1 A/D采集模塊
AD7864是AD公司推出的高速、低功耗、四通道同步采樣12位并行接口的A/D轉(zhuǎn)換器,它可以用于馬達(dá)控制、非中斷電源控制、數(shù)據(jù)采集和通訊等。
該器件內(nèi)部具有一個(gè)轉(zhuǎn)換時(shí)間1.65μs的逐次逼近式A/D轉(zhuǎn)換器,4路跟蹤/保持放大器,2.5V參考電源,片內(nèi)時(shí)鐘震蕩器,信號(hào)調(diào)整電路及一個(gè)高速并行接口。AD7864可對(duì)四個(gè)通道的模擬輸入信號(hào)同步采樣,并將四個(gè)通道之間的相對(duì)相位和大小信息保存下來(lái),這使得它特別適合于交流電機(jī)控制、三相電網(wǎng)電壓檢測(cè)等場(chǎng)合。
A/D采集模塊采用三片AD7864-1同時(shí)采樣,以滿足12位同步采樣的要求。在A/D轉(zhuǎn)換電路中,三片AD7864-1使用同一個(gè)啟動(dòng)信號(hào)/convst,在/convst的上升沿" title="上升沿">上升沿轉(zhuǎn)換開(kāi)始。無(wú)需外部設(shè)置采樣保持電路、參考基準(zhǔn)和極性轉(zhuǎn)換電路。在信號(hào)/convst的上升沿,BUSY信號(hào)被觸發(fā)高電平并一直保持到四個(gè)通道都轉(zhuǎn)換結(jié)束,同時(shí)所有跟蹤保持器開(kāi)始工作,將濾波電路輸入的12路模擬信號(hào)相位信息保持一致,達(dá)到同步的要求。為了提高整個(gè)系統(tǒng)的采樣速率,AD7864-1的采集模式是在轉(zhuǎn)換過(guò)程中,每通道轉(zhuǎn)換結(jié)束時(shí)(/EOC變?yōu)榈仉娖剑╅_(kāi)始讀出數(shù)據(jù),轉(zhuǎn)換由/convst的上升沿啟動(dòng),轉(zhuǎn)換結(jié)束由/EOC的下降沿來(lái)表示。此時(shí)片選信號(hào)/CS端接地,由讀信號(hào)/RD讀出數(shù)據(jù)。當(dāng)讀信號(hào)/RD和片選信號(hào)/CS同時(shí)保持低電平時(shí)才可讀數(shù)據(jù),讀操作在工作時(shí)要確保寫信號(hào)/WR處于高電平。每次讀數(shù)據(jù)操作增加輸出數(shù)據(jù)寄存器指針,讀完最后一個(gè)轉(zhuǎn)換數(shù)據(jù)時(shí),將輸出數(shù)據(jù)寄存器指針復(fù)位。寫操作主要完成工作模式的設(shè)置,一般只在初始化或轉(zhuǎn)換通道切換時(shí)進(jìn)行。而進(jìn)行數(shù)據(jù)采集的操作只要給出啟動(dòng)命令,啟動(dòng)設(shè)置的通道進(jìn)行同步采集,待所有的數(shù)據(jù)轉(zhuǎn)換結(jié)束后自動(dòng)發(fā)出中斷請(qǐng)求信號(hào),然后進(jìn)行相應(yīng)通道的數(shù)據(jù)讀取即可。
2.2? FPGA內(nèi)部電路設(shè)計(jì)
隨著現(xiàn)場(chǎng)可編程門陣列(FPGA)技術(shù)的飛速發(fā)展,FPGA的應(yīng)用日益廣泛,它具有更高的密度、更快的工作速度和更大的編程靈活性,被廣泛應(yīng)用于各種電子類產(chǎn)品中。系統(tǒng)通過(guò)FPGA來(lái)實(shí)現(xiàn)高速數(shù)據(jù)緩存及邏輯控制。采用的器件是FLEX1K 系列的EP1K30TC144-1器件,其最大工作頻率為40MHz,消耗1 533 個(gè)LC,平均編碼時(shí)間為20個(gè)時(shí)鐘周期。FPGA 除了要滿足相應(yīng)的時(shí)序要求外, 還要求控制數(shù)據(jù)的位數(shù)和A/D轉(zhuǎn)換器的位數(shù)相匹配。數(shù)據(jù)緩存區(qū)要求既要有與A/D芯片的接口,又要有與系統(tǒng)主機(jī)的接口以提高數(shù)據(jù)吞吐率,因此通過(guò)EP1K30TC144-1芯片內(nèi)置的先進(jìn)先出(FIFO)緩沖存儲(chǔ)器實(shí)現(xiàn)數(shù)據(jù)高速傳輸。為此設(shè)計(jì)了地址譯碼、讀/寫數(shù)據(jù)寄存器、控制通道寄存器、啟動(dòng)觸發(fā)器和中斷響應(yīng)寄存器,所有的操作都是通過(guò)讀寫相應(yīng)的寄存器實(shí)現(xiàn)。下面將介紹FPGA內(nèi)部的各個(gè)設(shè)計(jì)模塊。
2.2.1 向FIFO寫數(shù)據(jù)的電路
首先是六片F(xiàn)IFO,分為三組,即每片A/D對(duì)應(yīng)兩個(gè)FIFO,本文只以第一片AD7864-1為例來(lái)說(shuō)明FIFO對(duì)數(shù)據(jù)的存儲(chǔ)過(guò)程,在FPGA內(nèi)部電路圖中截取一組FIFO來(lái)進(jìn)行描述,如圖2所示。
?
圖中in1[11..0]表示第一片A/D轉(zhuǎn)換后的12位數(shù)據(jù)線,分別與兩片F(xiàn)IFO的data[]連接,因?yàn)槭前袮/D轉(zhuǎn)換的數(shù)據(jù)寫入FIFO,A/D的轉(zhuǎn)換模式是轉(zhuǎn)換完一路就向FIFO寫數(shù)據(jù),所以將FIFO 的寫時(shí)鐘wrclock與A/D的/eoc連接,當(dāng)/eoc為低時(shí),表明有一路轉(zhuǎn)換結(jié)束,開(kāi)始向FIFO寫入數(shù)據(jù)。每片AD7864-1對(duì)應(yīng)兩片F(xiàn)IFO A和B,wrfull1a、wrreq1a、rdeq1a、rdemptyla、wrfulllb、wrreq1b、rdreq1b、rdempty1b分別是a和b的寫滿標(biāo)志位、寫請(qǐng)求信號(hào)、讀請(qǐng)求信號(hào)、讀空標(biāo)志位。通過(guò)74139譯碼器,使wrfull1a、wrfull1b、rdempty1a、rdempty1b聯(lián)合作用控制FIFO的讀寫操作。譯碼器作用的結(jié)果是只要A的wrfull1a為低,數(shù)據(jù)就一直寫入A中,當(dāng)wrfull1a為高時(shí),切換數(shù)據(jù)流向,開(kāi)始向B寫數(shù)據(jù)。當(dāng)wrfull標(biāo)志為高電平時(shí),表明FIFO達(dá)到半滿,向系統(tǒng)申請(qǐng)中斷,總線響應(yīng)中斷,立即啟動(dòng)讀FIFO中的數(shù)據(jù),當(dāng)讀到空時(shí),Empty標(biāo)志有效,停止讀入操作。
2.2.2 中斷請(qǐng)求發(fā)生電路
在寫數(shù)據(jù)的過(guò)程中,當(dāng)三個(gè)FIFO都出現(xiàn)半滿標(biāo)志時(shí),就需要對(duì)主機(jī)發(fā)送讀請(qǐng)求信號(hào),在FPGA內(nèi)部通過(guò)一組或門、與門組合來(lái)產(chǎn)生該請(qǐng)求信號(hào)irq9,圖3所示為中斷請(qǐng)求的產(chǎn)生電路。
?
圖3中wrfull1a和 wrfull1b相或, wrfull2a和wrfull2b相或, wrfull3a和wrfull3b相或,這三組相或的結(jié)果通過(guò)一個(gè)與門之后產(chǎn)生讀請(qǐng)求信號(hào)irq9。設(shè)計(jì)思想是:只要三組FIFO中每組有一個(gè)FIFO的寫滿標(biāo)志為高,發(fā)送讀請(qǐng)求信號(hào),一旦主機(jī)響應(yīng)了該請(qǐng)求,則需要將三片已達(dá)到半滿狀態(tài)的FIFO依次讀數(shù)。這里使用一個(gè)中斷請(qǐng)求而不是三個(gè)中斷請(qǐng)求的原因是由于三個(gè)中斷請(qǐng)求會(huì)由于優(yōu)先級(jí)問(wèn)題發(fā)生沖突等待,使讀數(shù)據(jù)混亂,不利于數(shù)據(jù)的讀取存儲(chǔ),還有可能因?yàn)榈却龝r(shí)間過(guò)長(zhǎng)而影響了采集速率。
2.2.3 主機(jī)讀取數(shù)據(jù)電路
當(dāng)主機(jī)響應(yīng)了讀中斷請(qǐng)求之后,就會(huì)開(kāi)始從FIFO中取數(shù),但是六個(gè)FIFO的工作基本保持一致,所以存在主機(jī)先從哪一個(gè)FIFO中讀取數(shù)據(jù)的問(wèn)題,因此需要設(shè)計(jì)一個(gè)數(shù)據(jù)選擇讀取電路,如圖4所示。
?
圖中數(shù)據(jù)選擇電路通過(guò)三位地址a0、a1、a2來(lái)對(duì)六個(gè)FIFO的六路數(shù)據(jù)選擇輸出。
2.2.4 A/D轉(zhuǎn)換啟動(dòng)信號(hào)發(fā)生電路
在本電路中還有一個(gè)A/D轉(zhuǎn)換啟動(dòng)信號(hào)/convst的產(chǎn)生電路,三片AD7864-1使用同一個(gè)啟動(dòng)信號(hào)/convst,在/convst的上升沿轉(zhuǎn)換開(kāi)始。在第一次啟動(dòng)A/D芯片時(shí),需要分配一個(gè)地址來(lái)啟動(dòng)A/D芯片,一旦啟動(dòng)成功,下一次的/convst主要由三片AD7864-1的BUSY信號(hào)來(lái)產(chǎn)生,因?yàn)樵贏/D轉(zhuǎn)換過(guò)程中,busy信號(hào)都為高電平,當(dāng)轉(zhuǎn)換結(jié)束后,busy變低電平。所以只要三片AD7864-1的busy信號(hào)都為低電平時(shí),表明12路轉(zhuǎn)換結(jié)束,需要再次啟動(dòng)轉(zhuǎn)換。該局部電路如圖5所示。
?
本設(shè)計(jì)的大量工作都是在FPGA內(nèi)部實(shí)現(xiàn)的,簡(jiǎn)化了硬件電路, 同時(shí)也提高了其使用的簡(jiǎn)易性和配置的靈活性, 具有準(zhǔn)確和快速的特點(diǎn)。
3 仿真結(jié)果
FPGA內(nèi)部電路的設(shè)計(jì)采用VHDL 硬件描述語(yǔ)言實(shí)現(xiàn),并在ALTERA 公司的MAX+plusⅡ軟件上編譯仿真。采用全局同步時(shí)鐘,避免了毛剌的產(chǎn)生,保證了信號(hào)的穩(wěn)定性, 本文介紹的兩個(gè)FIFO工作原理為乒乓式存儲(chǔ)的原理,采用這種存儲(chǔ)方式,主要是考慮到由于轉(zhuǎn)換通路比較多,若每片A/D只對(duì)應(yīng)一片F(xiàn)IFO,當(dāng)主機(jī)不能及時(shí)讀走FIFO中的數(shù)據(jù)時(shí),A/D轉(zhuǎn)換就不能正常進(jìn)行,這就會(huì)影響數(shù)據(jù)的傳輸速度,也很容易使數(shù)據(jù)丟失。而采用兩片F(xiàn)IFO的乒乓式存儲(chǔ)之后,寫滿一片F(xiàn)IFO,在主機(jī)來(lái)不及讀走數(shù)據(jù)時(shí),可以將數(shù)據(jù)打入第二片F(xiàn)IFO,這樣可以起到一個(gè)緩沖作用,不會(huì)由于數(shù)據(jù)的讀取而影響整個(gè)系統(tǒng)的正常工作。該電路的設(shè)計(jì)是利用寫滿標(biāo)志、讀空標(biāo)志通過(guò)74193譯碼進(jìn)行兩片F(xiàn)IFO的讀寫切換的,其仿真結(jié)果分別如圖6、圖7、圖8所示。
?
?
通過(guò)時(shí)序仿真證明,采用74193譯碼來(lái)控制兩片F(xiàn)IFO的切換是可行的。設(shè)計(jì)中采用六片相同規(guī)格的FIFO,它們對(duì)數(shù)據(jù)的緩存是同步進(jìn)行的。所以本設(shè)計(jì)中FIFO的讀請(qǐng)求都是由半滿標(biāo)志產(chǎn)生的,從FIFO向外讀數(shù)據(jù)時(shí),只要rdempty1a不為高就一直保持從FIFO A中讀數(shù),當(dāng)rdempty1a為高且rdempty1b為低時(shí),開(kāi)始讀FIFO B中的數(shù)據(jù)。當(dāng)FIFO的寫滿標(biāo)志為高時(shí),開(kāi)始向主機(jī)發(fā)送請(qǐng)求。其他兩組的工作原理和第一組相似,這里就不再敘述。
根據(jù)上述原理設(shè)計(jì)的12通道數(shù)據(jù)采集卡,其結(jié)構(gòu)完全遵循PC104 總線標(biāo)準(zhǔn),它可對(duì)多達(dá)12通道的模擬量進(jìn)行A/D轉(zhuǎn)換,并對(duì)轉(zhuǎn)換的數(shù)據(jù)進(jìn)行存儲(chǔ) ,可直接作為PC104 的標(biāo)準(zhǔn)板卡使用。
參考文獻(xiàn)
[1]?張載鴻. 微型機(jī)(PC系列)接口控制教程. 北京:清華大學(xué)出版社, 1992.
[2]?孫肖子,張企民. 模擬電子技術(shù)基礎(chǔ). 西安:西安電子科技大學(xué)出版社,2001.
[3]?丁玉美,高西全. 數(shù)字信號(hào)處理(第二版). 西安:西安電子科技大學(xué)出版社, 2001.
[4]?高鵬,安濤,寇懷成. Protel 99入門與提高.北京:人民郵電出版社,2000.
[5]?朱明程,董爾令. 可編程邏輯器件原理及應(yīng)用. 西安:西安電子科技大學(xué)出版社,2004.
[6]?楮振勇,翁木云. FPGA設(shè)計(jì)及應(yīng)用.西安:西安電子科技大學(xué)出版社, 2002.