我正在使用ADS1115测量两个不同电流感应电阻器中的电压。 为了保持低耗散,电阻器很小,我使用的是+/-0.256V全刻度范围和差分感应。
我看到的基本问题是,当差分电压达到+64mV (代码0x1FFF)时,输出代码似乎环绕到0x0000。 例如,~65mV给出0x009A。
我制作了一个简化的电路来向PCB施加小电压,这样我就不必通过感应电阻器产生更大的电流。 同一PCB上的相同代码(电阻器更改除外)表现出相同的行为。
在测试电路中,我在C179之间对R134短路,以从电路中拆下第二个感应电阻器。 通过改变电位计RV,我可以施加40-80mV的电压。 我还更改了数值,以便我可以得到低于40mV的电压。 如上所述,当我将RS (也是C178)上的电压从0提高时,代码会按预期增加。 当它们通过大约64mV时,它们似乎会重置为0x0000并再次开始增加。
- 40mV => 0x13F7 (或转换为电压时约40mV):良好
- 55mV => 0x1BDF (55mV):良好
- 65mV => 0x009A (1.2mV):不好
- 73mV => 0x045C (8.7mV):不好
看起来它是在绕线,或者某个东西正在将最高的3位归零。
更多详细信息:
当我开始转换时,我使用配置值0x8B03,差分AIN0-AIN1,+/-256mV满刻度,单次激发模式,8 SPS, 比较器关闭。
我等待200毫秒,然后读取值。 我正在查看我读取的原始字节,所以我很确定驱动程序中不存在数据转换问题。 此外,我还可以读回各种配置中的配置寄存器,并从更重要的位中获得所期望的内容。 我这样做是因为我想,“如果驱动程序中隐藏的内容是按位将字节与0x1FFF等效,从而删除较高的位,该怎么办?” 我以这种方式测试了单端AIN3配置,以便设置BITS CONFIG[14:12],并成功地将其读回。
这款处理器是一款Atmel SAMD20处理器,它使用Atmel软件框架的单一特性,但是I2C总线上还有其他一些设备似乎正在工作,所以我很难认为那里有什么问题。 此外,我确实获得了Vin < 64mV的有效读数。
在测试电路中,AIN1以上为接地;在实际电路中,由于轨迹电阻,AIN1略高于接地。 但电流是单向的,因此在两个电路中为0.256V > AIN0 >= AIN1 >= 0V。 从设备数据表中可以看出,共模输入范围可以包括接地,所以我在那里看不到任何问题。
测试电路正在检查直流电值。 PCB的其他部分可能会发出一些噪音,但我看不到大量噪音。 我在采样几乎相同的输出代码后获得样本。
我尝试了其他有效的配置位,数据表中说这些位也会导致+/-256mV FSR,但没有效果。
虽然我的应用不需要它,但在测试电路上,我尝试反转AIN0和AIN1,以使差分电压为负。 这似乎也不能正常工作。 -7mV给出0x1C00 (转换时为+56mV),-62mV给出0x0117 (+2mV),-65mV给出0x1C80 (几乎与-7mV的情况相同)。
多个主板显示此问题。 我的同事明天将尝试使用ADS1115原型板和Raspberry Pi,看看他是否可以这样复制。
我肯定是错过了一些明显的东西,但我不知道它是什么。 芯片的配置非常简单,似乎易于使用。 欢迎您提出任何建议。
此致,
杆
