⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
6个帖子/ 0新
最后一篇
scsims.
离线
最后一次露面:1年3个月前
加入:2017-10-17 11:07
试图弄清楚差异adc结果

你好,

我们正在努力解决如何使用差异ADC。首先,从GP_ADC_RESULT_REG返回的值似乎比我们所预期的要高的一个值,其次是当测量的电压差实际增加时,差值在幅度幅度降低:

1)我们对数据表的读取表示在P0_0和P0_1之间配置差分ADC操作时,结果是10位2的补码二进制整数,其将允许在-1.2V的0x200(-512)的全尺度读数和0x1ff(+511)+ 1.2V。这意味着每个ADC计数大致等于测量值的2.3mV(即1.2 / 512 = 2.34E-03)。

我们试图使用DA14580 Devkit基本差分ADC来测量惠斯通电阻桥的2臂之间的电压差(连接到左手侧的P0_ 0,连接到右手侧的P0_1)。使用示波器,我们测量P0_ 0为1.54V,P0_1为1.26V。

1.26 - 1.54 = -0.28V

因此,我们期望ADC_Get_Sample()返回的ADC计数在0x388(-120)左右的某个地方,但实际上它在0x235(-459)〜= -1.07V左右。

我们误解了数据表吗?将ADC配置为单端似乎正常工作。

2)我们的惠斯通桥配置为测量NTC热敏电阻。当该热敏电阻的值随温度的变化时,随着温度加热时,电阻减小,因此通过P0_1测量的电压相对于在P0_ 0处测量的电压降低。因此,差分ADC结果应该变得更加负,但实际上它实际上变得更加负因为某些原因。

我们的桥梁在顶部有一个18k的左手臂(连接到P0_ 0),底部有17.7克电阻,右手臂(连接到P0_1)由顶部和名义上10k的18k组成(@ 25C)底部的热敏电阻。测量时热敏电阻的电阻约为12.5k,当我们轻轻温暖时,减少到11k。

我们的固件呼叫以下功能:

在睡觉处理手上唤醒
adc_calibrate()

在我们的app_easy_timer()回调处理程序内

adc_init(0,gp_adc_sign | gp_adc_chop,0);//差动ADC,签名反转和切块取消偏移电压,不要切换3.6V衰减器
adc_enable_channel(0);// p0_ 0和p0_1
int32_t adccount = adc_get_sample();
... //执行计算等。
adc_disable();

设备:
scsims.
离线
最后一次露面:1年3个月前
加入:2017-10-17 11:07
我们发现了

我们已经发现编码可能是符号+幅度,而不是2的COMP(我们要求将此信息添加到数据表中)。即0x3FF是最负值(理论上-1.2V)和0x1FF是最正值(理论上+ 1.2V)。

如果我们在范围上测量-0.3v和p0_1之间的范围,则ADC报告0x233(-51)。如果我们将导线切换到P0_0和P0_1(使差异现在+ 0.3V),则ADC返回0x1C4(452)的值。

但是,如果我们接地P0_ 0和P0_1,则某些原因ADC返回0x0FF。肯定应该返回0x000?

scsims.
离线
最后一次露面:1年3个月前
加入:2017-10-17 11:07
差分ADC结果

差分ADC结果实际上看起来是标志和幅度的组合,2的补充。将ADC_GET_SAMPLE()结果转换为从-1024到+1023的符号整数的步骤如下:

  1. 检查位9以查看结果是否积极或负签名
  2. 如果位9是0,则比特0..8的结果是正的,但你必须采取比特0..8的二进制补充
  3. 如果位9是1,则结果为负,因此您必须屏蔽符号位并采取结果的补充

代码执行来自差异ADC的Get_Adc_sample()结果的上述调节:

/ *条件差分ADC结果将2的COMP整数与单个结束读数相同的比例* /
静态int32_t namalisedifferendedcount(Int32_t Adcc​​ount){
//标志和幅度
if(adccount&0x200){
Adccount =〜(Adccount&0x1ff);
} 别的 {
//积极的结果是出于某种原因消极的
Adccount =(〜Adccount&0x1ff);
}

//双倍以获得ADC计数与单个最终结果相同的比例
返回Adccount * 2;
}

我们发现的另一件事是,数据表似乎表明,差分ADC引脚之间的差异可以在-1180和+1180 mV之间,但额外的约束是始终必须始终为0到1180mV之间的两个引脚。嗯(至少没有衰减器启用)。

mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨scsims,

嗨scsims,

对于延迟响应,不幸的是,关于差异模式没有关于ADC的额外信息,并且在任何参考设计中没有使用它,因此我必须运行一些实验以获得以下结论。在差分模式中,当电压差为零时,ADC的输出应接近0x1FF。当电压差为-1.2伏时,ADC的输出应接近0x0,并且当电压差为+1.2伏时,ADC的输出应接近0x3FF。据我所知,当您使用差异模式时,这是映射。

谢谢pm_dialog.

scsims.
离线
最后一次露面:1年3个月前
加入:2017-10-17 11:07
嗨pm_dialog,

嗨pm_dialog,

谢谢你看了这个,你的结论比我所观察到的行为更加有意义。如我在评论中提到的那样,我们可能已经将引脚驱动到电压限制之外。我会看看我是否可以在某些时候得到一些时间来重现你的实验。

谢谢,

scsims.

scsims.
离线
最后一次露面:1年3个月前
加入:2017-10-17 11:07
你好pm_dialog,

你好pm_dialog,

我现在已经复制了你的结果,但有一个例外,我们假设P0_ 0是AIN-和P0_1是AIN +然而,它们是相反的方式。


p0_1 = 0mV,p0_ 0 = + 1180mv然后get_adc_sample()返回0x3FF
p0_1 = 1180mv,p0_ 0 = 0mV然后get_adc_sample()返回0x000

我们也清楚地使用其范围之外的ADC输入,我们假设ADC最大电压仅为P0_0和P0_1达到+1180 mV,但实际上,P0_ 0和P0_1也仅额定到0mV至+之间的额定值1180mv单独。

再次感谢您的帮助。

scsims.