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.

[参考译文] ADS8321:ADS8321接口问题:无法使 ADS8321正常工作

Guru**** 652440 points
Other Parts Discussed in Thread: ADS8321, REF6025
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/937918/ads8321-ads8321-interface-problem-cannot-get-ads8321-working

器件型号:ADS8321
主题中讨论的其他器件: REF6025

尊敬的 TI 支持团队:

我正在尝试将 TI 的 ADS8321 16位 ADC 与 tensy 3.5 (Arduino 兼容平台 MCU)连接。 (VIN-= 2.5V、Vref=2.5V、Vin+为电压输入)。

ADC 电压为5V、而 Tensy 电压为3.3V。 我已 İnput 数据表、Δ I 高电平和低电平对于 Tensy 逻辑电平是可以的。 此外、Tensy 输入与 ADC 输出正常。 我已经按照数据表中的说明进行了通信。 问题是我无法获得稳定的结果。 例如、当我尝试使用 ADC 读取3.3V 电平时、它显示不同且错误的值。 虽然输入电压(例如3.3V)始终相同、但我从 ADC 获得的值并不相同。 ADC 位于 PCB 上、而 Tensy 也位于同一 PCB 上、它们与 PCB 轨道相连。 我检查了接线、它也是正确的。

我在代码中未使用 SPI。 我只是在做一些砰砰声。 对于 SPI 器件、我不知道如何通过查看器件数据表来实现 SPI。 如果可能、您可以为 SPI 通信提供一些伪代码(通过 SPI 等发送什么内容)。  

我正在连接我的代码和接线图。 请帮我解决问题。

感谢你的帮助。

阿赫迈特

//ADS8321电流测量、ADC 16位
const int clock_pin = 3;
const int data_pin = 4;
const int cs_pin = 5;

void setup (){
pinMode (clock_pin、输出);
pinMode (data_pin、输入);
pinMode (cs_pin、 Output);
}

void loop(){
float m = readadc();
sery.println (m);
delay (1000);
}


float readadc(){
int16_t adcvalue = 0;
digitalWrite (cs_pin、low); //为

(int i = 0;i < 6;i++){选择 ADC
digitalWrite (clock_pin、HIGH); //进行采样的6个时钟周期
//delayMicroseconds (5);
digitalWrite (clock_pin、low);
//delayMicroseconds (5);
}

//从 ADC 读取位,//数据读取时钟
(int i = 16;i > 0;i---){// 16读取
//周期时钟
digitalWrite (clock_pin、HIGH);//将时钟设为高电平
adcvalue |= digitalRead (data_pin)<< i;//读取数据位
digitalWrite (clock_pin、low);//将时钟设为低
电平}
float a;
a=(adcvalue_32768)*5/65536;//转换为0-5V 范围

digitalWrite (cs_pin、high); //关闭设备
返回 a;
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ahmet、

    结果是否在预期值的1%以内(噪声很大)、或者它们是否完全不正确?

    是否可以使用逻辑分析仪或示波器捕获 DCLOCK、DOUT 和/CS?  这将有助于确认您是否满足所有时序要求。

    以下是需要考虑的一些事项:

    1、 DCLOCK 的最小值为24kHz、任何较慢的频率、转换器将不会提供正确的结果。

    2. 您的代码看起来正确,但除外  adcvalue |= digitalRead(data_pin) << i; // Read data bit.  I think you may need to shift by (i-1).

    此致、
    Keith Nicholas
    精密 ADC 应用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Keith、

    感谢你的答复。

    结果是不同的。 例如、我的读数为2.56V、4V 3.2V、这不是噪声。 每次变化时、都不在预期值的1%以内。

    我已经改变了换档、但结果仍然不稳定。 我还使用不同的 ADS8321更改了 ADS8321、但仍然没有更改。

    我有示波器、我将尝试捕获时钟、数据和#CS。 我还猜测时钟方面存在一些问题。  

    此致、

    阿赫迈特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ahmet、

    是的、我同意这与噪声无关。  但是、如果基准不稳定、则可能会出现较大的读数误差。  请在 REF 引脚上添加一个额外的10uF 电容、以查看这是否会改善或解决问题。

    在您能够提供图解后、我将查看您的时序。

    谢谢、
    Keith

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Keith、

    我已获取 SCLK、Data 和#CS 线路的示波器图。 时钟频率调整为48.8kHz。 (我对代码施加10微秒的延迟、以获得大约50kHz 的频率)。 ADC 读数为3.3V。 在电路板上、2.5V 基准来自2.5V 电压基准 IC (MCP1501、0.1%容差)、非常接近 ADS8321。 此参考仅用于 ADS8321。 没有其他 IC 共享此参考。 我将在参考器件中添加10uF。

    ADC 的输入端有用于电压钳位的钳位二极管(BAT54)。 我还移除了它、以查看它是否会导致某些问题、也是在前面、我刚刚用电缆接触输入引脚的电压进行测试。 这次我焊接了它、同样是不同的值。 但情况有所改善。 这一次、这些值在3.4和3.21V (对于3.3V)之间变化

    很抱歉、照片太大了。

    我将检查降低采样率是否会提高 ADC 读数精度。

    感谢您的帮助、

    此致、

    阿赫迈特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ahmet、

    我认为导致您读数误差的可能原因是参考电路。  您已将其连接到基准和 ADC 负输入、两者均为开关电容器输入。  基准输入需要一个大电容器以及基准的快速响应、以保持恒定的2.5V 电平。

    MCP1501是低功耗基准、响应时间不会很短。  我建议您查看 MCP1501数据表中的图5-4和5-5、以获得有关在不导致不稳定的情况下添加额外电容的指导。  您还可以将基准与高速缓冲器一起使用、例如 REF6025、以直接驱动引脚。

    如果存在这种问题、为 Vref 添加额外的电容以及降低 ADC 转换速率、则应提高读取精度。

    如需进一步讨论、请查看 TI 高精度实验室、其中讨论了 SAR ADC 的基准驱动器要求。

    https://training.ti.com/node/1139107?context=1139107

    此致、
    Keith

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Keith、

    感谢你的帮助。

    我将设计新的电路板、其中我想使用2个 REF6025、一个用于 Vref、一个用于负输入、以了解它将如何提高精度。 我还将研究您提供的链接。 我会将该板设计为独立板、如果可以、我会将其连接到原始板。

    再次感谢您提供的信息和帮助。

    此致、

    阿赫迈特