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.

[参考译文] ADS1256:数据不一致

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1319595/ads1256-inconsistent-data

器件型号:ADS1256

大家好!

我正在尝试实施我的第一个数据采集项目、其中我将 STM32 Nucleo-L476GR 与 ADC Converter ADS1256配合使用。

在读取数据时、我无法​​在通道 A0的单端模式下正确读取电压值。 首先、我尝试仅在一个通道上采集数据、以便稍后将其扩展到其他通道。 STM32 Nucleo-L476RG 模块只接受最大16位的数据大小用于 SPI 通信。 我已经尝试了在8位和16位之间变化、但没有获得结果。

我发送与此连接的代码。

感谢您的帮助。

ADS1256 STM 代码: /cfs-file/__key/communityserver-discussions-components-files/73/STM_2B00_ADS1256-code.txt

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

    尊敬的 Claudio Tasso:

    您能否更详细地解释一下您的问题:您是从 ADC 获得数据吗、但这是错误的? 您是否无法获得任何数据、但可以与 ADC 通信? 通信是否无法正常工作、但您可以看到来自 ADC 的信号吗? ADC 什么也没发挥作用吗? 您的帖子不清楚您遇到了什么实际问题

    通常、使用 ADC 诊断代码问题的最佳方法是使用逻辑分析仪。 这将告诉您发送到 ADC 的内容、ADC 发送到控制器的内容以及是否满足了时序要求。 然后、您可以将这些结果与代码进行比较、以确保 ADC 和控制器确实在执行您想要的操作。

    请发送逻辑分析仪数据、以便我们可以看到正在发生什么情况

    -Bryan

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

    您好、Bryan:

    首先感谢您的帮助。

    是的、我可以在 STM32和 ADS1256之间进行通信。 我可以在逻辑分析仪中看到发送的命令。

    我在发送 RDATA 命令后也在接收数据、但此数据不正确。 我不知道是否我不知道如何使用 uint8_t RawData[3]矢量接收数据,然后将其转换为24位。 我不知道 ADC1256发送的数据是否错误、或者是否有某个命令我错误发送。

    我是否要发送正确的命令序列来初始化器件?

    我是否要发送正确的命令序列来从器件读取数据?

    我发送一些逻辑分析仪的屏幕截图。


    谢谢。

    以下值均未连接到引脚 A0 - GND、该值应接近于0。

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

    尊敬的  Claudio Tasso:

    感谢您发送 LA 图表

    首先、您将需要设置逻辑分析仪、以在下降沿捕获 DOUT 上的数据。 正如数据表中所述、数据在上升沿移入 DOUT、因此您应在下降沿捕捉。 这是很容易改变与 Saleae la。 请重新发送具有正确捕获边缘的 LA 图表

    第二、还请注意、ADS1256具有二进制补码方案。 这显示在表16中。 因此、您在上一个图像中显示的数据看起来是非常小的负数。 在没有输入的情况下是可以实现的、因为这表明存在小的负偏移。 此外、当您执行这些测量时、您不应让输入保持悬空状态。 相反、将它们连接在一起、这样即可用作真短路、即两个输入处于相同的电位。

    您是否还能发送电路板的原理图?

    -Bryan

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

    Bryan、

    我按照你的指导遵循了指示。 I 关闭了 A0和 GND 之间的短路、并将 DOUT (MISO)配置为下降沿。

    您可以看到第一个命令复位(0xFE)

    发送后:

    SDATAC:0x0F

    阿德康

           WREG:0x50 | ADCON:0x02 = 0x52

           PGA1 - 0x00

    DRATE

           WREG:0x50 | REG_DRATE:0x03 = 0x53

           DRATE_1000SPS:0xE0

    SELFCAL:0xF0

    ###在无限循环内、而###

    多路复用

            WREG:0x50 | REG_MUX:0x01 = 0x51

           DRATE_1000SPS:0x08

    SYNC:0xFC

    唤醒:0x00

    RDATA:0x01

    然后…… RECEIVE DATA

    第一个字节

    第二个字节

    第三个字节

    为了处理二进制补码、我创建了以下代码:

    注释:STM32数据大小设置为8位

    //RDATA

    dataToSend[0]= ADS125X_RDATA;//0x01

    dataToSend[1]= 0x00;

    //HAL_GPIO_WritePin (GPIOB、CS_Pin、GPIO_PIN_RESET);//低电平

    HAL_SPI_TRANSMIT (&hspi1、dataToSend、1、HAL_MAX_DELAY);

    HAL_DELAY (0.00683);

    //读取 ADC 数据

    HAL_SPI_RECEIVE (&hspi1、&RawData[0]、1、0.1);

    HAL_SPI_RECEIVE (&hspi1、&RawData[1]、1、0.1);

    HAL_SPI_RECEIVE (&hspi1、&RawData[2]、1、0.1);

    HAL_GPIO_WritePin (GPIOB、CS_Pin、GPIO_PIN_SET);//高电平

    RAW[0]= RawData[0]

    RAW[1]= RawData[1]

    RAW[2]= RawData[2]

    uint32_t valorADC =(RawData[0]<< 16)| RawData[1]<< 8 | RawData[2]// msb

    IF (valorADC 和0x800000)

    {

    valorADC &= 0x7FFFFF;

    /*

    必须有符号整数才能使用二进制补码###第二选项)###

    int32_t adsCode =(spirx[0]<< 16)|(spirx[1]<< 8)|(spirx[2]);

    if (adsCode & 0x800000) adsCode |= 0xFF000000;//固定二进制补码

    //以浮点方式进行所有计算。 不要更改因子的顺序-->(adsCode/0x7fff)将始终返回0

    返回((float) adsCode *(2.0f * ads->Vref))/(ads->PGA * 8388607.0f);// 0x7fff = 8388607.0f

    */

    voltagemario Binario = valorADC;

    voltagem =(valorADC)*((2 * 5.0)/(16777216));

    ####################################################################出################################出########出

    电路板的型号:

    再次感谢您并为您的任何错误深表歉意!

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

    尊敬的 Claudio Tasso:

    您的 LA 仍在上升沿触发、请查看最新帖子下面的第一张图片。 看看箭头是如何指向 SCLK 上升沿的?

    您需要在我在第二个图像中展示的 SPI 设置窗口中进行更改。 请注意、Saleae 将其称为"后缘"。 您的微控制器也需要遵循该相同的协议、

    请确保这些问题得到纠正、否则您将无法读取 Saleae 或 MCU 上的正确数据

    -Bryan

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

    您好、Bryan:

      首先,我很抱歉响应的延迟,因为我在寻找基于您的指示的信息,并发现了我犯的几个错误。

      首先、STM32的 SPI 通信时钟非常高... 40 MHz、在搜索中、我发现它必须低于1.92 MHz。

      STM 时钟的工作模式也不正确、其中第2沿的配置说明如下:

      => 1边沿表示第一个时钟转换是第一个数据捕获边沿(值0)、2边沿表示第二个时钟转换是第一个数据捕获边沿(值1)

      "Logic Analyzer"采集中的另一个错误。 CPOL = 0/CPHA=1、配置了下降沿模式。

      我犯了很多错误……

      接收到的数据仍然不一致... 在 A0 - GND 之间已关闭、但我仍然无法读取"0"周围的任何内容。  

      它可以与 ADS1256接收/发送数据有关、也可以与二进制补码格式的数据的转换/处理有关。

      在最后一个图像的下面、我以二进制方式发送一个数据样本。

      如果您能提供有关可能存在的问题的更多信息/提示、我将不胜感激。

      您向我提供的信息最终为我提供了正确的下一步方向。 独自学习东西是非常困难的,但我相信我可以做到!

    再次感谢您!

    克劳迪奥

    STM32 - Nucelo-L476RG:SPI 时钟配置。

    Nucleo-L476RG 上的 SPI 参数

    逻辑分析仪上的配置 Saleae:

    根据 main.c 代码的命令序列:

    复位:0xFE

    SDATAC:0x0F

    ADCON:0x52/0x00

    DRATE:0x52/0xA1

    SELFCAL:0xF0

    多路复用器:0x51/0x08

    SYN:0xFC

    唤醒:0x00

    X

    RDATA:0x01

    接收的前03个字节

    Bynary 样片

    main.c 代码: /cfs-file/__key/communityserver-discussions-components-files/73/Main-code.txt

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

    尊敬的 Claudio Tasso:

    我强烈建议您阅读 ADC 数据表。 本文档涵盖了以下两个问题以及您已经面临的许多其他问题。  在实际使用器件之前必须了解器件的行为方式、否则您会继续遇到问题、我们的支持将受到限制。 我会尽量帮助您解决我在上一篇文章中注意到的一些问题

    WREG 至少缺少一个字节。 您说过您的 WREG 到 DRATE 为 0x52/0xA1。 第一个字节表示要从寄存器2开始执行 WREG 命令。 第二个字节告诉 ADC 您正在写入多少个寄存器。 由于您写入了 A1、根据表24、这是一个荒谬的输入、因此没有发生任何情况。 然后、您永远不会将要写入 ADC 的实际数据发送到 ADC、而是会通过将 CS 拉为高电平来结束帧。

    如果您查看读回的数据、可以看到、与 DRDY 信号相比、要随时钟清除的24位数据花费了很长的时间。 实际上、从第一个字节开始到第三个字节结束有7个 DRDY 脉冲、请参阅下图。 所有这些 DRDY 脉冲均指示新数据已准备好随时钟移出、因此三个数据字节来自不同的数据采集。 您将需要以慢得多的速度进行采样或以快得多的速度捕获数据、即在1个 DRDY 周期内进行采样。

    另外、您可以停止在回复中发布您的代码吗? 这使这条线变得很长、很难遵循。 如前所述、调试 ADC 代码的最佳方法是使用逻辑分析仪。 仅供参考、我将您的代码压缩为文本文件并将它们附加到您的帖子中

    -Bryan

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

    Bryan、

    非常感谢您提供的所有信息。 他们中的许多人打开了我的思想,以提高我的知识。 对于由此给您带来的不便、我深表歉意、并将进一步研究 ADS 1256数据表。

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

    尊敬的 Claudio Tasso:

    很高兴我们能为您

    -Bryan