摘 要: 介紹了一種基于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), 簡化了硬件電路, 同時(shí)也提高了其使用的簡易性和配置的靈活性, 具有準(zhǔn)確和快速的特點(diǎn),。
關(guān)鍵詞: 數(shù)據(jù)采集; 現(xiàn)場可編程門陣列; 模數(shù)轉(zhuǎn)換
?
PC104 作為一種國際標(biāo)準(zhǔn)的控制總線, 在測試和控制中得到了廣泛應(yīng)用, 但目前市場上與之配套的同步數(shù)據(jù)采集卡還很少,。基于PC104總線的高精度數(shù)據(jù)采集卡的主要功能是把外界模擬信號(hào)的電壓參量經(jīng)過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ù)采集卡硬件電路極為簡單,。
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)過隔離,,A/D采集模塊主要采用三片AD7864-1來實(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ì)相位和大小信息保存下來,,這使得它特別適合于交流電機(jī)控制、三相電網(wǎng)電壓檢測等場合,。
A/D采集模塊采用三片AD7864-1同時(shí)采樣,,以滿足12位同步采樣的要求。在A/D轉(zhuǎn)換電路中,,三片AD7864-1使用同一個(gè)啟動(dòng)信號(hào)/convst,在/convst的上升沿" title="上升沿">上升沿轉(zhuǎn)換開始,。無需外部設(shè)置采樣保持電路、參考基準(zhǔn)和極性轉(zhuǎn)換電路,。在信號(hào)/convst的上升沿,,BUSY信號(hào)被觸發(fā)高電平并一直保持到四個(gè)通道都轉(zhuǎn)換結(jié)束,,同時(shí)所有跟蹤保持器開始工作,,將濾波電路輸入的12路模擬信號(hào)相位信息保持一致,達(dá)到同步的要求。為了提高整個(gè)系統(tǒng)的采樣速率,,AD7864-1的采集模式是在轉(zhuǎn)換過程中,,每通道轉(zhuǎn)換結(jié)束時(shí)(/EOC變?yōu)榈仉娖剑╅_始讀出數(shù)據(jù),,轉(zhuǎn)換由/convst的上升沿啟動(dòng),轉(zhuǎn)換結(jié)束由/EOC的下降沿來表示,。此時(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)場可編程門陣列(FPGA)技術(shù)的飛速發(fā)展,FPGA的應(yīng)用日益廣泛,它具有更高的密度、更快的工作速度和更大的編程靈活性,,被廣泛應(yīng)用于各種電子類產(chǎn)品中,。系統(tǒng)通過FPGA來實(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ù)吞吐率,,因此通過EP1K30TC144-1芯片內(nèi)置的先進(jìn)先出(FIFO)緩沖存儲(chǔ)器實(shí)現(xiàn)數(shù)據(jù)高速傳輸,。為此設(shè)計(jì)了地址譯碼、讀/寫數(shù)據(jù)寄存器,、控制通道寄存器,、啟動(dòng)觸發(fā)器和中斷響應(yīng)寄存器,所有的操作都是通過讀寫相應(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為例來說明FIFO對(duì)數(shù)據(jù)的存儲(chǔ)過程,在FPGA內(nèi)部電路圖中截取一組FIFO來進(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é)束,,開始向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)志位。通過74139譯碼器,,使wrfull1a,、wrfull1b、rdempty1a,、rdempty1b聯(lián)合作用控制FIFO的讀寫操作,。譯碼器作用的結(jié)果是只要A的wrfull1a為低,數(shù)據(jù)就一直寫入A中,,當(dāng)wrfull1a為高時(shí),,切換數(shù)據(jù)流向,開始向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ù)的過程中,當(dāng)三個(gè)FIFO都出現(xiàn)半滿標(biāo)志時(shí),,就需要對(duì)主機(jī)發(fā)送讀請(qǐng)求信號(hào),在FPGA內(nèi)部通過一組或門,、與門組合來產(chǎn)生該請(qǐng)求信號(hào)irq9,,圖3所示為中斷請(qǐng)求的產(chǎn)生電路。
?
圖3中wrfull1a和 wrfull1b相或, wrfull2a和wrfull2b相或, wrfull3a和wrfull3b相或,這三組相或的結(jié)果通過一個(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í)問題發(fā)生沖突等待,使讀數(shù)據(jù)混亂,,不利于數(shù)據(jù)的讀取存儲(chǔ),,還有可能因?yàn)榈却龝r(shí)間過長而影響了采集速率。
2.2.3 主機(jī)讀取數(shù)據(jù)電路
當(dāng)主機(jī)響應(yīng)了讀中斷請(qǐng)求之后,,就會(huì)開始從FIFO中取數(shù),,但是六個(gè)FIFO的工作基本保持一致,所以存在主機(jī)先從哪一個(gè)FIFO中讀取數(shù)據(jù)的問題,,因此需要設(shè)計(jì)一個(gè)數(shù)據(jù)選擇讀取電路,,如圖4所示。
?
圖中數(shù)據(jù)選擇電路通過三位地址a0,、a1,、a2來對(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)換開始,。在第一次啟動(dòng)A/D芯片時(shí),需要分配一個(gè)地址來啟動(dòng)A/D芯片,,一旦啟動(dòng)成功,,下一次的/convst主要由三片AD7864-1的BUSY信號(hào)來產(chǎn)生,因?yàn)樵贏/D轉(zhuǎn)換過程中,,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)的,簡化了硬件電路, 同時(shí)也提高了其使用的簡易性和配置的靈活性, 具有準(zhǔn)確和快速的特點(diǎn)。
3 仿真結(jié)果
FPGA內(nèi)部電路的設(shè)計(jì)采用VHDL 硬件描述語言實(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ī)來不及讀走數(shù)據(jù)時(shí),可以將數(shù)據(jù)打入第二片F(xiàn)IFO,這樣可以起到一個(gè)緩沖作用,,不會(huì)由于數(shù)據(jù)的讀取而影響整個(gè)系統(tǒng)的正常工作,。該電路的設(shè)計(jì)是利用寫滿標(biāo)志、讀空標(biāo)志通過74193譯碼進(jìn)行兩片F(xiàn)IFO的讀寫切換的,,其仿真結(jié)果分別如圖6,、圖7、圖8所示,。
?
?
通過時(shí)序仿真證明,采用74193譯碼來控制兩片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í),,開始讀FIFO B中的數(shù)據(jù)。當(dāng)FIFO的寫滿標(biāo)志為高時(shí),,開始向主機(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.