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.

[参考译文] ADS8698:SPI 通信和 CLK 时序、即使连接了输入 AIN、也从 ADC 获取相同的非零值

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1430907/ads8698-spi-communication-and-clk-timing-getting-same-non-zero-value-from-adc-even-if-input-ain-is-connected-or-not

器件型号:ADS8698
主题中讨论的其他器件: ADS8688

工具与软件:

希望大家都做得好

我想问一些帮助、我需要 使用 ADS8698进行数据采集、并且由于我对 SPI 非常陌生、我不明白我到底在做什么
请提供帮助。

我具有采用 ADS8698的以下电路板
https://www.aliexpress.com/item/1005006570383341.html
ADS8698产品说明书
https://www.ti.com/lit/ds/symlink/ads8698.pdf?ts = 1730097926835&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FADS8698 

我将 SPI 引脚和电位计连接到 Raspi 5V 的 V 和 Raspi GND 的 GND、中间 PINT 连接到 AIN0
电路板 VIN => 5V raspi
电路板 GND => GND raspi

下面是我的代码、如果我是否将输入连接到 AIN0、我将从 ADC 获得相同的值、并且即使我只是在 RST 命令之后读取响应、当我打印 adc_val = 255时、我仍然会获得相同的值

将 ADC 值转换为如下电压也是否正确?

adc_val  *  10.24/  (2  **  18)
Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# config.py ---------------------------------------------------------------
import·time
import·RPi.GPIO·as·GPIO
import·spidev
RST_PIN·=·25
CS_PIN·=·8
SPI·=·spidev.SpiDev()
SPI.open(0,·0)
def·digital_write(pin,·value):
· ··GPIO.output(pin,·value)
def·delay_ns(ns):
· ··time.sleep(ns·*·1e-9)
def·spi_writebyte(data):
· ··SPI.writebytes(data)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# ads.py ---------------------------------------------------------------
import·config
import·RPi.GPIO·as·GPIO
CMD_REG·=·{
· ··'NO_OP'·· ·:·0x0000,·# Continue operation in previous mode
· ··'STDBY'·· ·:·0x8200,·# Device is placed into standby mode
· ··'PWR_DN'·· :·0x8300,·# Device is powered down
· ··'RST'·· · ·:·0x8500,·# Program register is reset to default
· ··'AUTO_RST'·:·0xA000,·# Auto mode enabled following a reset
· ··'MAN_Ch_0'·:·0xC000,·# Channel 0 input is selected
· ··'MAN_Ch_1'·:·0xC400,·# Channel 1 input is selected
· ··'MAN_Ch_2'·:·0xC800,·# Channel 2 input is selected
· ··'MAN_Ch_3'·:·0xCC00,·# Channel 3 input is selected
· ··'MAN_Ch_4'·:·0xD000,·# Channel 4 input is selected
· ··'MAN_Ch_5'·:·0xD400,·# Channel 5 input is selected
· ··'MAN_Ch_6'·:·0xD800,·# Channel 6 input is selected
· ··'MAN_Ch_7'·:·0xDC00,·# Channel 7 input is selected
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# main.py ---------------------------------------------------------------
import·ADS
import·RPi.GPIO·as·GPIO
try:
· ··ADC·=·ADS.ADS()
· ··ADC.ADS_init()
· ··# ADC.ADS_Write_Cmd(ADS.CMD_REG['MAN_Ch_0'])
· ··# result = []
· ··while(1):
· · · ··adc_val·=·ADC.ADS_Read_ADC_Data()
· · · ··print("ADC =·%lf·· · · ·"%(adc_val·*·10.24·/·(2·**·18)))
· · · ··print(adc_val·)
except·:
· ··GPIO.cleanup()
· ··print·("\r\nProgram end · · ")
· ··exit()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
如果您能解释如何正确操作、我会很感激、我希望获得150Ksps。 我想它主要是关于 CLK 时序?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ernist:

    欢迎来到我们的 e2e 论坛!  这里一切都很好!  您能否提供一个原理图、其中显示了如何将购买的 PCB 连接到控制器?  此外、显示 SCLK、CS、SDI 和 SDO 的逻辑分析仪或示波器屏幕截图比您提供的代码片段更有用。

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

    我已经使用 BCM2835将 PCB 连接到 Raspberry Pi 4B。 遗憾的是、我没有逻辑分析仪或示波器。 下面是 Raspi 到 PCB 的连接和 URL 到 PCB 的原理图。

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

    连接看起来不错、我假设您的电线相对较短。  您能否使用示波器或逻辑分析仪?  如果没有这个用于调试的资源、就很难实现。

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

    尊敬的 Ernist:

    找到一个朋友或洛杉矶有什么运气?

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

    抱歉、对象初始化在提供的代码中的 main ()函数中  
    我希望你能解释我的错误
    我仍然认为我发送字节的方式错误或按位操作错误  

    请告诉我应使用 示波器测试什么内容  
    感谢你的帮助

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

    尊敬的 Ernist:

    仔细检查代码需要一些时间。  简单来说、您能否告诉我您所处理的输入电压是什么类型、以及您期望的转换结果与实际转换结果是什么?

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

    你好,汤姆对不起迟回复  

    我正在使用电位计在通道0上传递3.3V 电压、预计会获得3.3.3V 电压、但输出范围为2.1V 至2.8V、波动很大、我期望的是恒定值。 如果我断开通道上的输入、我得到的电压大约为4.0v、我想这是数据表中提到的无效输出。  

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

    尊敬的 Ernist:

    尝试在 J1处将 AIN0短接至地、并查看得到什么样的转换结果-它 在 0处应该相对稳定、也许有几个 LSB 切换。

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

    "怎么样?  您是否取得了进展?

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

    大家好、Tom、我最近更换了新的 ADS8688、一切都使用它进行了工作。 所以决定继续使用。 感谢您的帮助。 在我们结束该主题之前、我想问一下是否有方法可以获得精确的采样率? 我设法获得了大约150ksps 的采样速率、应用延迟以接近每个样本之间的恒定周期、我想由于每次都需要相同的32个时钟、因此每个样本的采样时间应该保持不变、对吧? 采样率仍然存在一些波动、大约为0.015%、这是可以接受的、但如果可以的话、我可以了解一下。 是否只能通过使用计时器和中断的低级硬件管理实现? 如果您有消息来源、我很乐意与您分享。 否则、我的问题会得到解决、感谢您的支持/  
    祝你度过美好的一天!  

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

    尊敬的 Ernist:

    很遗憾、我没有为您准备的代码。  转换时间由内部时钟固定-采集(采样)时间具有最小值、但没有最大值-基本上 ADS8698会在转换过程完成后立即返回至采集模式。  如果您的 CPU 上有一个良好的计时器、则可以使用它来切换/CS 输入并启动一个转换周期。

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

    谢谢你