This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADS131A04:如何更快地读取通道数据?

Guru**** 2577385 points
Other Parts Discussed in Thread: ADS131A04

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/627263/ads131a04-how-to-read-channel-data-faster

部件号:ADS131A04

您好! 我正在使用MSP432与ADS131A04 ADC进行通信,它使用32位字(M1 =1),异步中断模式(M0 =1),无干扰代码验证(M2 =0),外部参考电压和16.384MHz晶体,高分辨率模式-24位。 我想以10.24kHz数据速率使用ADC。

问题是在有新数据可用之前,我无法足够快地读取通道数据。 在10.24kHz时,我需要读取最大值~100us。 我已附加以下逻辑分析仪捕获(可使用免费的Salae Logic Pro软件打开;通道4为DRDY):

1.1kHz 数据速率,1MHz SPI时钟-字节时间为8us,字节间时间为~8us,字词时间~314us;

2.1kHz 数据速率,4MHz SPI时钟-字节时间为4US,字节间时间为~10us,文字时间~253us;

3.1kHz 数据速率,8MHz SPI时钟- 字节时间为1us,字节之间的时间为~7US,文字时间~170us;

4.10.24kHz数据速率,8MHz SPI时钟- 字节时间为1us,字节之间的时间为~7US,文字时间~170us;您可以在读取所有数据之前看到DRDY发生变化;

您可以找到随附的示波器屏幕捕获,显示 1kHz数据速率下的Miso,24MHz SPI时钟。 这些行是构成单词的20个字节,单词的传输持续时间为~170us。

我需要一个小于100us的字传输时间才能及时读取下一个示例。

读取通道数据时,该字有20个字节。 我可以使用24位字,获得5个字节,但这还不够。 24MHz是MSP432可以提供的最大SPI时钟,25MHz是ADC接受的最大SPI时钟。

这是我的配置:

#define ADS131A04_A_SYS_CFG_VALUE  0x60
#define ADS131A04_D_SYS_CFG_VALUE  0x3C
#define ADS131A04_CLK1_VALUE       0x02
#define ADS131A04_CLK2_value       0x26 // 0x26用于10.24kHz数据速率,0x20用于1kHz数据速率#define ADS131A04_AD01A04_AD04_value 0x00#define ADS1301A04_AD04_A04_AD014_AD1A04_AD014_AD014_AD014_AD014_AD014_AD1A014_AD014_AD014_AD014_AD014_AD014_AD1A014_AD014_AD014_
    
       
       
       
       

如何才能更快地读取数据? 它是MSP432还是ADC的限制?  必须有一个解决方案,因为如果不能及时读取样本,提供更高的数据速率是毫无意义的。

e2e.ti.com/.../Captures.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Cristian:

    在这种情况下,限制在MSP430,而不是ADS131A04中。 查看10.24kSPS捕获的LA图示,您需要在字节之间花费7.35uS空闲时间,然后在字之间花费15.75uS空闲时间,这样您就可以在中断服务例程中稍微加快速度。 如果您想在此处发布您的代码的这一部分,我们很乐意查看。 您还可以尝试向MSP430论坛发布查询,以了解他们是否对加快字节之间的传输有任何建议。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tom,您好!

    这是我的代码:

    对于(i =0;i < noSamples;i++)
        {
            while (adcSampleAvailable == false)//等待!DRDY
            {//map_PCM_gotoLPM0InterruptSafe
                ();//map_Interrupt_enableMaster()
                ;
            }
            adcSampleAvailable = false;
    
            //读取样本
            rxData =131A04; // stat_1 x 4字节+4通道x 4字节
    
            *(readDataCh1 + I)=(*(rxData +4)<16)|(*(rxData +5)<8)|(*(rxData +6));
            *(readDataCh2 + I)=(*(rxData +8)<16)|(*<+9)|(*(rxData +9);
            *(readDataCh3 + I)=(*(rxData + 12)<<16)|(*(rxData + 13)<8)|(*(rxData + 14));
            *(readDataCh4 + I)=(*(
        
    
    
    
        GPIO数据+ 16)<16)|(*(rxData + 17)<8)|(*(rxPchar + 14)=无符号ADPS1_无符号行距_无符号_无符号_无符号_无符号_无符号_无符号_ //!ADC_SPI_CS = 0
    
        int字节=0;
        int count = bytesNumber;
        if (bytesNumber > ADS131A04_MAX_RX_bytes) count = ADS131A04_MAX_RX_Bytes;
    
        for(byte =0; byte < count;byte+){
        
            while (adcTxSafe Flag = false){//map_SPM_Span_Span_Spmad_=
            
                
                
            
            
    
            //虚拟写入时超时数据
    
            (adcRxFlag == false)
            {//map_PCM_gotoLPM0InterruptSafe()
                ;
                //map_Interrupt_enableMaster();
            }
            adcRxFlag = false;GPIO
    
            数据[byte]= MAP_SPI_receiveData(GPIO_B0_base);}MAP_Interrp_status_GPIO状态
        
    
        
    
        = rp4_rp_rupt_gPI_gPI_gPI_gPI_gPI_rp_rp_1_gPI_statusp_gPI_gPI_gPI_gPI_rp_rp_gp_gp_gp_gp_gp_gp_gp_statusp_gp_gp_gp_gp_gp_gp_gp_gp_gp_gp_g
    
    
    
    
        
        
        
        IF(status & GPIO _PIN0)// ADC !DRDY
        {
            IF (MAP_GPIO _getInputPinValue(GPIO_PORT_P4, GPIO _PIN0)=0)
            {
                adcSampleAvailable= true;
                MAP_Interrupt_DisableSleepOnIsrExit();
            }
        
    }}中断
    
    EUSCFlag 0_IRQSPI (void)状态={ EUxSPI_Enstatus_Estatus_Estatus_US_SCI_0
    
       
       
       
       
       
           
       ;Estatus_US_SCI_DEB0 =
       
       
           状态{{状态=}中断SCI_SCI_SIG_SIG_US_USB_US_USB0
       
       MAP_Interrupt_DisableSleepOnIsrExit();
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的建议。 我设法找到了一个我在本文中描述的解决方案:
    e2e.ti.com/.../231.3177万
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    酷!

    感谢您告知我们!