1. 簡(jiǎn)介
1.1 AD7606簡(jiǎn)介
AD7606是16位,8通道同步采樣模數(shù)數(shù)據(jù)采集系統(tǒng)。AD7606完全滿足電力系統(tǒng)的要求,具有靈活的數(shù)字濾波器、2.5V基準(zhǔn)電壓源、基準(zhǔn)電壓緩沖以及高速串行和并行接口。它采用5V單電源供電,可以處理±10V和±5V真雙極性輸入信號(hào)、同時(shí)所有通道均能以高達(dá)200kSPS的吞吐率采樣。
圖1 AD7606的內(nèi)部原理框圖。
圖2 AD7606的管腳圖。
• AVcc 模擬電源,4.75V~5.25V
• Vdrive 邏輯部分電源
• Vdd 模擬輸入部分正電壓
• Vss 模擬輸入部分負(fù)電壓
• DGND 數(shù)字地
• AGND 模擬地
1.2 DSP-21479" title="ADSP-21479">ADSP-21479簡(jiǎn)介
ADSP-21479是SIMD (單指令多數(shù)據(jù))SHARC家族中的一員,它基于65nm的最新工藝,具有低成本,低功耗的的特點(diǎn),是一顆集成有大容量片上SRAM和ROM的32/40位浮點(diǎn)DSP。ADSP-21479是性能出色,266MHZ/1596MFLOP:
• 266 MHz/1596FLOPS SIMD SHARC內(nèi)核,支持32-bit浮點(diǎn)、40-bit浮點(diǎn)以及16/32-bit定點(diǎn)數(shù)據(jù)類型
• 支持多達(dá)5 Mb 片內(nèi)SRAM
• 支持16位寬SDR、SDRAM存儲(chǔ)器接口
• 數(shù)字應(yīng)用接口 DAI,支持多達(dá)8個(gè)的高速同步串口(SPORT)及SPI串口
• 2個(gè)精確時(shí)鐘發(fā)生器
• 20線數(shù)字I/O端口
• 3個(gè)定時(shí)器、UART、I2C兼容接口
• ROM/JTAG安全模式
• 供應(yīng)196引腳CSP_BGA封裝與100引腳LQFP封裝產(chǎn)品,適合于工業(yè)客戶的要求
• 供應(yīng)商業(yè)級(jí)、工業(yè)級(jí)溫度與汽車級(jí)溫度等級(jí)產(chǎn)品
圖3 ADSP-21479的內(nèi)部原理框圖。
2. AD7606和ADSP-21479配置與連接
AD7606芯片的供電采用單5V供電,見圖4所示:
圖4。AD7606供電示意圖。
AD7606采用硬件配置方式,具體配置如下:
1) 設(shè)置RANGE=0時(shí),模擬輸入范圍是±5Vref。
2) 設(shè)置/PAR /SER/BYTE SEL為高電平,選擇使用串行模式。
3) CONVSTA, CONVSTB ,使用同源激勵(lì)。
4) 設(shè)置REF SELECT=0 ,使用外部參考電壓
SHARC ADSP-21479 SRU設(shè)置:
SPORT0_SCLK ? DAIP 1
SPORT0_FS ? DAIP 4
SPORT0_DA ? DAIP 5
FLAG4 ? DPI_PIN1
FLAG5 ? DPI_PIN2
根據(jù)以上配置,ADSP-21479通過SPORT口與AD7606聯(lián)系的系統(tǒng)示意圖如圖5所示:
圖5 采用串行方式時(shí),AD7606與ADSP-21479硬件連接示意圖
3. 時(shí)序分析
AD7606工作時(shí)序如圖6,通過DSP的FLAG信號(hào)驅(qū)動(dòng)CONVST A/B信號(hào)啟動(dòng)轉(zhuǎn)換過程,BUSY標(biāo)志著工作狀態(tài),連接到DSP的中斷輸入。BUSY為高時(shí)表示處于轉(zhuǎn)換狀態(tài),轉(zhuǎn)換完畢后高到低的下降沿引起DSP中斷,DSP在響應(yīng)中斷通過SPORT0讀取8通道ADC轉(zhuǎn)換好的數(shù)據(jù)。
圖6 AD7606串行讀取數(shù)據(jù)時(shí)序
ADSP-21479 SPORT口的時(shí)序如圖7所示,在FS信號(hào)啟動(dòng)后,數(shù)據(jù)隨著時(shí)鐘節(jié)拍被讀取。 我們選擇SPORT數(shù)據(jù)寬度是32位,那么四次FS信號(hào)即可讀取八個(gè)通道的數(shù)據(jù)。
圖7 ADSP-21479 SPORT串行數(shù)據(jù)接收時(shí)序
4. 測(cè)試結(jié)果和結(jié)論
DSP軟件設(shè)置50K的采樣信號(hào),對(duì)8個(gè)通道的數(shù)據(jù)進(jìn)行同時(shí)采樣。各模擬通道輸入信號(hào)分別為:通道5連接1KHz正弦波,其余通道接地。
4.1 測(cè)試結(jié)果
1) 利用VDSP5.0++ 的plot窗口(VDSP->View->Debug Windows->Plot)觀察5通道數(shù)據(jù),
1. 通道5提取到1KHz正弦波;
4.2 結(jié)論
這種連接方式只使用DSP的一個(gè)串行SPORT口即可同時(shí)讀取8路ADC的數(shù)據(jù)。但由于8路數(shù)據(jù)都通過一路數(shù)據(jù)輸出給DSP,而AD7606支持的最高串行時(shí)鐘頻率有限,模數(shù)轉(zhuǎn)換還要占用一部分采樣周期,因此串行輸出的連接下,AD7606不能工作在最高200KSPS采樣率下。
根據(jù)AD7606數(shù)據(jù)手冊(cè),AD7606的SCLK上限為23.5MHz。FLAG信號(hào)驅(qū)動(dòng)CONVST A/B信號(hào),單路串行輸出八通道數(shù)據(jù)。不考慮轉(zhuǎn)換時(shí)間最高采樣率可達(dá)23500000/(16×8)=183.5kHz,由于每個(gè)周期數(shù)據(jù)轉(zhuǎn)換將消耗一定時(shí)間,所以實(shí)際無法達(dá)到此速度。假設(shè)采樣周期用Tconvst表示,根據(jù)AD7606數(shù)據(jù)手冊(cè),模數(shù)轉(zhuǎn)換時(shí)間為3.45us,所以 Tconvst-3.45us代表采樣周期中傳輸數(shù)據(jù)的時(shí)間。八通道總數(shù)據(jù)量為128個(gè)時(shí)鐘周期,所以(Tconvst-3)/128近似為每bit數(shù)據(jù)的時(shí)鐘周期。由于SCLK最大為23.5MHz,據(jù)此可以推算出此模式下最高采樣頻率:
(Tconvst(max)-3.45)/128 = 1/23.5
Tconvst(max)≈8.89us
即最高采樣率為1/ Tconvst(max) = 112KSPS
同理可知,若采用兩口同時(shí)輸出轉(zhuǎn)換數(shù)據(jù),即啟動(dòng)2個(gè)SPORT分別讀取8個(gè)通道的數(shù)據(jù),實(shí)際最高采樣率能達(dá)到161K SPS。
當(dāng)AD7606采用并行方式輸出到DSP時(shí),即可得到最高200KSPS采樣率。
5. DSP參考代碼
1. 配置SRU
// This function will setup the SRU Registers
void InitSRU(void)
{
//Generating Code for connecting : SPORT0_CLK to DAI_PIN1
SRU (HIGH, PBEN01_I);
SRU (SPORT0_CLK_O, DAI_PB01_I);
//Generating Code for connecting : SPORT0_FS to DAI_PIN4
SRU (HIGH, PBEN04_I);
SRU (SPORT0_FS_O, DAI_PB04_I);
//Generating Code for connecting : DAI_PIN5 to SPORT0_DA
SRU (LOW, PBEN05_I);
SRU (DAI_PB05_O, SPORT0_DA_I);
//Generating Code for connecting : FLAG4 to DPI_PIN1
SRU (HIGH, DPI_PBEN01_I);
SRU (FLAG4_O, DPI_PB01_I);
//Generating Code for connecting : FLAG5 to DPI_PIN2
SRU (HIGH, DPI_PBEN02_I);
SRU (FLAG5_O, DPI_PB02_I);
}
2. IRQ1 BUSY中斷服務(wù)程序
void AD7606_BUSY_IRQs(int sig_int)
{
busy++;
interrupt(SIG_SP0,Count_SPORT0_RX_IRQs);
#ifdef DMA
* (volatile int *)SPCTL0 =( SPEN_A | SLEN32 | ICLK | IFS | LAFS | SDEN_A | FSR | DITFS| LFS );
#endif
#ifdef CORE
* (volatile int *) SPCTL0 =( SLEN16 | ICLK | IFS | FSR | LAFS | LFS | DITFS);
*(volatile int *) SPCTL0 |=SPEN_A ;
#endif
}
3. SPORT初始化程序
void init_sport(){
* (volatile int *) SPCTL0 = 0;
* (volatile int *) SPCTL1 = 0;
* (volatile int *) SPMCTL0 = 0;
* (volatile int *) SPMCTL1 = 0;
SPORT_DMA_setup:
* (volatile int *) IISP0A =(int)rx_buf0a ;
* (volatile int *) IMSP0A = 1;
* (volatile int *) CSP0A = CHNUM;
//configure the sport
/* */
/* CLKDIV0=[fCCLK(266 MHz)/4xFSCLK(17 MHz)]-1 = 0x0005 */
/* FSDIV0=[FSCLK(10 MHz)/TFS(2 MHz)]-1 = 31 = 0x001F */
//13m hz 1m 0x00080003;
/* Configure SPORT0 as a reciever (Rx) */
* (volatile int *) DIV0 = 0x001F0005;
}
4. SPORT 中斷程序
void Count_SPORT0_RX_IRQs(int sig_int)
{
SP0I_counter++;
#ifdef CORE
rx_buf0a[(SP0I_counter-1)*CHNUM]=(short)(*pRXSP0A);
#endif
* (volatile int *) SPCTL0 =0;
finished=1;
#ifdef DMA
if(SP0I_counter==1024){
* (volatile int *) IISP0A =(int)rx_buf0a ;
SP0I_counter=0;
}
else
* (volatile int *) IISP0A =(int)(rx_buf0a+ (SP0I_counter)*CHNUM);
* (volatile int *) IMSP0A = 1;
* (volatile int *) CSP0A = CHNUM;
#endif
interrupt(SIG_SP0,SIG_IGN);
}