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.

如何根据读数计算出ADS1247测量到的电压值是多少?

Other Parts Discussed in Thread: ADS1247

有不少传感器元件,可以根据直接的模拟信号电压输出值算出其被测量的实际值。

因此,如果能根据ADS1247的时间读数,就能计算出其被测元件的输出电压,那就可以算出实际被测量。

我初期预计电压的计算方法应该是:Vin(实际电压值) = Dout(原始读数)/ 8388607 × 4 × 2.048V。

为了检验我通过一个滑动变阻器,来模拟这种电压变化。

ADS1247采取电压模式进行配置:MUX0 = 0x01,VBIAS = 0x00,MUX1 = 0x38,SYS0 = 0x00,IDAC0 = 0x00,IDAC1= 0xFF。

后来发现测量的结果,大出乎我的意料之外:

--------------------------------------------------------------------------------------------------------------------------------------------------------------

为了了解和验证ADS1247读数与输入电压之间的关系,进行了一组实验数据对比。
AVDD电压:4.687V
采取的ADS1247模式为0x0100380000FF,即采取标准电压模式,未采取增益,采样率为5SPS。
编号
万用表测量值(mV)
设备读数
变换值
1/8388607
差值
Δ
比值
Κ
简要说明
1
4.8
-29500
3.45
1.35
1.39
2
4.2
-24700
2.94
1.26
1.43
3
10.7
-64000
7.63
3.07
1.40
4
10.3
-62200
7.41
2.89
1.39
5
34.9
-211500
25.2
8.7
1.38
6
34.8
-210450
25.1
1.38
7
52.0
-315240
37.58
1.38
8
102.8
-623220
74.27
1.38
9
208
-1261499
150.38
1.38
10
407
-2468700
294.29
1.383
11
801
-4855085
578.77
1.384
在此ADS1247芯片上表现出明显呈比例关系。
即:Vin(实际)=Dout(实际读数)/ 8388607 × 1.38。
--------------------------------------------------------------------------------------------------------------------------------------------------------------

这种情况是对的吗?它的实际计算应该是这样的么?

  • 你好,没有明白你的表格差值和比值是什么意思?你做这个实验的目的是什么?是验证输出代码与输入电压的关系吗?

    另外,万用表用的是哪种型号?ADS1247是24位的AD,你的万用表精度很可能都没有ADS1247的精度高,那你这样测量是不合理的。建议用八位半的万用表,至少也要六位半才可能有意义。

  • (1)表格是为了研究:“万用表测量值”与“ADS1247数据输出/8388603”之后的值之间的关系。

    看看是线性偏差,还是线性比例关系。最后发现是呈线性比例关系。但是这个线性比例关系的比值不是所预想的数值。

    (2)万用表型号是Victor VC890C+。

    我就想知道如何根据ADS1247的数据输出算出前端的AIN1和AIN0之间的电压差是多少。您能给我一个推荐的公式么?

  • 1LSB=(VREF/PGA)/(2^23 – 1),输入与输出代码的关系可以参见数据手册Data Format部分,以及Table17,写的很清楚。

    你用的万用表是三位半的,精度很差,用它来进行测试结果是不可靠的。

    另外,在应用时还要注意输入Vin的范围,以及VIN+,VIN-引脚的电压,要在共模电压的范围内。也就是要满足数据参数full-scle input voltage,以及,common-mode input range的范围。

  • (1)您所推荐的公式我也用了,发现数值普遍比万用表的测量数值偏大,而且与万用表测量值呈一个固定的比例倍数。

    (2)我的万用表的确精度不算太高。但是测量ADS1247的标准参考电压VREF,测量结果就是2.047左右(仅最后一位跳动),说明误差不大。至少有三位有效数字是没问题的。

    (3)目前测试用的电压都在毫伏级别,且PGA=1,不会超过Full-scale input voltage,也在Commom-mode input range之内。

  • 你好,你的原理图是什么样的?输入信号源是什么提供的?

    可能系统和芯片本身会存在offset和gain error。芯片本身的offset可以利用校准被命令校准掉,gain error的话可以利用软件进行处理。

    我的意思是你的万用表测的不准,所以你的比较是没有意义的。

  • 输入的信号就是一个旋转电位器组成,分一部分电压输入。输入电压级别在mV。从AIN0和AIN1输入。

  • 仔细看了一下你的转换结果,误差不应该那么大,肯定是不对的。寄存器设置MUX1中的REFSELT1:0为11,为什么要讲参考连到REFP上?你的REFP上接了R10为什么?

    另外,你在VREFOUT上加了大电容,需要一定的建立时间,参照Table10,需要等待一定时间稳定后再读取结果。另外,此电容建议选取X5R,X7R 类型,可参考EVM。

  • (1)问题找到原因了:是833.33欧的电阻,也就是R10干扰了测量。

    (2)接上那个电阻的主要原因是考虑到电流测量模式。另外ADS1247的Application Report里面的RTD是有这个电阻的。

    (3)在撤掉R10以后,电压的测量值和万用表的测量值能精确吻合。说明万用表的精度没那么差,至少三位有效数字没问题。

    (4)变换的公式的确如DataSheet所描述:Vin(实际输入电压) = Dout(实际读数)/ 8388607 × 2.048V。

  • R10在RTD的用法中是不使用内部参考的,直接用R10上的电压作为参考电压,即采用比例测量的方法。如果你用内部基准,加R10就不正确了。谢谢你的回复。

  • 找到了更加简单的解决办法:MUX1=0x38修改成MUX1=0x30即可,不用撤销R10。这样电容电压模式均可以同时兼容。

  • 你好,我现在正在用ADS1247和PT100做一个测温项目。精度要求是0.5摄氏度。我按照TI给的参考电路画了板子。我用的是STM32作为MCU。现在的问题是我可以和ADS1247正常通讯了。但是我不知道该如何计算出测的的电压值或者电阻值。

    ADS1247WREG(ADS1247_REG_MUX1,0x38); //内部参考电压打开。
    ADS1247WREG(ADS1247_REG_IDAC0,0x06); //DOUT/DRDY pin functions only as Data Out (default) 并且1mA。
    ADS1247WREG(ADS1247_REG_IDAC1,0x03); // IDAC1->AIN0 IDAC2->AIN3.
    ADS1247WREG(ADS1247_REG_SYS0,0x26); //增益4,通信速率320sps

    SPI_ADS1247_SendByte(ADS1247_CMD_SYNC); //同步AD转换
    data22=ADS1247_ReadData_Ave();//得到转换值。

    我给您上传一下附件。您帮我看下吧。我着实不知道该怎么计算。。。

    ADS1247设计.rar