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.

[参考译文] ADS7038:某些特定通道的通道开关延迟和 ADC 计数测量问题

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1292325/ads7038-channel-switch-delay-and-adc-count-measurement-issue-with-some-particular-channels

器件型号:ADS7038

尊敬的 TI 支持部门:

 我目前正在通过 SPI 提出一个板带有4个 ADS7038芯片、基本上使用手动模式以10Hz 的频率读取所有通道。 我已经使用参考代码库来切换通道、并使用 CS 引脚以5ms 的时间触发手动转换(比要求的时间长)。 我的测试设置是向该引脚提供电压、并期望获得大约1200的 ADC 计数。 我目前在使用全部4个芯片时都遇到了以下问题、

1.有时 ADC 测量值较大、超过20k。 转换似乎可能存在时序问题。 SPI 信号看起来很干净。  

2.当仅为通道1提供相同电压时、所有其他通道均悬空、但所有通道的 ADC 计数读数都是相同的数字或较大的20K 数字

3.通道7的基准电压为3.3V、但读数始终为负数。  

下面是手动对话的代码片段

========================================

ads7038StartchannalConversions (ads7038_dev_e devuint8_t ManualID

/dev/dev 是芯片的选择

//用于存储 ADC 转换结果的数组
 uint8_t data[4]=0};
 uint32_t tick[4]
 if (dev >= ADS7038_DEV_COUNT){
  返回0
 }
 //选择手动模式(可以转移到初始化)
 ads7038WriteSingleRegister (devADS7038_sequence_CFG_addressADS7038_sequence_CFG_SEQ_MODE_MANUAL);

 //将引脚配置为模拟输入(可选,可跳过)
 ads7038SetChannelAsanalogInput (dev、channelID);

 //选择通道作为多路复用器输入
 ads7038WriteSingleRegister (devADS7038_CHANNEL_SEL_ADDRESS通道 ID);

 // 将 nCS 引脚设置为低电平,下一个上升沿将触发转换开始
 setCS (低电平);

 HAL_DELAY (1); //通道切换延迟1ms
 //开始转换
 setCS (高电平)
 HAL_DELAY (5); //延迟1ms 以进行采样
 ads7038ReadData (devdata);
 bool avgEnabled =(bool)(ads7038GetRegisterValue (devADS7038_OSR_CFG_ADDRESS) ADS7038_OSR_CFG_OSR_MASK);
  返回  _ads7038SignExtend (dataavgEnabled);

========================================

下面是用于 读取所有通道的代码片段

========================================

 对于(ads7038_dev_e dev = ADS7038_dev_1;dev < ADS7038_dev_count;dev++){
  对于(uint8_t ch = 0ch < ADS7038_NUM_CHANNELch++){
   val[dev][ch]= ads7038StartManualConversions (devch);

   HAL_DELAY (5);
  }

========================================

下面是 TLV3492产品的原理图、

谢谢!

开尔文

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

    尊敬的 Kelvin、

    您能否添加一个显示四条 SPI 控制线路的屏幕截图(逻辑分析仪或范围)?

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

    您好、Tom、

     感谢您的及时响应。 以下是逻辑分析仪的捕获结果。 如果您希望获得更多捕获结果、请告诉我。

    问题1:ADC 测量值很大、超过20k

    图1. 问题1切换通道和开始转换

    图2. 读取 Issue1数据

    图3:问题1:ADC 计数  

    问题2:向通道1提供3.3V 电压、所有通道输出1352

    图4:8通道输出相同的值

    图5:问题2、放大通道1 转换 (所有其他通道几乎相同)

    图6:问题2、放大通道1输出(所有其他通道几乎相同)

    图7:问题2、放大通道 2输出

    图 8:问题2、 所有通道具有相同的读数

    问题3:  通道7的基准电压为3.3V、但该电压始终以负数读取。  

    图9.  问题3:3.3V 参考电压读数是负值

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

    尊敬的 Kelvin、

    您认为您在图1中写下了什么内容?  我不确定此时的0xE7C 响应是什么、但使用3.3V 电源时、这将~2.99V。  看起来您正在写入、然后在前两个帧中读取地址0x10 、后跟一个 NOP。  然后、清除某个位并写入/读取到地址0x11。  对于图9、0xE7B 也是~2.99V、如何将其读取为负电压?  ADS7038具有直接的二进制输出。  在图2中、额外的/CS 和时钟是什么?  在图5和6中、您使用32个 SCLK 运行、这是有原因的吗?

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

    您好、Tom、  

     感谢您的反馈、我将研究这些意外行为。 但很快就有1件事、芯片返回的响应是0xE7和0xB0、那么是否应忽略第二个字节的最后4位?   

     我正在使用示例代码中的函数来转换值、

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

    尊敬的 Kelvin、

    ADS7038仅是一款12位转换器、因此是的-可以忽略、遮蔽、移动四位、这是您认为最适合的转换器。

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

    您好、Tom、

     太棒了! 我通过更新转换函数解决了这个问题。 请参阅随附的。 此外、还修复了导致问题1和2的本地寄存器映射错误。