ADI 技术
直播中

何壮梦

7年用户 292经验值
私信 关注
[问答]

请问在使用AD7357时,单通道输出不准确和采样频率提高后数据采样不准确是什么原因?

大家好,我在使用AD7357时候,参照的推荐电路AD8138+OP177+AD7357的电路,采集10k~1MHz信号,遇到以下问题:环境(STM32F429+AD+SPI+DMA)
1. 这款AD7357芯片能够使用SPI的方式传输采集的数据吗?
1. 使用标准正弦信号通入SDATA_A中,输出采样数据为,这个波形的差分信号波形。意思也是,只有将采集的相邻两个数据分开然后形成两组数据,最后绘制为一对差分正弦信号;正确的应该是一个标准的正弦波吧?

2.在两个通道的输入都为100K正弦信号,在SDATA_B通道输出两路信号采集数据。当使用DMA+SPI的通信速度为1.4MHz采集数据时,能够输出正常数据,但是当SPI的通信速度为2.8MHz时,数据就完全不正确了,但是数据范围正确的0~16383,请问什么原因导致的呢

回帖(2)

丁浩

2018-8-1 07:48:07
1. AD7357芯片能够使用SPI的方式传输采集的数据.
2. 请用示波器检查AD7357查分输入引脚上,VINA+, VINA−; VINB+, VINB−是否为正常的正弦波波形?
3. 请用示波器同时抓AD7357数据接口/CS, SCLK, SDATAA, SDATAB的波形,检查时序是否正确?
举报

何壮梦

2018-8-1 08:06:35
StevenX   谢谢您的回复
1. VINA+, VINA−; VINB+, VINB−中A的波形存在较大的失真,B的波形还好;CS,SCLK,SDATAA,SDATAB波形满足要求;
2. AD7357芯片资料上说明sclk_max=80MHz,但现在提供2.8MHz不能收集到数据,可能是程序上的问题;
      请帮我看看我的程序设计思路:首先定义一个数组变量(data[500]),然后SPI设置为双线只接收模式,和使能SPI+DMA存储功能,最后设置DMA传输完成中断,并在中断服务函数中打印出500个采集数据;
 
主要程序如下:
        SPIx_Init();                                                                                              //SPI初始化
        GPIO_SetBits(AD_CS_GPIO_PORT,AD_CS_PIN);                                      //CS置1
        Rheostat_DMA_Mode_Config();                                                               //DMA初始化
        DMAxx_NVIC();                                                                                       //DMA中断配置
        DMA_ITConfig(RHEOSTAT_ADC_DMA_STREAM,DMA_IT_TC,ENABLE );  //传输完成中断使能
 
        MyDMA_Enable(RHEOSTAT_ADC_DMA_STREAM,numlength);                //使能DMA
        SPI_I2S_DMACmd (AD_SPI,SPI_I2S_DMAReq_Rx,ENABLE);                  //SPI_DMA功能使能
       
        while @@@@@@@@
        {                
                GPIO_ResetBits(AD_CS_GPIO_PORT,AD_CS_PIN);                       //CS置0                  
                         Delay(5);                                  
               
                SPI_Cmd(AD_SPI, ENABLE);                                                         //SPI开启       
                             data=SPIx_ReadWriteByte();                                          //产生16个周期的读取数据
                SPI_Cmd(AD_SPI, DISABLE);                                                       //SPI关闭
 
                    Delay(140);                                                               //延时时间稍长,为的是让CS=1前,关闭SPI,否则CS=1与sck有重合
                GPIO_SetBits(AD_CS_GPIO_PORT,AD_CS_PIN);                          //CS置1
                    Delay(5);                                                                  
        }
 
///////////////////////////中断服务函数//////////////////////////////////
        void DMA1_Stream0_IRQHandler(void) 
 
       {       
                 for (j=numlength;j>1;j--)
              {       
                printf("%dn",ADC_ConvertedValue[j]);
              }
               DMA_ClearITPendingBit(DMA1_Stream0,DMA_IT_TCIF0);         //清除完成中断标志位
       }
3. AD7357芯片是不是不能够将CS一直拉低,然后在有sclk的情况下,输出SDATA_A+SDATA_B的数据呢?
     所以在程序中我采用将先CS=0,开启spi,执行16个周期语句,关闭spi,延时函数(此处一定要加延时,不然会有sclk与CS重合),CS=1;最后循环上过程才能产生数据;
举报

更多回帖

发帖
×
20
完善资料,
赚取积分