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.

[参考译文] ADS1292R:数据转换和增益方面存在问题。

Guru**** 2540720 points


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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/742755/ads1292r-i-have-a-problem-about-data-transform-and-gain

器件型号:ADS1292R

PLZ 明白我不习惯使用 eng。

我要创建一个库。 在基于 C 或 C++的 sketch 中。

我在 DATA_ARRAG[](字节类型、0~8 (9))中保存了数据集、并且希望将数据更改为双精度型。

DATA_ARRAY 的0~2是标头(CX xx xx)、3~5是 CH1值(V)、6~8是 CH2 值(V)。

我使用以下代码将数据转换为值、此代码是否正确?

/------------------------------------------------------ /  

if ((data_array[3]>> 4)<= 7){//正值变换

temp =(data_array[3]* pow (256、2))+(data_array[4]* pow (256、1))+(data_array[5]* pow (256、0));

CH1_val = double (temp)/(pow (2、23)- 1)/ GAIN1 * VREF * 1000;//默认增益=(6)、VREF = 2.42V、'*1000'表示(V >mV)

serial.println (ch1_val、10);

}否则{ //负值转换

temp = 0xFFFFFF-((DATA_array[3]* pow (256、2))+(DATA_array[4]* pow (256、1))+(DATA_array[5]* pow (256、0)))+ 1;

CH1_val = double (temp)/(pow (2、23)- 1)/ GAIN1 * VREF * 1000;

serial.println (-ch1_val、10);

/------------------------------------------------------ /  

当我读取交流测试信号时、范围为-0.9xmV 至1.1xmV、如果考虑零偏移(+0.1mV)、该值是正确的。

但是、当我将增益更改为12时、范围是增益6的一半值。 (-0.5xmV 至0.5xmV)。

我猜放大后的值会增加、分频后的值将与增益6相同 、因为增益会增加。

您是否知道发生此错误的原因? (寄存器值已正确更改)

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

    很高兴再次听到您的声音、我希望您一切顺利!

    更改增益时、是否发出 OFFSETCAL 命令重新校准?

    来自 DS:OFFSETCAL:通道偏移校准
    此命令用于取消通道偏移。 在发出此命令之前、RESP2寄存器中的 CALIB_ON 位必须设置为"1"。 每次 PGA 增益设置发生变化时、必须执行 OFFSETCAL。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的建议。

    那么、转换函数是对的吗?

    我在更改 PGA 后添加了校准功能。

    ///------------------ //

    void calibration(){

    字节 RESP2_STAT = READ_REG (RESP2)|(CALIB_ON);

    WRITE_REG (RESP2、RESP2_STAT)// SST CALIB_ON 位1

    SEND_COMMAND (OFFSETCAL);//然后发送命令

    RESP2_STAT = RESP2_STAT &(~CALIB_ON);//然后复位 CALI_ON 位位位0

    WRITE_REG (RESP2、RESP2_STAT);

    ///------------------ //

    但除默认增益外、我无法正确读取设置的数据。(寄存器值仍然正确)

    此外、当我复位芯片时、RESP2中必须为1的0位为零。 我想存在严重错误...  

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

    编写代码最终由客户决定。 我将尽力了解正在做什么、但不确定双精度数是否正确转换。 由于您能够获得正确的默认增益值、因此我认为误差在 PGA 增益变化或进行计算的代码期间存在。

    对于不同的增益、返回哪些值? 我们只有两个数据点(增益6、12)、更多可能会有所帮助。

    当器件寄存器发生变化时、是否正在更新代码中的 GAIN1变量? 这将解释该特定情况的差异。