基于DSP與CPLD的ADS7805多通道數(shù)據(jù)采集
掃描二維碼
隨時(shí)隨地手機(jī)看文章
關(guān)鍵詞 DSP;CPLD;ADS7805
0 引言
用于實(shí)時(shí)控制的嵌入式系統(tǒng)有多路模擬量輸入,要求對(duì)多路輸入進(jìn)行連續(xù)掃描并進(jìn)行高速高精度處理,具有16位16路差分輸入通道的ADS7805能夠滿足系統(tǒng)通道數(shù)量及精度的要求。通道的快速切換及系統(tǒng)關(guān)鍵控制信號(hào)的產(chǎn)生成為制約系統(tǒng)性能的瓶頸,利用TMS320LF2407A豐富的I/O接口及高頻時(shí)鐘,配合EPM3032A靈活的譯碼功能,則可以控制ADS7805進(jìn)行多個(gè)通道的高精度高速數(shù)據(jù)采集,由于采用了DSP與CPLD等可編程器件,系統(tǒng)可操作性得到了保證,也極大地簡(jiǎn)化了硬件電路。
1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
系統(tǒng)以DSP與CPLD為核心構(gòu)建,模擬信號(hào)從多路復(fù)用器接入,利用CPLD使能或禁止其輸出,DSP的I/O引腳控制通道的選擇,當(dāng)選通一路時(shí),多路復(fù)用器輸出差分再經(jīng)過(guò)運(yùn)放轉(zhuǎn)為單端信號(hào)作為ADC的輸入,ADC片選由DSP的I/O引腳控制,啟動(dòng)由CPLD控制,當(dāng)片選有效時(shí)啟動(dòng)ADC,并按照規(guī)定的時(shí)序控制片選信號(hào),ADC開(kāi)始工作,轉(zhuǎn)換結(jié)果輸出到CPLD譯碼得到的地址。ADC與DSP之間的緩沖器件用來(lái)做電平匹配,利用CPLD將其鎖定在選通狀態(tài)。ADC在轉(zhuǎn)換完成時(shí)發(fā)起一個(gè)外部中斷到DSP,請(qǐng)求DSP處理轉(zhuǎn)換結(jié)果[1]。系統(tǒng)結(jié)構(gòu)如圖1所示。
2 硬件設(shè)計(jì)
模擬信號(hào)輸入到多路復(fù)用器ADG726(ADI公司產(chǎn)品),1.8~5.5V電源供電,由引腳VDD輸入;接受16路差分或32路單端模擬信號(hào)輸入(引腳S1A~S16A,S1B~S16B)。DA,DB為差分信號(hào)輸出引腳;A0~A3是通道選擇控制引腳。片選引腳CSA、CSB低電平有效。引腳EN、WR分別為芯片使能和寫(xiě)使能,EN低有效,WR上的有效電平波形如圖2所示。
圖1系統(tǒng)結(jié)構(gòu)
圖2 多路復(fù)用器ADG726的控制時(shí)序圖
信號(hào)從DA,DB引腳輸出之后,在到達(dá)ADC之前先轉(zhuǎn)成單端信號(hào),這里采用ADI公司易用型運(yùn)放AD620,±12V模擬電源供電,電路連接如圖3所示。
圖3 差分轉(zhuǎn)單端電路
ADI公司生產(chǎn)的低功耗16位模數(shù)轉(zhuǎn)換器ADS7805為逐次逼近型結(jié)構(gòu),+5V單電源供電,標(biāo)準(zhǔn)±10V輸入,最小采樣率100KSPS。REF引腳接內(nèi)部或者外部參考電壓,用于設(shè)定模擬輸入電壓范圍,與模擬地之間連接一個(gè)2.2μF的鉭電容,本設(shè)計(jì)采用內(nèi)部參考;VANA引腳是+5V模擬電源輸入端,并聯(lián)一個(gè)0.1μF和一個(gè)10μF的鉭電容接到模擬地上;VDIG為數(shù)字電源輸入端,直接連到VANA上。AGND1和AGND2是模擬地;CAP引腳為參考緩沖電容,與模擬地之間接一個(gè)2.2μF鉭電容;DGND是數(shù)字地;BYTE引腳電平?jīng)Q定轉(zhuǎn)換結(jié)果的字節(jié)位置,低電平時(shí)引腳6到13輸出結(jié)果的高8位,引腳15到22輸出結(jié)果的低8位,高電平時(shí)正好相反。當(dāng)啟動(dòng)引腳R//C為低時(shí),片選CS的下降沿激活一次轉(zhuǎn)換。BUSY在轉(zhuǎn)換時(shí)保持低電平,轉(zhuǎn)換完成時(shí)變高。轉(zhuǎn)換結(jié)果由16個(gè)引腳并行輸出,經(jīng)過(guò)緩沖74LVTH16245A做5V到3.3V的電平轉(zhuǎn)換到DSP,輸出引腳為三態(tài)驅(qū)動(dòng)。ADS7805的控制時(shí)序如圖4所示
圖 4 ADS7805的控制時(shí)序
系統(tǒng)的主控制器采用TI(德州儀器)公司的TMS320LF2407A,3.3V靜態(tài)CMOS工藝,40MIPS,具有16位地址總線,16位數(shù)據(jù)總線,3個(gè)獨(dú)立的存儲(chǔ)空間,包括可用的64K字程序空間,35.5K字?jǐn)?shù)據(jù)空間以及64K字I/O空間。訪問(wèn)不同的存儲(chǔ)空間時(shí),DSP有相應(yīng)的引腳作為選通信號(hào),即PS對(duì)應(yīng)程序空間,DS對(duì)應(yīng)數(shù)據(jù)空間,IS對(duì)應(yīng)I/O空間,均為低電平有效。本設(shè)計(jì)將ADC映射到I/O空間。TMS320LF2407A具有豐富的通用數(shù)字I/O口,利用其中一個(gè)對(duì)ADS7805進(jìn)行啟動(dòng)控制。通道選擇也由數(shù)字I/O實(shí)現(xiàn),利用DSP 4個(gè)I/O引腳作為ADG726的4-16譯碼輸入可選擇系統(tǒng)的16路差分。設(shè)計(jì)將ADC的BUSY引腳接到DSP的外部中斷引腳XINT1上,當(dāng)BUSY上升沿到來(lái)時(shí),將觸發(fā)DSP外部中斷,中斷的極性、優(yōu)先級(jí)均可軟件設(shè)定。EMP3032A是ALTERA公司推出的高性價(jià)比CPLD,在系統(tǒng)中用來(lái)控制ADC的引腳CS,配合引腳R//C來(lái)激活A(yù)DC,對(duì)CS的控制同時(shí)也將ADC映射在了DSP的I/O空間,因?yàn)槭笴S變?yōu)橛行У目刂七壿媮?lái)自于CPLD對(duì)DSP的4根地址線(A15到A12)及IS的譯碼。多路復(fù)用器的寫(xiě)使能由CPLD控制,即ADG726也被映射在DSP的I/O空間,這樣設(shè)計(jì)的優(yōu)點(diǎn)是對(duì)映射地址執(zhí)行一個(gè)讀操作就能得到需要的時(shí)序,雖然利用DSP的數(shù)字I/O引腳也能實(shí)現(xiàn),但是需要在軟件中模擬信號(hào)的時(shí)序,實(shí)現(xiàn)由高到低、延時(shí)并上跳變的過(guò)程,相對(duì)較復(fù)雜[2-4]。
3 軟件設(shè)計(jì)
首先編寫(xiě)CPLD程序?qū)DG726及ADS7805進(jìn)行地址譯碼,然后對(duì)CPLD在線編程生成譯碼電路。
/*--adc mux--*/
assign mux_wr=~((addr==4'h3)&(~is)&(~dsp_wr));//ADG726映射到I/O空間的地址0x3000~0x3FFF,得到寫(xiě)使能信號(hào)
assign mux_en=0;//ADG726的使能引腳始終有效
/*--adc--*/
assign buffer_cs=(~(addr==4'h0))|is;//ADC映射到I/O空間的地址0x0000~0x0FFF,得到緩沖器的片選信號(hào)
assign adc_cs=~((addr==4'h0)&(~is)&dsp_rdwr);//得到ADC的片選信號(hào)
在DSP程序中,對(duì)0x3000~0x3FFF的任意地址執(zhí)行一個(gè)讀操作,由DSP選擇的通道就被選通,信號(hào)由ADG726輸出到運(yùn)放AD620,差分轉(zhuǎn)單端后輸出到ADC。通過(guò)寫(xiě)數(shù)字I/O的控制寄存器,先將R//C拉低,再對(duì)I/O空間的0x0000~0x0FFF執(zhí)行一個(gè)讀操作,然后將R//C拉高,就啟動(dòng)了ADC。讀0x0000~0x0FFF 其中任一個(gè)地址產(chǎn)生低電平的CS信號(hào),該信號(hào)保持的時(shí)間由訪問(wèn)I/O空間的等待時(shí)間決定,通過(guò)設(shè)置等待狀態(tài)寄存器來(lái)保證獲得有效的延時(shí)時(shí)間。
/*--設(shè)置等待狀態(tài)寄存器--*/
WSGR = 0x01C0;//bit8-6=111,訪問(wèn)I/O空間時(shí)插入7個(gè)等待狀態(tài)
ADC轉(zhuǎn)換完成置BUSY為高電平,向DSP申請(qǐng)中斷,相應(yīng)中斷被使能之后DSP開(kāi)始處理中斷服務(wù)程序,完成數(shù)據(jù)的讀取與其他處理。
/*--初始化ADC字程序--*/
*MCRA &= 0xFC3F;//配置4個(gè)I/O引腳bit9-6為通用功能用于ADG726通道選擇
*MCRB &= 0xFF7F;//bit7對(duì)應(yīng)的I/O引腳控制R//C
*PADATDIR |= 0xC000;//bit7-6配置為輸出,對(duì)應(yīng)通道選擇的兩個(gè)引腳
*PBDATDIR |= 0x0300;//bit1-0配置為輸出,對(duì)應(yīng)通道選擇的另兩個(gè)引腳
*PCDATDIR |= 0xC000;//bit6配置為輸出,對(duì)應(yīng)R//C
*XINT1CR |= 0x7;//上升沿有效,低優(yōu)先級(jí),使能外部中斷
*IMR |= 0x20;//使能內(nèi)核對(duì)應(yīng)的中斷
/*--聲明ADG726,ADC映射到的存儲(chǔ)單元--*/
#define AD_Output port0000
volatile ioport unsigned int port0000;
#define mux_ad port3000
volatile ioport unsigned int port3000;
/*--ADG726通道選擇函數(shù)--*/
*PADATDIR &= 0xFF3F;//bit7,bit6清0
*PBDATDIR &= 0xFFFC;//bit1,bit0 清0
*PADATDIR |= ( nChlNum & 0x3 ) << 6;//設(shè)置bit7,bit6
*PBDATDIR |= ( nChlNum & 0xC ) >> 2;//設(shè)置bit1,bit0
mux_ad = 0;//產(chǎn)生寫(xiě)使能信號(hào)
/*--主程序--*/
int temp;
……
AD_Init();//初始化
ADC_MUX(13);//選擇通道13
/*--啟動(dòng)ADC--*/
*PCDATDIR &= 0xFF7F;//使AD_R/C*變低
temp=AD_Output;//產(chǎn)生有效的AD_CS*
*PCDATDIR |= 0x80;// 使AD_R/C*變高
for(;;);//等待ADC中斷
......
/*--中斷服務(wù)程序--*/
int AD_result;
*IFR = 0x20; //清除中斷標(biāo)志位,以響應(yīng)后續(xù)中斷
AD_result = AD_Output;//讀轉(zhuǎn)換結(jié)果
asm(“ clrc INTM”);//重新使能中斷,因?yàn)橐贿M(jìn)服務(wù)程序中斷就被禁止了
4 結(jié)束語(yǔ)
本文設(shè)計(jì)了基于TMS320LF2407A與EPM3032A的ADS7805多通道采集系統(tǒng),介紹了系統(tǒng)的工作原理,詳細(xì)描述了ADS7805、DSP及CPLD之間接口的硬件與軟件設(shè)計(jì),該方案已在筆者參與研制的嵌入式實(shí)時(shí)控制系統(tǒng)中得到了成功應(yīng)用。
參考文獻(xiàn)
[1] 王文武,曹治國(guó),張貴清等.基于FPGA和DSP的并行數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)[J].微計(jì)算機(jī)信息,2004-11,21-23
[2] TMS320LF2407A DIGITAL SIGNAL PROCESSOR, Texas Instruments Incorporated
[3] 夏宇聞著.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M]. 北京航空航天大學(xué)出版社,2004
[4] 劉和平,王維俊,江渝等著.TMS320LF240x DSP C語(yǔ)言開(kāi)發(fā)與應(yīng)用[M]. 北京航空航天大學(xué)出版社, 2002