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.

[参考译文] ADS1282:ADS1282地震

Guru**** 2577385 points
Other Parts Discussed in Thread: ADS1282

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/607843/ads1282-ads1282-seismic

部件号:ADS1282

您好,我现在开始 设计地震数据采集系统(地球物理勘探工具)。 要将模拟数据从地球电话转换为数字格式,现在我选择ADS1282进行设计。 我遇到了以下问题1:非测量传感器: http://www.nanometrics.ca/seismology/products/trillium-120-Q-QA 

ADS1282WREG2 (ADC_ADDR_CFG1,0x08);//·Å´ó±¶Êý1
READDATASPI1();
ADS1282WREG2 (ADC_ADDR_CFG1,0x18);//·Å´ó±¶Êý1
READDATASPI1();

SPI1_WriteByte (ADC_SDATAC);
ADS1282WREG1(ADC_ADDR_CFG0,0x42);//¸ßλÔÚǰ¡¢Ð£×¼¡¢Ê¹Óûº³å
ADS1282WREG1(ADC_ADDR_CFG1,0x08);//·Å´ó±¶Êý1
SPI1_WriteByte (ADC_RDATAC);
READDATASPI1();

SPI1_WriteByte (ADC_SDATAC);
ADS1282WREG1(ADC_ADDR_CFG0,0x42);//¸ßλÔÚǰ¡¢Ð£×¼¡¢Ê¹Óûº³å
ADS1282WREG1(ADC_ADDR_CFG1,0x18);//·Å´ó±¶Êý1
SPI1_WriteByte (ADC_RDATAC);
READDATASPI1();

您的回复非常好

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    补充:
    1.非测量传感器: www.nanometrics.ca/.../trillium-120-Q-QA 传感器输出为+-40V,是否有任何有关宽电压范围输入和宽动态范围数据采集系统的设计参考。
    2.关于代码示例:我需要两个通道用于非常芯片(完全,我需要四个通道)一个ads1282,可以分别使用AINP1/AINN1或AINP2/AINN2。 但它可以同时使用(完全,它是备选).下面是我的代码
    这不能奏效。
    ADS1282WREG2 (ADC_ADDR_CFG1,0x08);//·Å´ó±¶Êý1选择AINP1/AINN1
    READDATASPI1();
    ADS1282WREG2 (ADC_ADDR_CFG1,0x18);//·Å´ó±¶Êý1选择AINP2/AINN2
    READDATASPI1();
    也无法正常工作
    SPI1_WriteByte (ADC_SDATAC);
    ADS1282WREG1(ADC_ADDR_CFG0,0x42);//¸ßλÔÚǰ¡¢Ð£×¼¡¢Ê¹Óûº³å
    ADS1282WREG1(ADC_ADDR_CFG1,0x08);//·Å´ó±¶Êý1
    SPI1_WriteByte (ADC_RDATAC);
    READDATASPI1();

    SPI1_WriteByte (ADC_SDATAC);
    ADS1282WREG1(ADC_ADDR_CFG0,0x42);//¸ßλÔÚǰ¡¢Ð£×¼¡¢Ê¹Óûº³å
    ADS1282WREG1(ADC_ADDR_CFG1,0x18);//·Å´ó±¶Êý1
    SPI1_WriteByte (ADC_RDATAC);
    READDATASPI1();
    很好,您很快就回复了
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Kevin:

    欢迎来到TI E2E论坛!

    关于您的问题...

    1) ADS1282的输入范围为"±VREF/(2×PGA)"。 例如,如果VREF = 5V和PGA = 1 V/V,则输入范围为±2.5V。 需要将输入信号进行细分,并可能进行电平移位,以便与ADS1282连接。 如果您可以容忍在极高的端部夹紧某些传感器,则您可能不必将信号一直向下分割(正如我所预期的那样,这是一种罕见的情况,而不是典型的传感器输出)。 您是否有关于传感器输出电压(例如共模输出电压)的更多信息? 这有助于了解推荐的前端电路。

    2) ADS1282输入是多路复用的;因此,您无法同时测量两个通道。 第二个通道通常用于临时切换测试信号。 要同时测量多个输入信号,您需要多个ADC,每个通道一个。

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

    您好 ,Chris

    感谢您的回复。

    1.以下数据是 传感器的主要参数:

    传感器的输出阻抗:2 x 150Ω±1 %

    传感器的输出电压:40V峰间差动可选XYZ或UVW模式

    传感器的频率范围:120s-100Hz

    现在,我使用电阻分路对其进行测试。 但是,也许TI在解决这一问题方面有更好的想法或参考。

    2.我的数据记录器 ADS1282+STM32F407需要四个通道。 因此我的设计需要使用四个ADS1282? 我看到了ads1282的数据表(图66. 具有双ADS1282的微控制器接口)我是否需要更多的IO端口用于设计?

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

    您好,Kevin:

    您知道传感器的共模输出电压是多少吗? 输出电压是否以0V为中心或其他电压电位? 另外,您是否正在使用ADS1282的双极(+/-2.5V)或单极(AVDD=5V,AVSS=0V)电源?

    我问这个问题,因为您可能需要对传感器输出进行电平转换,以便输出共模电压围绕ADC的中间电源电压。 我们当然可以推荐一个有源电路来执行此操作;但是,我通常更喜欢尽可能使用无源元件,因为有源设备可能会在测量中引入显著的噪声,偏移,增益和漂移误差。

    对于第二个问题,回答正确...您需要四个ADC。 对于I/O,您需要四个SPI外设或四个可用作芯片选择信号的GPIO。 虽然ADS1282没有“/CS”引脚,但您可以使用以下变通方法在同一SPI外设上的多个ADS1282之间进行选择: e2e.ti.com/.../2748.where-is-the-cs-pin

    此致,
    Chris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Chris,
    感谢您的快速回复。 我不确定共模电压,也许是以0V为中心的输出电压,我会与传感器供应商核实,或者我会测试传感器的输出(我现在没有得到)。我拿到之后,我会给你留言。

    关于第二个问题,我将尝试两种方法。

    我还有另一个问题。ads1282的SPS是250到4000,而时钟是4.096Mhz,但是如果我想要更低的SPS,我可以使用2.049M或1.024Mhz晶体振荡器,或者TI有其他方法
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Kevin:

    它还有助于了解传感器静止时的Vrms噪声,以便在设计有源电路时,您知道目标噪声级别。

    关于标定ADS1282的数据速率,您可以应用较慢的时钟频率;但是,ADC的噪声性能可能与在标称数据速率下指定的噪声保持相同。 因此,我建议使用移动平均滤波器(例如)计算软件中数据的平均值,以降低数据速率并改善噪音。

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

    您好,Chris

    非常感谢!

    我在调试过程中遇到了一个新的问题,当输入信号交叉零(就像正弦波,接近零),输出数据经常 失真。以下是输入标准正弦器件时的输出数据:

    CH3 -4572
    CH3 -8295
    CH3 -1.1749万
    CH3 -1.4813万
    CH3 -1.7418万
    CH3 -1.9478万
    CH3 -2.0938万
    CH3 -2.1752万
    CH3 -2.1883万
    CH3 -2.1332万
    CH3 -2.0129万
    CH3 -1.8304万
    CH3 -1.5915万
    CH3 -1.3009万
    CH3 -9691
    CH3 -6068
    CH3 -2238
    CH3 -838.6937万
    CH35550
    CH39263
    CH312698
    CH315742
    CH318311
    CH320332
    CH321731
    CH322454
    CH322496
    CH321836
    CH320520
    CH318575
    CH316063
    CH313059
    CH39652
    CH35971
    CH32119
    CH38386800
    CH3 -5653
    CH3 -9314
    CH3 -1.2661万

    此致!

    Kevin

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

    您是否能够共享输入电路的原理图,以及您如何读取数据的代码片段?

    如果您只读取了总共31个数据位中的24个,那么我怀疑您的代码中可能有符号错误,因为ABS (-838.6937万)-2^23=-1671,而ABS (838.68万)-2^23=-1808,似乎是更合适的中间结果。

    如果输入电路中的串联电阻太大或差分电阻太小,也可能出现零交叉错误,但我不会期望这会导致如此大的错误。 这通常是一个小得多的错误,原因是输入电容器无法主正确的低充电电压。

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

    您好,Chris

    感谢 您的耐心!下图是ads1282的输入电路和代码。

    void SPI3_WriteByte (int TxData)

    int i;
    (i = 0;i < 8;I++)

    IF (TxData和0x80)
    ADS1282_DIN3_1();
    否则
    ADS1282_DIN3_0();

    SCK3_1();
    ADS1282_DelaySCLK(7);
    TxData <<= 1;
    SCK3_0();
    ADS1282_DelaySCLK(10);
    }
    }

    unsigned char SPI3_ReadByte (void)

    无符号字符I;
    Int读取= 0;
    SCK3_0();
    (i = 0;i < 8;I++)

    SCK3_1();
    IF (ADS1282_DOUT3)

    读++;
    }
    ADS1282_DelaySCLK(5);
    SCK3_0();

    ADS1282_DelaySCLK(10);
    读取=读取<1;

    }
    read=read>>>1;  
    回读;
    }

    int testSPI3()

    无符号字符temp1_read31;
    unsigned char temp1_read32;
    unsigned char temp1_read33;
    unsigned char temp1_read34;  //用于32位
    无符号长整型temp1_read3_U;
    已签名长int temp1_read3_S;

    IF (!ADS1282_DRDY3)

    while (!ADS1282_DRDY3);
    TEMP1_read31 = SPI3_ReadByte();
    TEMP1_read32 = SPI3_ReadByte();
    TEMP1_read33 = SPI3_ReadByte();
    TEMP1_read34 = SPI3_ReadByte();

    TEMP1_read3_U = 0x0万;
    TEMP1_read3_U += temp1_read31;
    TEMP1_read3_U <= 8;
    TEMP1_read3_U += temp1_read32;
    TEMP1_read3_U <= 8;
    TEMP1_read3_U += temp1_read33;
    TEMP1_read3_U <= 8;
    TEMP1_read3_U += temp1_read34;

    TEMP1_read3_S = temp1_read3_U;
    IF( temp1_read3_S & 0x8000000000 )

    TEMP1_read3_S =~(unsigned long) temp1_read3_S;
    TEMP1_read3_S &= 0x7fffffffffffffff;
    TEMP1_read3_S += 1;
    TEMP1_read3_S =-temp1_read3_S;
    }

    printf ("ch3 %d\r\n",temp1_read3_S);//double
    }
    返回temp1_read3_S;
    }

    32位或24位问题相同。

    还有另一个关于程序的问题。你可以看到我有 一个read=read>>>>>1; 在Read SPI中,我不知道为什么需要这个,因为 读取SPI和写入SPI都带有SCK上升边缘,如果我不使用此语句,输出数据将向右移动一位。  

    再次感谢您的!

    此致

    Kevin

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

    您好,Kevin:

    您是否可以访问微控制器上的专用SPI外设?
    如果可以,我建议使用它,而不是在这里敲一下。

    对于错误数据,您似乎正在尝试将ADC结果转换为两个的补码号,如下所示:

    TEMP1_read3_S = temp1_read3_U;
    IF (temp1_read3_S & 0x8000000000)
    {
    	temp1_read3_S =~(templong) temp1_read3_S;
    	temp1_read3_S &= 0x7fffffffffffff;
    	temp1_read3_S += 1;
    	temp1_read3_S }_read3 =-S
    

    这是不必要的,因为转换结果已经是两种形式的补充格式。 您只需将这些字节连接到已签名的数据类型中,然后删除重复的符号位,就像这样(请注意,我在这里使用的是已签名长的而不是未签名的类型):

    TEMP1_read3_S = 0x0万;
    temp1_read3_S += temp1_read31;
    temp1_read3_S <=8;
    temp1_read3_S += temp1_read32;
    temp1_read3_S <=8;
    TEMP1_read3_S += temp1_read33;
    temp1_read3_S <=8;
    temp1_read3_S += temp1_read34;
    temp1_read3_S >=1; //确保右移保持符号位 

    我认为这种改变可能有助于解决问题。

    关于"read = read>>>>1;"行,这似乎是必要的,因为您要移动每个循环迭代末尾的剩余数据,而不需要在最后一个迭代上执行左移(因为0x01 <<8 = 0x100)。

    此致,
    Chris

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

    您好,Chris:

    谢谢你的回复,我解决了。  

    您是否有另一个有关同步的说明文档,我需要同时提供四个信号样本。 但我觉得在ADS1282规格文档第22-23页上我无法找到这一点。

    我的电子邮件:peacewyz@163.com

    再次感谢!

    此致!

    Kevin

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

    您好,Kevin:

    我没有其他包含同步说明的文档。 但是,如果您要做的是确保所有四个ADC同时采样,那么我建议为ADC的fCLK (主时钟)使用一个时钟源,并同时向所有四个设备发送SYNC命令或SYNC HW脉冲。

    您可以参考以下相关的E2E线程:

    如果您还有疑问,请告诉我。

    此致,
    Chris

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

    您好,Chris

    再次打扰您。 我想以同步模式获取ads1282的三通道数据。 我的电路板设计如图1所示。 正确吗?

    我想按照ads1282数据表进行编程,并参考图47和图48,但我不知道。您是否有DOUT1 DOUT2 DOUT3,DRDY1 DRDY2 DRDY3的序列号同步?,或者您能否给我提供有关这方面的更多详细说明?

    PS: ADS1282的数据输出速率为500SPS,同步信号的频率为500 Hz

    此致!

    Kevin

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

    您好,Kevin:

    我看不到您的电路图有任何问题。 您应该可以使用3个不同的SPI外设与3个ADS1282进行通信。

    ...需要注意的是,如果设备是同步的,您可能不需要监控所有3个DRDY/IRQ信号。

    ...我唯一的建议是,如果您打算使用SYNC GPIO (硬件)信号的连续同步模式而不是SYNC SPI (软件)命令,则从MCU获取ADC时钟。

     

    您打算使用脉冲同步模式还是连续同步模式?

    由于显示独立时钟(独立于MCU),我可能建议只使用脉冲同步模式并发送SYNC SPI命令(而不是SYNC GPIO信号)。 原因是同步GPIO和CLK信号不是相互派生的,这些时钟很容易脱离同步。 在连续同步模式下发生这种情况时,ADC可能会不必要地重新同步。 请参阅以下相关E2E螺纹:  

    如果您使用脉冲同步模式并发送SYNC (软件)命令,您可以随时发出此命令以同步ADC。 如果您使用SYNC GPIO信号,请注意"tCSHD"定时要求,这要求同步信号的上升沿不在CLK信号上升沿的10 ns内发生。

     

    此致,
    Chris