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.

[参考译文] ADS8588SEVM-PDK:如何使用它?

Guru**** 2398695 points
Other Parts Discussed in Thread: ADS8588S, DAC8775EVM, ADS8584S

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1536825/ads8588sevm-pdk-how-do-i-use-use-this

器件型号:ADS8588SEVM-PDK
主题中讨论的其他器件:DAC8775EVM、ADS8588S、 ADS8584S

工具/软件:

您好:  


我通过 SPI 将 ADS8588SEVM 与 MCU 一起使用。 我已经尝试使用 PHI 反复使用 EVM、并可以获取我希望在 GUI 上看到的正弦波。 我感到困惑的是、使用示波器捕获需要通过 MCU 重新创建的信号时、我获取了随附的图像。  

  a.

黄色:SCLK
蓝色:CONVSTA
紫色:DOUTA

我尝试通过 DAC8775EVM 采集范围为 0V 至 10V 的模拟正弦波。 我可以确认 DAC 产生该波并完全正常运行。 对于 ADS 设置、我设置了:
范围:–10V 至 10V
串行接口(J3 分流)
过采样 x0
内部基准。

我还有一个外部 AVDD = DVDD = 5V。

问题。
1) 如何理解示波器中显示的内容? 我知道有一种二进制补码技术、但即使我知道需要将数据转换为无符号格式、我也不完全理解。

2) 要成功复制 GUI 中的捕获,我到底需要切换什么? 根据我的理解、我需要切换 CONVSTA、将/CS 设置为低电平、接收输入、将/CS 设置为高电平并重复进行连续捕获?

我对使用此器件并不熟悉、希望获得任何帮助。 提前感谢。

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

    您好 Muhammad、

    示波器显示了 CHAx 的 4 个转换结果、EVM 同时使用 SDOA 和 SDOB。  在您的情况下、如果您想要 SDOA 的所有八个通道、则需要向 ADS8588S 器件额外发送 4*16 = 64 个 SCLK。  您的示波器未捕获的是 BUSY 输出信号。  您需要施加 CONVST 脉冲、等待 BUSY 变为低电平、然后应用/CS 和 SCLK 来检索转换结果。

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

    你好,汤姆,谢谢你的快速答复。 示波器中未捕获 BUSY 信号、因此当我在几小时内返回实验室时、我会看看是否正确完成了该操作。 目前我只尝试从一个通道收集数据、因此我已将 JP1-2 (AIN1+) 连接到 DAC、而其他 3 个输入连接到 GND。 我已使 CONVSTB 和 SDOB 保持未连接和悬空状态、因为我仅计划使用前 4 个信道。

    根据我对时序图的理解、第一个 I PULSE CONVSTA、将 BUSY 设置为高电平、将/CS 设置为低电平、发送模拟输入数据、将/CS 设置为高电平、将 BUSY 设置为低电平? 然后、我在 while 循环中重复此过程以进行连续捕获。 此过程符合 ADS8584S 数据表(我将 ADS8588SEVM 用于的 ADC)图 2 和图 5 的要求。 请提供建议。 提前感谢。

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

    BUSY 是内部信号、它是 ADS8588S 的输出。  基本思路是您会将 ADC 的输出用作处理器的中断。  例如、您可能将 CONVST 连接到一个计时器、每次脉动时、BUSY 都会变为高电平。  当转换序列完成时、BUSY 变为低电平会向您发出将/CS 设置为低电平的信号并启动 SCLK 以将转换结果从器件中获取。

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

    您好、Tom、这次我尝试测量示波器的 Busy、这是我到达的波形。



    如您所见、当 I pulse CONVSTA(黄色)和/CS 随后发出脉冲(紫色)时、BUSY(蓝色)处于低电平。 目前、我的代码编写如下:


    	    // Output sine waves from DAC CH A and CH C
    	    sine_wave_output_dual();
    	    HAL_Delay(5); 
    
    	    // Trigger ADC conversion via CONVSTA pulse
    	    HAL_GPIO_WritePin(ADS_CONVSTA_GPIO_Port, ADS_CONVSTA_Pin, GPIO_PIN_RESET);
    	    HAL_GPIO_WritePin(ADS_CONVSTA_GPIO_Port, ADS_CONVSTA_Pin, GPIO_PIN_SET);
    
    	    // Wait for BUSY to go LOW (ADC conversion complete)
    	    while (HAL_GPIO_ReadPin(ADS_BUSY_GPIO_Port, ADS_BUSY_Pin) == GPIO_PIN_SET) {
    	    printf("BUSY IS UP \n");
    	    }
    
    	    // Activate CS to read data
    	    HAL_GPIO_WritePin(ADS_CS_GPIO_Port, ADS_CS_Pin, GPIO_PIN_RESET);
    
    	    uint8_t rx_buf[2] = {0};
    	    uint8_t tx_buf[2] = {0x00, 0x00};
    	    HAL_SPI_TransmitReceive(&hspi2, tx_buf, rx_buf, 2, HAL_MAX_DELAY);
    
    	    HAL_GPIO_WritePin(ADS_CS_GPIO_Port, ADS_CS_Pin, GPIO_PIN_SET);

    无论我尝试什么、我似乎都无法读取忙波形。 这表明转换尚未开始/ ADS 未在转换? 请提供建议。 提前感谢。

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

    如果您仍连接到我们的 EVM、您是否已验证 STBY 引脚为逻辑 1、RESET 引脚为逻辑 0?  使用串行接口时、您还需要将并行数据引脚设置为接地。

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

    您好、Tom、我已确认 STBY 引脚为逻辑 1、但是我不知道 EVM 上 RESET 引脚的位置是逻辑 0、以及 EVM 上并行数据引脚的位置。  您在另一个论坛帖子中提到了类似的内容、但我看不到您在数据表/用户指南中提到的内容。 我只能猜测它在 J9 中有一些操作、但否则我无法真正了解下一步是什么。  

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

    DBx 引脚 ststus 在数据表中。  在串行模式下运行时、大多数并行数据输出需要接地或保持在逻辑“0"处“处。

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

    您好、Tom、我已成功在示波器上看到占线脉冲。 结果我需要对 CONVSTB 进行脉冲、以便 ADS 切换 BUSY。 当在没有 PHI 的情况下使用 EVM 时、您建议我做什么将这些引脚接地、或者必须使用 PHI 将其强制接地?

    此外、当使用 SPI 从 AIN1 接收数据时、BUSY 信号的脉冲速度超过我可以切换/CS 的速度。



    遗憾的是、我当前使用的是 PicoScope 示波器、只有 2 个通道来测量波形。 如图所示、BUSY(蓝色)在/CS(红色)切换之前切换。 我目前的编码方式如下:

      while (1)
      {
    	    // Output sine waves from DAC CH A and CH C
    	    sine_wave_output_dual();
    	    HAL_Delay(5);  // ~200 Hz loop
    
    	    // Trigger ADC conversion via CONVSTA pulse
    
    
    	    HAL_GPIO_WritePin(ADS_CONVSTA_GPIO_Port, ADS_CONVSTA_Pin, GPIO_PIN_RESET);
    	    HAL_GPIO_WritePin(ADS_CONVSTA_GPIO_Port, ADS_CONVSTA_Pin, GPIO_PIN_SET);
    	    HAL_GPIO_WritePin(ADS_CONVSTB_GPIO_Port, ADS_CONVSTB_Pin, GPIO_PIN_RESET);
    	    HAL_GPIO_WritePin(ADS_CONVSTB_GPIO_Port, ADS_CONVSTB_Pin, GPIO_PIN_SET);
    
    
    	    while (HAL_GPIO_ReadPin(ADS_BUSY_GPIO_Port, ADS_BUSY_Pin) == GPIO_PIN_SET) {
    	    printf("BUSY IS UP \n");
    
    	    // Activate CS to read data
    	    ADS_CS_EN();
    
    	    uint8_t rx_buf[2] = {0};
    	    HAL_SPI_Receive(&hspi2, rx_buf, 2, HAL_MAX_DELAY);
    
    	    ADS_CS_DIS();
    
    
    	    }
    
    	    HAL_Delay(1);


    如果我将/CS 切换线路“ADS_CS_EN ();“置于 while 循环之外、它将在 BUSY 恢复到逻辑 0 后产生脉冲。

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

    很高兴看到你现在正忙于工作!  DBx 线路上有串联电阻器、可以将其短接至地。

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

    啊、我明白了。 根据数据表、我能否确认将除 DB7 (DOUTA) 和 DB8 (DOUTB) 之外的所有 DBx 引脚都短接?

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

    也要注意两用引脚、否则是。

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

    谢谢 Tom。 我尝试通过将电阻器焊接到 GND 来短接电阻器、但意外地切断了将 RS15 连接到引脚 33 (DB15) 的铜线。 这有多糟糕?

    *编辑*:我设法将必要的 dbx 引脚短接至 GND(我直接从 U1 短接 DB15 ),但仍然没有 DOUTA 波形。 我认为不应该对董事会造成重大损害,除了我再也不能使用 PHI 向前推进。 请提供建议。 提前感谢。

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

    您好 Muhammad、

    裂土垫应该不会有问题。  在 BUSY 返回低电平后是否应用/CS 和 SCLK?

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

    您好、Tom、  
    是的、我在 BUSY 恢复为低电平后应用了/CS。 Tsu_BSYCS  ~12ms、这没有问题、因为数据表中没有说明最大时间。 我不知道该怎么办,但我也不知道该怎么办。 您能为我做一些澄清吗?  

    蓝色:忙碌
    红色:DOUTA

    不过、过一段时间后、我没有得到上面的波形、而是在 DOUTA 上得到一条平坦的线(逻辑 0)。 相反、我得到以下内容:

    蓝色:/CS
    红色:DOUTB

    我将通道 2-8 连接到 GND、只有通道 1 连接到 DAC 输出。 这是怎么回事?  

    *编辑:我设法得到了使用 SPI 的 SCLK 走,但它看起来很有趣。 我正在向 ADS 发送一条 HAL_SPI_RECEIVE (); SPI 消息、ADS 请求 2 个字节的数据、因为我只关心通道 1 的数据。 这是正确的还是我应该为所有 8 个通道发送时钟周期?


    蓝色:SCLK
    红色:DOUTA

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

    您好 Muhammad、

    一般来说、您应该会看到与原始开机自检屏幕截图类似的内容。  如果不包含 SCLK 详细信息、就无法真正解释 SDO。

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

    您好、Tom、我意识到我将时间分度设置得太高、所以这是实际接收到的波形。


    蓝色:SCLK
    红色:DOUTA

    DOUTA 能够在 0xFEFE 和 0xFFFF 之间切换。 我理解它是二进制补码格式、但我如何解读这一点? 作为参考、它采集的数据应该是范围为 0V 至 10V(从 5V 开始)的模拟正弦波。

    *编辑“:我记得在另一个论坛帖子中提到的关于重置按钮 S1 在转换开始之前,我设法得到了我想要的范围值。


    如数据列中所示、来自 ADS 输入的十六进制值以递增和递减顺序变化、这与我的正弦波相匹配。 我想澄清的是:我目前使用的是–10V 至+10V 范围内的 ADS8588SEVM、但我的 DAC 输出仅 0V 至 10V。 收集的数据是否会受到影响? 我的正弦波从+5V 开始、变为+10V、回到+5V、然后回到 0V、再回到+5V。 当 DAC 输出 5V 至 7V 时、捕获的十六进制值从 0x7FFF 变为 0xFFFF、然后在 8V 时返回 0xEXXX、然后当输出 8V 至 10V 时、变为 0xCXXX、一直到 0xFFFF。 当从 10V 变为 0V 时、它会按预期逐渐降低、直到达到 0x0000、然后在 5V 时返回 0x7FFF。 然后、当电压为 5V 至 7V 时、数据会重复、依此类推。

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

    您好 Muhammad、

    从 ADC 代码输出的角度来看、0x7FFF 为满量程正。  满量程负值为 0x8000、中标度代码为 0xFFFF 或 0x0000。  DAC 和 ADC 之间如何连接接地端?

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

    您好、Tom、

    DAC 和 ADC 的 GND 连接到一个公共点、即我的 MCU 板的 GND 引脚。 此外、外部电源的 GND 也连接到同一公共点。 对于模拟输入、通道 2-8 连接到公共点 GND、只有通道 1 连接到 DAC 的输出端。  

    对于 ADC 输出、这是否意味着任何高于 0x8000 的电压都是负值(在这种情况下高于 5V)、任何低于 0x7FFF 的电压都是正值(低于 5V)? 我假设这是另一种方法。

    这是我认为获得的预期值:



    而在 0V 时、ADC 捕获 0x0000。  

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

    请看图 66 和表 2。  如果您在+/–10V 范围内、0V 至 10V DAC 应该为 0x7FFF 提供 0x0000 至 0x7FFF。  一个低于 0V 的代码为 0xFFFF、在–10V 下则为 0x8000。

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

    您好、Tom、

    我明白这一点,但这不是我的 Picoscope 捕获的。 我的 AIN2-AIN8 接地这一事实是否与预期值与实际值之间的差异有关?  

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

    您好 Muhammad、

    不,这不重要。  不过、从您的图片可以看出、在 0V 时、该代码应为 0x0000(不是 0x8000)、虚线为 5V、该代码应为~0x3FFF(不是 0x0000)。

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

    您好、Tom、

    感谢您的澄清、我将查看我的代码、看看我是否可以捕获预期值并返回给您。

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

    您好、Tom、

    在测试了一段时间并收集了这些值后、我最终得到了以下结果:


    Y 轴:电压 (V)
    X 轴:样本编号


    以下是我捕获的前 20 个值(共 300 个):

    DAC_Hex DAC_Voltage (V) ADC_Hex ADC_Voltage (V)
    8323 5.123. 7FFF 10.
    8647. 5.245. 877F –9.414
    896A. 5.368. 8FFF –8.75
    8C8B 5.49 949F –8.389.
    8FAA 5.612 98CF –8.062
    92C7 5.734 9F7F –7.539
    95E1 5.855 AB7F –6.602.
    98F8. 5.975 BFFF –5
    9C0A 6.095 B2BF –6.035
    9F19 6.215 BF1F –5.069
    A223 6.334. BFFF –5
    A527 6.451. C7FF –4.375
    A826 6.568. D7FF –3.125
    AB1E 6.684. DFF –2.5
    AE10 6.799 FFFF 0
    B0FB 6.913 FDBF –0.176.
    B3DE 7.026 E23F –2.325
    B6B9 7.138. EF7F –1.289.
    B98C 7.248. F9FF –0.469
    BC55 7.357. F49F –0.889.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为您的 SPI 格式有一个错误 — 从前天的屏幕截图中,我刚意识到您存在位移问题:

    要处理二进制二进制补码数据、您可以获取原始 ADC 数据并将其与 0x8000(十进制 32768)进行异或运算。

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

    您好、Tom、

    在前面的屏幕截图中、这些值是由于在初始化时未按“复位“所致。 按下 RESET 后、我运行 DAC 正弦波代码和 ADC 配置、最后是表中的值。 我不确定 SPI 格式是否仍然是一个问题后,你考虑了这个答复中的信息.

    我也注意到时钟分开,有人也在另一个论坛帖子中提到了它是如何不理想的。 我不知道该如何处理。

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

    时钟之间的间隙并不理想、但对于某些 SPI 外设、无法解决这一问题。  您能否发布图中显示的 300 个转换结果?  .csv 文件对我有效。

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

    您好、Tom。

    这是数据的.xlsx 文件。

    e2e.ti.com/.../dac_5F00_vs_5F00_adc_5F00_full_5F00_log.xlsx

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

    请尝试访问 e2e.ti.com/.../dac_5F00_vs_5F00_adc_5F00_full_5F00_log-TH.xlsx。 将 SPI 更改为 POL = 0、PHA = 0、看看这样是否有帮助。