TI论坛
直播中

哼小曲

14年用户 1277经验值
私信 关注
[问答]

ADS1256无法通过spi获取到频率是30k 24bit的采样数据,怎么解决?


  • 你好,最近使用ADS1256,后端通过SPI连接STM32获取采样数据。
    我想达到的目标是:采样率为30K的单路采样,并通过SPI将数据以每秒30K 24bit的频率输出。
    目前遇到的问题是:
    1. 发送一次RDATAC命令,连续读取数据,但spi无法以30K的频率获得数据。现象是spi的sclk有波形,且满足时序要求,但DOUT管脚无输出。(10sps时,spi可正常通信
    2. 数据手册 Table 15. Data Settling Delay vs Data Rate,显示在SPS为30k时,需要5个DRDY周期才能获得新的数据(New VIN Data),如果按照这个理解,是不是ADS1256芯片无法提供30k的采样频率(至少用户无法得到每秒30k次的采样数据)?
    3. 如果以上理解有误,用什么方式可以满足我的使用需求?

    我的使用流程如下:[size=150%]
    1. 初始化
    // 高位在前Most Significant Bit First,
    // 自校准Auto-Calibration Enabled
    // 开缓冲 Buffer Enabled
    ADS1256WREG(ADS1256_STATUS,0x06);

    //放大倍数=1 PGA=1
    ADS1256WREG(ADS1256_ADCON,0x00);

    //SPS=30k   
    ADS1256WREG(ADS1256_DRATE, ADS1256_DRATE_30000SPS);

    //IO output  
    ADS1256WREG(ADS1256_IO,0x00);

    2. 设置通道(MUX)
    /AIN0 AINCOM
    ADS1256WREG(ADS1256_MUX, B00001000);  

    3. 同步(Synchronize the A/D Conversion),WAKEUP(Completes SYNC and Exits Standby Mode)
    SPI_WriteByte(ADS1256_CMD_SYNC);
    SPI_WriteByte(ADS1256_CMD_WAKEUP);

    4. 连续读取命令 Read Data Continuously
    SPI_WriteByte(ADS1256_CMD_RDATAC);

    5. 循环读取数据
    While(1)
    {
      //wait DRDY to Low 每次循环等待DRDY为低后开始读取
       while(HAL_GPIO_ReadPin(GPIOB, GPIO_ADS1256DRDY_Pin) == GPIO_PIN_RESET);
        while(HAL_GPIO_ReadPin(GPIOB, GPIO_ADS1256DRDY_Pin) == GPIO_PIN_SET);

       //recv Data, 3 Bytes
       SPI_Recv_Byte(ADSdata, 1);
    SPI_Recv_Byte(ADSdata+1, 1);
       SPI_Recv_Byte(ADSdata+2, 1);
    }

回帖(3)

李翰肃

2024-11-25 16:25:04
   您好,
1、按预期数据速率可以正常输出数据的最大数据速率是多少?SPI时钟 sclk是多少?以看下您使用的SPI时钟是否满足时序要求。
2、 Table 15 是数据稳定延迟,应该不影响数据速率。如果使用多路复用器会影响数据速率,如Table 14表示所示。
举报

夏日余晖

2024-11-25 16:28:09

1、您使用的CLKIN是多少?SCLK有最小和最大周期限制,是否满足下面表格要求:


2、如果是单通道连续采集的话,应该是设置多少就是多少

3、RDATA不是连续读取,数据速率会低于设置速率。


举报

h1654155272.9717

2024-11-25 18:08:32
针对您的问题,我提供以下解决方案:

1. 检查ADS1256的配置:
确保您已经正确配置了ADS1256的寄存器,特别是采样率、输入通道和SPI模式等参数。请参考ADS1256的数据手册,确保您的配置与所需的采样率和数据格式相匹配。

2. 检查SPI通信:
确保STM32的SPI配置正确,包括时钟频率、CPOL、CPHA等参数。同时,检查SPI的MISO(数据输入)引脚是否连接到ADS1256的DOUT引脚。

3. 检查DRDY引脚:
根据您的描述,ADS1256在30k SPS时需要5个DRDY周期才能获得新的数据。请确保STM32的GPIO配置为输入模式,并连接到ADS1256的DRDY引脚。在读取数据之前,检查DRDY引脚的状态,确保数据已经准备好。

4. 优化SPI读取代码:
在STM32的SPI读取代码中,您可以尝试以下优化:
   a. 使用DMA(直接内存访问)来提高数据传输速度。
   b. 减少SPI读取过程中的延时,例如,减少循环等待DRDY引脚状态的时间。
   c. 确保SPI读取过程中的时序要求得到满足,例如,CS(片选)信号的上升沿和下降沿之间的时间。

5. 检查电源和时钟:
确保ADS1256的电源和时钟信号稳定,以避免因电源或时钟问题导致的通信问题。

6. 调试和测试:
使用示波器或逻辑分析仪检查SPI的SCLK、MISO和CS信号,确保它们满足时序要求。同时,检查DRDY引脚的状态,确保数据已经准备好。

通过以上步骤,您应该能够解决ADS1256无法通过SPI获取到30k 24bit采样数据的问题。如果问题仍然存在,请参考ADS1256的数据手册,检查是否有其他配置或限制需要考虑。
举报

更多回帖

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