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.

[参考译文] ADS125H02:单端配置和转换问题

Guru**** 2521250 points
Other Parts Discussed in Thread: ADS125H02

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/997018/ads125h02-single-ended-config-and-conversion-issue

器件型号:ADS125H02

您好!

  我目前正在研究与 MSP432P4111连接的 ADS125H02。 在这里、我将使用单端运算。

AIN0 - AINCOM、增益为0.5 -即0v 至+- 5V

我的 AIN0模拟输入为1V 和-0.5。

到目前为止、我已完全获得 SPI 响应、但问题出在 RDATA 中

我在读取输出时对此有一些问题  

在程序中-必须在 RDATA 之前和 START 命令之后为 OFCAL 和 FULCAL 寄存器提供值。

在计算中-例如、在我获得我的24位转换后:

AIN0 - 0.3V

MSB - 31.

中- 79

LSB - AF

然后、我将该十六进制值转换为十进制、并应用于公式-转换数据* VREF/(2^24)。  

如果该公式不是要使用的公式、则该公式是否正确。

我的程序是否正确?

或者、您是否将分步程序发送给单端操作。

以前我提出了一些问题、但没有改变。

因此、请帮我解决这个问题。

int main(void)
 {
    volatile uint32_t i;

    WDT_A->CTL = WDT_A_CTL_PW |             // Stop watchdog timer
            WDT_A_CTL_HOLD;

    P2->DIR |= BIT0;                        // Set P2.0 CS1
    P1->DIR |= BIT0;                        //CS2

    P2->SEL0 = BIT1 | BIT2 | BIT3;         // Set P2.1, P2.2, and P2.3 as
                                            // SPI pins functionality
    EUSCI_A1->CTLW0 |= EUSCI_A_CTLW0_SWRST; // Put eUSCI state machine in reset
    EUSCI_A1->CTLW0 = EUSCI_A_CTLW0_SWRST | // Remain eUSCI state machine in reset
            EUSCI_A_CTLW0_MST |             // Set as SPI master
            EUSCI_A_CTLW0_SYNC |            // Set as synchronous mode
            EUSCI_A_CTLW0_MSB;     // Set clock polarity high
    EUSCI_A1->CTLW0 &= ~EUSCI_A_CTLW0_CKPL;
    EUSCI_A1->CTLW0 &= ~EUSCI_A_CTLW0_CKPH;

    EUSCI_A1->CTLW0 |= EUSCI_A_CTLW0_SSEL__SMCLK; // ACLK
    EUSCI_A1->BRW = 0x0001;                   // /2,fBitClock = fBRCLK/(UCBRx+1).

    EUSCI_A1->CTLW0 &= ~EUSCI_A_CTLW0_SWRST;// Initialize USCI state machine

    // Enable global interrupt
    __enable_irq();

    /***** DEV_ID***/

   P2->OUT &= ~BIT0;
      
    write(0x20);

    write(0x00);

    write(0x79);

    write(0x00);

    write(0x00);

    write(0x00);
      
    P2->OUT |= BIT0;



    /****MODE-0***/
    P2->OUT &= ~BIT0;   // CS low
   
        write(0x42);

        write(0x24);

        write(0x5A);

        write(0x00);
 
    P2->OUT |= BIT0;


////    /***** MODE-1 ***/
    P2->OUT &= ~BIT0;   // CS low
    
        write(0x43);

        write(0x01);

        write(0xB4);

        write(0x00);
     
    P2->OUT |= BIT0;

      /***** REF ****/
    P2->OUT &= ~BIT0;   // CS low
    
        write(0x46);

        write(0x10);

        write(0x82);

        write(0x00);

    P2->OUT |= BIT0;
////
//      /***** MODE - 4*********/
    P1->OUT &= ~BIT0;   // CS low
        write(0x50);

        write(0x33);

        write(0x42);

        write(0x00);

    P1->OUT |= BIT0;

    while(1)
      {
               /**** start ****/
      P2->OUT &= ~BIT0;
          write(0x08);

          write(0x00);

          write(0x7F);

          write(0x00);

      P2->OUT |= BIT0;

      /********* RDATA *******/
      P2->OUT &= ~BIT0;   // CS low
      
           write(0x12);

           write(0x00);

           write(0xAA);

           write(0x00);

           write(0x00);

           write(0x00);

           write(0x00);

           write(0x00);

           write(0x00);
        
         P2->OUT |= BIT0;

           /**** STOP******/
        P2->OUT &= ~BIT0;
           write(0x0A);

           write(0x00);

           write(0x55);

           write(0x00);

            P2->OUT |= BIT0;

    }
}

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

    您好、Sai、

    在我们先前的讨论中,我要求:

    "您能否读回完整的寄存器设置、然后获取数据、然后发布寄存器值以及数据输出? 当我不知道 ADC 是如何配置的、并且看不到数据输出时、我无能为力。"

    此时、这似乎是一个通信问题、因此我们需要能够查看发送到 ADC 的内容以及 ADC 的响应方式、以提供帮助。 如果 G = 0.5且 VREF = 2.5V、则您看到的值(0x3179AFh)对应于1.93V。

    您还需要提供通信的示波器或逻辑分析仪图像。

    请完成这些任务并向我们提供所需的信息、以便我们能够继续为您提供帮助。

    布莱恩

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

    好的、我将发布另外一件事是、您是如何计算(0x3179AFh)为1.93V 的?

    您在这里使用了什么公式?  

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

    您好、Sai、

    我使用了 ADS125H02 Excel 计算器工具和您提供的增益/ VREF 信息: https://www.ti.com/lit/zip/sbac234

    布莱恩

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

    这不是仅针对差分输出进行计算?

    因为在右侧的 ADC 输入范围表中、显示了差分输入范围。

    对于这两种情况、我应该使用什么单端或相同的公式?  

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

    您好!

    今天,我尽一切可能解决这一问题,但没有任何改变。

    我还尝试了 CRO 来捕获信号、但每次我给出值时、它都会发生变化。

    例如:我的 AIN0 - 0.5V

    MOSI - 12 00 AA 00  00 00 00 00  00

    MISO - FF  12 00 AA 00 B1 C2 24 FF

    示例2:

    MOSI - 12 00 AA 00  00 00 00 00  00

    MISO - FF  12 00 AA 00 08 AA 15 FF

    我的问题尤其在于 MSB、MID、LSB。

    我的代码是否正确? 我在上面发布 了我的计划。

    提前感谢。

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

    您好、Sai、

    正如我在前一个线程中提到的、ADC 始终进行差分测量。 因此、如果 AIN0连接到1V、AIN0连接到 GND、ADC 的读数为1V。 如果 AIN0连接到4V、AIN3连接到3V、则 ADC 读数为1V。

    同样、输出编码始终是双极的二进制补码。 例如、如果增益= 0.5且 VREF = 2.5V、则您的第一个输出代码(0xB1C224h)对应于-3.056V。 在第二个示例中、0x08AAFFh 使用相同的设置对应于0.338V。

    您仍然没有提供寄存器回读信息、因此我们可以看到器件的实际配置。 您还能发送一些 PCB 设置图片以及如何连接所有组件吗?

    布莱恩