TI论坛
直播中

xymbmcu

13年用户 1124经验值
擅长:可编程逻辑
私信 关注
[问答]

使用DG408DY进行单路选通到ADS8332进行AD转换,调试过程中遇到几个问题求解


  • 因为项目有12路模拟量需要转换,所以使用DG408DY进行单路选通到ADS8332进行AD转换,在调试过程中遇到几个问题:
    ADS8332的寄存器配置为:0xE6FD
    1 如果不间断读取12路数据,那么读出的码值不准确,如果适当的增加延时(至少1ms),那么读出的数据也比较准确;
       如果不间断只读取一路数据更接近实际值;
       这种现象是逐次逼近型AD的特点么?大概代码如下
        DG408DY_IO_Switch(0);//切换到第一路模拟量进行采样
        Delay_ms(1);
        u16 val[0] = ADS8332_ReadData(ADS8332_Channel_0);
       val[0] = ADS8332_ReadData(ADS8332_Channel_0);//如果不连续读取两次,则采样的数据是第上一模拟量即第十二路的数据
       
       DG408DY_IO_Switch(1);//切换到第二路模拟量进行采样
        Delay_ms(1);
       val[1] = ADS8332_ReadData(ADS8332_Channel_0);
        val[1] = ADS8332_ReadData(ADS8332_Channel_0);
        。。。。。
       
        DG408DY_IO_Switch(11);//切换到第十二路模拟量进行采样
        Delay_ms(1);
        val[11] = ADS8332_ReadData(ADS8332_Channel_0);
        val[11] = ADS8332_ReadData(ADS8332_Channel_0);


    2  如果ADS8332的寄存器配置成自动模式即:0x8FD,那么要怎么读取转换值呢,因为是8个通道进行自动循环采样和转换的,那读取的时候 是不用发送通道选择数据的,那读取的数据怎么知道是0~8哪个通道的数据呢?Datasheet里好像没有介绍


    3 有没有ADS8332的例程代码,自动模式和手动模式的

回帖(2)

蔡婷

2025-1-2 10:32:47
如果不间断读取12路数据,那么读出的码值不准确,如果适当的增加延时(至少1ms),那么读出的数据也比较准确;   如果不间断只读取一路数据更接近实际值;
我想这原因跟你设置的采样保持时间以及信号源的阻抗有关。
举报

足球上篮

2025-1-2 17:38:52
从您的描述来看,您在使用DG408DY和ADS8332进行模拟信号的AD转换时遇到了一些问题。这些问题可能与ADS8332的采样速率、时序要求或者DG408DY的切换速度有关。以下是一些可能的原因和解决方案:

1. **采样速率**:ADS8332是一款高速模数转换器,其采样速率可能远高于您的实际需求。如果连续不断地读取数据,可能会导致数据不准确,因为模拟信号可能在两次采样之间发生变化。增加延时可以给模拟信号一个稳定的时间段,从而提高数据的准确性。

2. **时序要求**:ADS8332可能需要一定的稳定时间来确保数据的准确性。这个稳定时间可能与您的代码中的延时有关。您可以尝试调整延时时间,看看是否能够改善数据的准确性。

3. **DG408DY切换速度**:DG408DY的切换速度可能不足以支持您所需的采样速率。当您切换到不同的模拟信号通道时,可能需要一定的时间来稳定信号。这可能是为什么您在增加延时后数据变得准确的原因。

4. **逐次逼近型AD的特点**:逐次逼近型AD转换器(如ADS8332)确实需要一定的时间来完成转换,因为它们是通过逐次逼近的方式来确定模拟信号的数字值。这可能解释了为什么在增加延时后数据变得更加准确。

5. **代码优化**:您的代码中可能需要添加一些额外的逻辑来确保在切换通道和读取数据之间有足够的时间。例如,您可以在切换通道后添加一个短暂的延时,然后再开始读取数据。

6. **硬件检查**:检查您的硬件连接是否正确,包括DG408DY和ADS8332之间的连接,以及它们与模拟信号源的连接。任何接触不良或连接错误都可能导致数据不准确。

7. **软件调试**:使用调试工具(如逻辑分析仪)来检查ADS8332的SPI通信是否正确,以及DG408DY的通道切换是否如预期那样工作。

8. **参考手册**:仔细阅读ADS8332和DG408DY的数据手册,以确保您遵循了所有的时序和配置要求。

最后,您可以尝试以下代码逻辑来优化您的读取过程:

```c
DG408DY_IO_Switch(channel); // 切换到指定的模拟量通道进行采样
Delay_ms(1); // 等待至少1ms,确保信号稳定
uint16_t val = ADS8332_ReadData(ADS8332_Channel[channel]); // 读取数据
```

在这个逻辑中,`channel` 是您要切换到的通道编号,`ADS8332_Channel[channel]` 是您根据通道编号选择的ADS8332通道。确保您的`ADS8332_ReadData` 函数能够正确地读取指定通道的数据。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分