各位好:
如下图所示,我们采用ADS1241采用AVDD=5V,Vref=2.5V,AIN5引脚的待测量信号为0~5V,AIN6为2.5V基准电压,用于测量-2.5V~+2.5V的应用场景
源码初始化步骤如下:
ba_ads_writeReg(ADS1241_SETUP, 0x00) ; //PGA=1
ba_ads_writeReg(ADS1241_MUX, 0x56); //AIN5+, AIN6-
ba_ads_writeReg(ADS1241_ACR, 0x00); //Bipolar、RANGE=±VREF、DR=00(30Hz)
ba_ads_writeCmd(ADS1241_SELFCAL); //失调和增益校准
。。。。等待6个DRDY周期
读取OCR=0x000101, FSR=0F0701
……
DRDY就绪后调用RDATA命令读取AD采样值
AIN5=3.111V时,AD值为0x1FD81F,在稍大些时,AD采样值变成从0x000000开始
请问是什么原因导致这个现象?
user151383853:
信号大了会溢出, 结果应该是 FFFFF,全0的情况应该不是溢出,端口断开?
Amy Luo:
您好,
寄存器ACR中BUFEN bit 未使能,但buffer上拉使能了,buffer是否使能与输入信号范围有关,建议硬件与软件设置统一起来再看采样情况。
user6216951:
回复 user151383853:
是0x1FFFFF就发生溢出了
user6216951:
回复 Amy Luo:
BUFEN引脚和ACR的BUFEN位都为1时才会使能Buffer,我们不准备启用BUFFER功能,因此,将ACR的BUFEN位置为0
Amy Luo:
回复 user6216951:
采样值异常可能与您的SPI读写时序也有关系,注意,当POL pin为高时,数据在SCLK的上升沿锁定,SCLK应该在HIGH上空闲。
user6216951:
回复 Amy Luo:
Hi Amy,
下图是利用示波器靠近ADS1241的SCKL和Din引脚,通过WREG命令将IOCON寄存器配置为0x13捕获的图片,然后利用RREG读取IOCON寄存器的值一直都等于0x07, 麻烦帮忙抽空看看问题可能出在哪?
user6216951:
回复 Amy Luo:
Amy,
我们在发送RESET命令后等待14ms后,利用RREG命令读取SETUP寄存器值,发现与数据手册描述的值不一致,烦请帮忙抽空看看可能发生的原因
SETUP (Address 00H) Setup RegisterReset Value = iiii0000
1、发送的复位命令波形:
2、RREG读取SETUP寄存器波形:
Amy Luo:
回复 user6216951:
看您测的波形,时序操作好像是在sclk下降沿进行操作的,当POL pin为高时,应在SCLK上升沿进行读写操作。
user6216951:
回复 Amy Luo:
由于POL=1,示波器部份确实是先进行Din置位,然后操作进行SCLK操作,逻辑分析仪部份就是SCLK先拉低,Din置位,延迟再SCLK拉高,但从Saleae的第三个字节的波形来看,ADS1241的Dout引脚感觉像是在SCLK接高时置位
user6216951:
回复 Amy Luo:
Amy,
从我们的碰到的现象来看,通过WREG写入IOCON=0x13,将AIN0、AIN1、AIN4配置为Data引脚 ,再写入DIO值对应的引脚都可以得到正确的输出,这样是否能够说明MCU向ADS1241的写入的通信是正常的,但利用RREG和RDATA命令从ADS1241读取数据时,没有得到正确的预期,针对这个现象,我已更换了3片ADS1241,同时,也对POL从原来的1调整为0进行了反复的验证,同时,也反复核对了数据手册中的下图:
下图为ADS1241晶振频率:4.9152MHz,POL=0,在发送复位命令后,等待14.6ms后,利用RREG命令读取SETUP寄存器值的波形截图:
根据上图可以对照数据手册: