??? 摘? 要: 采用多通道的模數(shù)轉(zhuǎn)換芯片AD7656,在并行接口模式下,同時(shí)進(jìn)行6路數(shù)據(jù)采集。通過硬件實(shí)現(xiàn)對多路數(shù)據(jù)采集系統(tǒng)的控制,并用VHDL語言設(shè)計(jì)的狀態(tài)機(jī)在QuartusⅡ開發(fā)軟件中進(jìn)行仿真。?
??? 關(guān)鍵詞: CPLD; 多路并行數(shù)據(jù)采集; AD7656; FIFO; 狀態(tài)機(jī)
?
??? 在許多測控系統(tǒng)中,經(jīng)常會(huì)需要對多路信號(hào)進(jìn)行采集、傳輸、存儲(chǔ)與處理。例如三相電能表的數(shù)據(jù)采集,通常是用三片單相計(jì)量芯片。本文介紹的方案只用一片A/D芯片就可以完成三相信號(hào)的同時(shí)采集,并用CPLD控制,實(shí)現(xiàn)了多路并行數(shù)據(jù)采集和高速的存儲(chǔ),這樣可以在很大程度上提高系統(tǒng)的信號(hào)采集和處理能力[1]。?
1 系統(tǒng)設(shè)計(jì)?
??? 本系統(tǒng)要進(jìn)行多路數(shù)據(jù)采集,選用了A/D芯片AD7656。AD7656能進(jìn)行6路數(shù)據(jù)同時(shí)采集,系統(tǒng)要求每20ms采128點(diǎn),6路信號(hào)共采768點(diǎn),每點(diǎn)為2B,也就是一個(gè)周期采1 536×8bit,采集完后寫入存儲(chǔ)器中,F(xiàn)IFO存儲(chǔ)器IDT7203為2K×9bit,所以可以選用IDT7203。本系統(tǒng)除了A/D轉(zhuǎn)換電路、數(shù)據(jù)緩存電路、對鎖相環(huán)的分頻電路外,還需要有地址譯碼電路。可編程邏輯器件CPLD集成了各種門陣列,通過用硬件描述語言寫程序可實(shí)現(xiàn)以上各種功能[2]。鎖相環(huán)采用4046芯片,CPLD分頻后的信號(hào)與輸入信號(hào)進(jìn)行比較,通過鎖相環(huán)倍頻,此信號(hào)作為采樣信號(hào)的同步信號(hào)。圖1為系統(tǒng)總體設(shè)計(jì)方案。?
?
?
??? 此系統(tǒng)中CPLD是主控芯片,它用硬件描述語言VHDL寫程序來控制A/D轉(zhuǎn)換器的數(shù)據(jù)采集及向FIFO中存儲(chǔ)數(shù)據(jù)和讀取數(shù)據(jù)。當(dāng)數(shù)據(jù)達(dá)到要求時(shí),給CPU一個(gè)信號(hào),通知CPU,待CPU取走數(shù)據(jù)后,給狀態(tài)機(jī)一個(gè)復(fù)位信號(hào),等待下一輪的數(shù)據(jù)存取。由于CPLD是從數(shù)字邏輯角度入手,所以編程要從時(shí)序、邏輯兩個(gè)角度同時(shí)進(jìn)行考慮。?
2 芯片的選擇?
2.1 A/D轉(zhuǎn)換器?
??? 系統(tǒng)的A/D轉(zhuǎn)換芯片采用的是AD7656,它是6通道16位逐次逼近型ADC,在供電電壓為5V,采樣速率為最大即250kS/s時(shí),功耗僅為160mW[3]。而且它有兩種工作模式:串行接口模式和高速的并行接口模式,本系統(tǒng)應(yīng)用的是并行接口模式。在數(shù)據(jù)轉(zhuǎn)換時(shí),有3個(gè)轉(zhuǎn)換信號(hào)CONVSTA/B/C,用來控制每對或每4個(gè)或每6個(gè)ADC同時(shí)采樣。3個(gè)CONVST管腳可以控制3對獨(dú)立的模數(shù)轉(zhuǎn)換器同時(shí)采樣。如果將3個(gè)CONVST管腳連接在一起后,就可對6個(gè)ADC同時(shí)進(jìn)行采樣。其內(nèi)部轉(zhuǎn)換時(shí)序如圖2所示。?
?
?
2.2 FIFO存儲(chǔ)器?
??? 系統(tǒng)采用IDT7203,它是一種2K×9bit雙端口存儲(chǔ)器,可以實(shí)現(xiàn)先進(jìn)先出算法,它能高速存儲(chǔ)和讀取數(shù)據(jù),并且該存儲(chǔ)器的兩個(gè)端口時(shí)鐘是相互獨(dú)立的,所以既能進(jìn)行異步讀寫操作又能進(jìn)行同步讀寫操作。當(dāng)寫信號(hào)為低電平時(shí),A/D轉(zhuǎn)換的數(shù)據(jù)會(huì)不斷存入FIFO中,當(dāng)讀信號(hào)為低電平時(shí),要進(jìn)行讀操作,將數(shù)據(jù)讀入CPU。當(dāng)向FIFO中寫入數(shù)據(jù)時(shí),利用其各個(gè)標(biāo)志來顯示其數(shù)據(jù)的溢出或不足。為了防止數(shù)據(jù)溢出,當(dāng)最后一個(gè)寫信號(hào)的上升沿來臨時(shí)全滿標(biāo)志FF變低。存儲(chǔ)空間的一半滿時(shí),下一個(gè)寫操作下降沿到來時(shí),半滿標(biāo)志HF變低。當(dāng)所有的數(shù)據(jù)已經(jīng)從FIFO中讀出,空標(biāo)志EF變低,禁止更多的讀操作。圖3為FIFO的異步讀寫時(shí)序。?
?
?
2.3 可編程邏輯器件CPLD?
??? 系統(tǒng)采用ALTERA公司的MAX7000系列中的EPM7064芯片。采用此芯片除了能控制高速的A/D數(shù)據(jù)采集、高速的數(shù)據(jù)存儲(chǔ)和讀取,還能將整個(gè)設(shè)備電路中的一些譯碼等模塊一并設(shè)計(jì)進(jìn)去,從而在很大程度上減小了設(shè)備的體積。而且它是可以由用戶進(jìn)行編程以實(shí)現(xiàn)所需邏輯功能的數(shù)字集成電路,它具有設(shè)計(jì)周期短、可靠性高、修改方便等優(yōu)點(diǎn)。?
2.4 鎖相環(huán)?
??? 系統(tǒng)采用MOTOROLA公司的MC14046芯片,把輸入的信號(hào)進(jìn)行倍頻,作為采樣的同步信號(hào)。?
3 系統(tǒng)實(shí)現(xiàn)?
??? 本系統(tǒng)利用軟件QuartusⅡ完成CPLD程序的編寫,主要是由時(shí)鐘模塊和狀態(tài)機(jī)控制模塊組成。在時(shí)鐘的驅(qū)動(dòng)下,狀態(tài)機(jī)的狀態(tài)向下一個(gè)狀態(tài)轉(zhuǎn)換。A/D轉(zhuǎn)換和FIFO的存儲(chǔ),在CPLD控制下并行執(zhí)行[4]。?
3.1時(shí)鐘產(chǎn)生模塊?
??? 時(shí)鐘是由外部晶振產(chǎn)生的,本系統(tǒng)采用20MHz的晶振,由于所設(shè)計(jì)的狀態(tài)機(jī)中采樣一個(gè)點(diǎn)需要5個(gè)狀態(tài),共需0.25μs,也就是最大采樣頻率是4MHz。系統(tǒng)要求20ms采樣128點(diǎn),輸入50Hz的信號(hào)經(jīng)過鎖相環(huán)的128倍頻,輸出頻率為6 400Hz,晶振要經(jīng)過3 125次分頻才能得到這樣的采樣同步信號(hào)。時(shí)鐘信號(hào)驅(qū)動(dòng)狀態(tài)機(jī)的各個(gè)狀態(tài)的轉(zhuǎn)換,每出現(xiàn)一個(gè)同步信號(hào)采集一個(gè)點(diǎn)。?
3.2 狀態(tài)機(jī)?
??? 狀態(tài)機(jī)輸入信號(hào)有時(shí)鐘信號(hào)CLK和CPU發(fā)出的通知A/D轉(zhuǎn)換器和FIFO復(fù)位的信號(hào)INT0;輸出信號(hào)有A/D轉(zhuǎn)換器的復(fù)位信號(hào)ADRST、轉(zhuǎn)換信號(hào)ADCONVST、片選信號(hào)ADCS、讀信號(hào)ADRD及FIFO的寫信號(hào)FWR、復(fù)位信號(hào)FRST、通知CPU取數(shù)的信號(hào)INT1。?
??? 狀態(tài)機(jī)在時(shí)鐘信號(hào)驅(qū)動(dòng)下,完成A/D轉(zhuǎn)換及數(shù)據(jù)的存儲(chǔ)和讀取,不斷將下一個(gè)狀態(tài)中的內(nèi)容賦值給當(dāng)前狀態(tài)。圖4為其狀態(tài)圖。CPU向CPLD發(fā)送信號(hào)INT0,當(dāng)INT0為低電平時(shí)進(jìn)入下一個(gè)狀態(tài),AD7656及FIFO都復(fù)位,準(zhǔn)備就緒。本系統(tǒng)把3個(gè)CONVST引腳連接在一起,即可對6個(gè)通道同時(shí)采樣。在AD7656的CONVST信號(hào)為低電平時(shí),AD7656準(zhǔn)備好要進(jìn)行轉(zhuǎn)換,如果CONVST信號(hào)又變?yōu)楦唠娖綍r(shí),將啟動(dòng)AD7656進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換時(shí)間是3μs。這也就是說,CONVST信號(hào)能保持3μs,轉(zhuǎn)換就可以完成。轉(zhuǎn)換開始后,BUSY信號(hào)會(huì)自動(dòng)變?yōu)楦唠娖?,并且一直保持高電平,等待轉(zhuǎn)換完成后,BUSY信號(hào)則會(huì)自動(dòng)變?yōu)榈碗娖?,此時(shí)可以進(jìn)行讀操作。如果采用并行接口模式并且以字節(jié)輸入,轉(zhuǎn)換完成之后,當(dāng)片選信號(hào)CS一直保持低電平不變時(shí),連續(xù)12個(gè)讀信號(hào)可以依次連續(xù)被讀出。當(dāng)FWR信號(hào)為低電平時(shí),可以向FIFO中寫數(shù)據(jù)。?
?
?
??? 各個(gè)狀態(tài)的功能用VHDL表述為:?
??? when st0 => adrst <=′0′;adconvst <=′1′;adcs <=′1′;adrd <=′1′;fwr <=′1′; frst <= ′1′;?
??? when st1 => adrst <=′1′;adconvst <=′1′;adcs <=′1′;adrd <= ′1′;fwr <=′1′; frst <=′0′;?
??? ……?
??? when st10=> adrst <=′0′;adconvst <=′1′;adcs <=′1′;adrd <=′1′;fwr <=′1′; frst <=′1′;?
??? when others=>adrst <=′0′;adconvst <=′1′;adcs <=′1′;adrd <=′1′;fwr <=′1′; frst <= ′1′;?
??? 從狀態(tài)3到狀態(tài)5,即數(shù)據(jù)開始轉(zhuǎn)換至完成。當(dāng)進(jìn)入狀態(tài)6,數(shù)據(jù)轉(zhuǎn)換完成開始進(jìn)行準(zhǔn)備把信號(hào)讀出去,片選信號(hào)CS變低。在狀態(tài)7中,AD的讀信號(hào)RD變?yōu)榈碗娖?,?zhǔn)備好把數(shù)據(jù)讀出去。在狀態(tài)8時(shí),F(xiàn)WR信號(hào)變?yōu)榈碗娖?,要把?shù)據(jù)寫入FIFO中,故A/D的讀信號(hào)RD要保持為低電平,直到數(shù)據(jù)寫入FIFO中。片選信號(hào)CS、A/D的讀信號(hào)RD、FIFO寫信號(hào)FWR都變?yōu)楦唠娖剑谝晃粩?shù)據(jù)讀完,如果數(shù)據(jù)達(dá)不到要求,回到狀態(tài)6繼續(xù)讀下一位,每讀一位信號(hào)ADRCON加1,如果連續(xù)的12個(gè)數(shù)據(jù)依次被讀出,仍達(dá)不到數(shù)據(jù)的要求,則回到狀態(tài)0,對采集到的新的數(shù)據(jù)進(jìn)行存取,直到數(shù)據(jù)達(dá)到要求時(shí),向CPU申請中斷,CPU發(fā)出地址信號(hào),CPLD選通地址,將數(shù)據(jù)存放到該地址。?
4 仿真結(jié)果?
??? 本文采用VHDL語言,在QuartusⅡ開發(fā)軟件仿真,描述了狀態(tài)機(jī)是如何實(shí)現(xiàn)數(shù)據(jù)的采集、存儲(chǔ)和讀取的。仿真波形如圖5所示。?
?
?
??? 由圖5可以看到仿真結(jié)果完全滿足所要設(shè)計(jì)的邏輯功能。第3個(gè)狀態(tài)AD7656開始把模擬信號(hào)變?yōu)閿?shù)字信號(hào),等待轉(zhuǎn)換結(jié)束后,第6個(gè)狀態(tài)到第10個(gè)狀態(tài)開始采集第一路,連續(xù)采集完12路通道中的數(shù)據(jù)并依次存入FIFO中。?
??? 本文提出了一種基于CPLD的多路數(shù)據(jù)采集系統(tǒng)的方法,可以方便地實(shí)現(xiàn)對模擬輸入信號(hào)的采樣傳輸及處理,具有速度快、可靠性高而且可升級(jí)性好等優(yōu)點(diǎn),其應(yīng)用領(lǐng)域十分廣泛。?
參考文獻(xiàn)?
[1] 龍姝穎,汪渤,谷重陽.一種基于CPLD的多通道數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)[J]. 微計(jì)算機(jī)信息,2006,22(20):203-204,136.?
[2]?代芬,張承學(xué).CPLD在高速多通道數(shù)據(jù)采集中的應(yīng)用[J]. 電子技術(shù)應(yīng)用,2003,29(2):75-77.?
[3] 陳茹梅,郭建頌.AD7656型模數(shù)轉(zhuǎn)換器在信號(hào)采集系統(tǒng)中的應(yīng)用[J].國外電子元器件,2006(2):67-71.?
[4] 潘松,黃繼業(yè),EDA技術(shù)實(shí)用教程[M]. 北京:科學(xué)出版社,2004.