首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
电力系统中多通道同步采样ADC(AD7606)与浮点DSP(ADSP-21479)通信的设计与实现
来源:本站整理  作者:佚名  2011-07-07 07:29:01



4. 测试结果和结论
DSP软件设置50K的采样信号,对8个通道的数据进行同时采样。各模拟通道输入信号分别为:通道5连接1KHz正弦波,其余通道接地。
4.1 测试结果
1) 利用VDSP5.0++ 的plot窗口(VDSP->View->Debug Windows->Plot)观察5通道数据,
1. 通道5提取到1KHz正弦波;

 image015.jpg

 4.2 结论
这种连接方式只使用DSP的一个串行SPORT口即可同时读取8路ADC的数据。但由于8路数据都通过一路数据输出给DSP,而AD7606支持的最高串行时钟频率有限,模数转换还要占用一部分采样周期,因此串行输出的连接下,AD7606不能工作在最高200KSPS采样率下。
根据AD7606数据手册,AD7606的SCLK上限为23.5MHz。FLAG信号驱动CONVST A/B信号,单路串行输出八通道数据。不考虑转换时间最高采样率可达23500000/(16×8)=183.5kHz,由于每个周期数据转换将消耗一定时间,所以实际无法达到此速度。假设采样周期用Tconvst表示,根据AD7606数据手册,模数转换时间为3.45us,所以 Tconvst-3.45us代表采样周期中传输数据的时间。八通道总数据量为128个时钟周期,所以(Tconvst-3)/128近似为每bit数据的时钟周期。由于SCLK最大为23.5MHz,据此可以推算出此模式下最高采样频率:
(Tconvst(max)-3.45)/128 = 1/23.5
Tconvst(max)≈8.89us
即最高采样率为1/ Tconvst(max) = 112KSPS
同理可知,若采用两口同时输出转换数据,即启动2个SPORT分别读取8个通道的数据,实际最高采样率能达到161K SPS。

当AD7606采用并行方式输出到DSP时,即可得到最高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中断服务程序
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);
}


 

上一页  [1] [2] [3] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:228,570.30000 毫秒