Part Number:ADS1256
你好,最近使用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. 如果以上理解有误,用什么方式可以满足我的使用需求?
我的使用流程如下:
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);
}
Amy Luo:
您好,
1、按预期数据速率可以正常输出数据的最大数据速率是多少?SPI时钟 sclk是多少?以看下您使用的SPI时钟是否满足时序要求。
2、 Table 15 是数据稳定延迟,应该不影响数据速率。如果使用多路复用器会影响数据速率,如Table 14表示所示。
,
user4869866:
1.我的spi的SCLK是250ns高电平,250ns低电平的方波,两个SCLK间隔也是10us,设置都满足手册要求,并且可以正常写入寄存器,低频时可以正常读取AD数据。我把SCLK改成400ns高电平,400ns低电平的方波也无法利用RDATAC连续读取。
2.我没有多路复用,如果用户不能得到30K的稳定数据,例如只能得到6K的稳定数据,那么采样率不应该是6K才对?
3.我试过,sps设置为30k,每次DRDY低电平时,发一次RDATA,读取3个byte,可以读到数据,最终获得的数据率约为5~6k。
,
Amy Luo:
1、您使用的CLKIN是多少?SCLK有最小和最大周期限制,是否满足下面表格要求:
2、如果是单通道连续采集的话,应该是设置多少就是多少
3、RDATA不是连续读取,数据速率会低于设置速率。
,
user4869866:
您好,
Amy Luo 说:2、 Table 15 是数据稳定延迟,应该不影响数据速率。
根据您这句话的意思,“2、 Table 15 是数据稳定延迟,应该不影响数据速率。”,ADS1256达不到30k稳定数据输出,如果我需要30k数据,且每帧数据都代表当前最新AD值,是做不到的,对吗?
我的CLKIN是7.68MHz,SCLK period 为500多ns(800ns也尝试过),介于数据手册要求的4*tclkin~10*tdata。
,
Amy Luo:
我理解如果使用单通道连续采集的话,应该是可以达到30KSPS的,您测试可以正常输出数据的最大数据速率是多少?
,
Amy Luo:
您使用1KSPS或2KSPS数据速率是否可以正常采集数据?如果不可以的话,我建议您附上通信波形(CS、DRDY、SCLK、DIN、DOUT),我想具体看下通信时序
,
user4869866:
好的,今天我把几个sps下的spi通信波形附上。
另有一个关键问题,我想通过您,咨询一下TI官方,
SPS=30k时,spi输出的每秒30K×24bit数据是不是每一个都是稳定的最新值?
如果不能满足,我需要更换方案。
,
Amy Luo:
好的,我去确认下这一点。
,
Amy Luo:
我已确认。表15中的信息与通过信道的多路复用有关。当设备通电和改变输入多路复用器时,ADC数字滤波器需要一些时间来稳定。如表15所示,当以30kSPS的速度采样时,这需要5个DRDY周期。这意味着第一次结算的转换结果将在约30 kSPS/5=6 kSPS时可用。
但是如果在同一通道上连续采样,则在每个后续DRDY周期后,第二个和后续转换结果将在每个DRDY信号时有效。
因此,第一次转换结果将延迟表15中指定的时间,但第一次转换结果之后的所有转换结果将以选定的数据速率(在您的情况下为30kSPS)有效。
所以,如果在同一通道上连续采样不能达到30KSPS的话,应该是通信时序上出了问题,还是建议您附上通信波形具体看下通信时序。
,
user4869866:
收到,感谢您的深入解答!我再确认一下时序的问题,如果周末还没有实现,再附上波形请教!
,
Amy Luo:
好的
,
user4869866:
感谢您的耐心解答,目前已成功接收30K数据。