如何根据读数计算出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 |
即: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();//得到转换值。
我给您上传一下附件。您帮我看下吧。我着实不知道该怎么计算。。。