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.

[参考译文] ADS8320:SPI ADS8320和微控制器连接(Atmega1280)

Guru**** 2542300 points
Other Parts Discussed in Thread: ADS8320

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/747940/ads8320-spi-ads8320-and-microcontroller-connection-atmega1280

器件型号:ADS8320

您好!

我使用的是 Atmega 1280微控制器和 TI ads8320 ADC。
已安装的 ADC 和示波器的外观已连接。

测得的输入信号是稳定的直流信号、使用34401A Agilent 数字万用表对其进行了检查。  
电源和基准输入均配有2个10uF 和0.1uF 陶瓷电容器。

我无法获得微控制器与 ADC 的良好 SPI 通信。
频率为125kHz。 当向 CS 施加持续22个周期的时钟脉冲和低电平信号时、
CS 信号变为高电平后的另4个周期、
在 ADC 的输出端观察到不稳定且非常奇怪的信号。
我无法理解为什么)根据数据表、一切都应该正常工作)!!

这是我使用的第一种方法

这是我使用的第二种方法。

来自示波器的图像是静态图像。 在动态过程中、ADC 产生的代码非常不稳定。 测量结果因跳转而异。

这是我如何放置 ADC 的图像。

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

    您是否会澄清您提到的频率是125KHz?
    请注意、该器件可支持100kHz 的最大整个速率

    请从基准引脚上移除10uF 电容器、每个引脚不需要两个电容器、请参阅数据表中的图19。

    至于示波器快照、您是否会尝试使用24个周期? 我问的是、在16个时钟之后、您应该会看到输入信号的重复、LSB 在前、这意味着 CS 为低电平、您应该在 SDO 上看到另一个高电平位。

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

    您好!

    我尝试在100kHz 下工作、结果大致相同、跳转信号变化相同。

    Pro Capacity 感谢您的建议、我将尝试删除。

    周期。 我使用24、因为前6个用于启用 ADC、我只需删除它们的值、然后16位信息会移动、我读出建议在 QC 变为高电平后再提交3-6个时钟周期。

    处理代码片段:

    unsigned int SPI_ChangeByte (unsigned char 字节)

     SPDR=0x00;
     while (!(SPSR &(1<<SPIF)))//подождем пока данные передадутся (обменяются)
     {b1=SPDR;}  
     返回 B1;

    PORTB.0=0;
           b1=SPI_ChangeByte (0);//первый байт
           b2=SPI_ChangeByte (0);//второй байт
           B3=SPI_ChangeByte (0);//третий байт
           PORTB.0=1;
           b1=b1&0b00000011;
           B=B1;
           B=(b<<16)|(b2<<8)|B3;//собираем три байта в трёхбайтовую величину
           B>>=2;//убираем ненужные биты(4 слева и 4 справа)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    让我们重点关注使用示波器从器件中获得预期行为、然后调试数字通信。 我们必须确认器件输出正确。

    您的 Vref 和 Vcc 电压电平是多少? VREF 设置器件的满标量程、该器件还以标准二进制输出。
    您使用的直流输入值是多少? 您能不能描述输出的运行方式。 您提到的是、即使输入是稳定的、它也会持续变化。 变化有多大?

    关于软件、请注意、在时钟的前一个下降沿计时输出输出位之后、在时钟的上升沿读取输出位更容易。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    中断[TIM3_COMPA] void timer3_COMPA_ISR (void)

    PORTB.0=0;
    //data=SPI_ChangeByte (0);
    SPDR=byte;
    while (!(SPSR &(1<<SPIF)));//подождем пока данные передадутся (обменяются)
    B1=SPDR;
    SPDR=B1;
    while (!(SPSR &(1<<SPIF)));//подождем пока данные передадутся (обменяются)
    b2=SPDR;
    SPDR=B2;
    while (!(SPSR &(1<<SPIF)));//подождем пока данные передадутся (обменяются)
    B3=SPDR;
    PORTB.0=1;
    // SPDR=B2;
    // while (!(SPSR &(<SPIF)));//подождем пока данные передадутся (обменяются)
    b1=b1&0b00000011;
    B=B1;
    B=(b<<16)|(b2<<8)|B3;//собираем три байта в трёхбайтовую величину
    B>>=2;//убираем ненужные биты(4 слева и 4 справа)
    数据=b;
    templaser1=((5.00*DATA)/65536.00);
    templaser=(97500000-19110000*templaser1)/(975+49*templaser1);
    templaser =((3988)/(log (templaser /10000)+13.3758))-273.15;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、感谢您的帮助!

    在桥臂上、Vref 由源 REF195GSZ-REEL7向5V 提供稳定电源? VCC 由5V 外部电源供电。输入电容器。

    作为输入信号、使用了仪器放大器 АD627的输出。 该 kΩ 放大器在其自己的基准通道和连接10k Ω 半导体热敏电阻的通道之间提供放大的差分信号。 信号稳定、一般干扰在正常范围内。

    在 ADC 的输出端、可以观察到稳定的信号、其时长约为16-17个节拍小时。 然后信号跳跃、即最后一个数据字节(转换的最后6位和2个不必要的位、我切断了这些位)不断地将其值从0更改为100-150。

    通常、通过微控制器的内置 SPI 接口、与 ADC 的通信组织如下:

    中断[TIM3_COMPA] void timer3_COMPA_ISR (void)

    PORTB.0=0;
    // data = SPI_ChangeByte (0);
    SPDR =字节;
    while (! (SPSR &(1 << SPIF));//等待数据被传输(交换)
    B1 = SPDR;
    SPDR = B1;
    while (! (SPSR &(1 << SPIF));//等待数据被传输(交换)
    B2 = SPDR;
    SPDR = B2;
    while (! (SPSR &(1 << SPIF));//等待数据被传输(交换)
    B3 = SPDR;
    PORTB.0=1;
    B1 = B1和0b00000011;
    b = B1;
    b =(b << 16)|(B2 << 8)| B3;//将三个字节收集为一个三字节值
    b >>=2;//删除不必要的位(左侧4个、右侧4个)
    数据= b;


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

    似乎通信正常、但数字通信存在问题。

    这可能是由于测试板上的 ADC 和使用带状电缆造成的。   导线之间可能存在串扰。 这可以在 DOUT 和 SCLK 之间看到、输出线上存在时钟的剩余部分。 如果没有合适的 PCB、建议尽可能缩短导线长度。  

    这将有助于在 ADC 输入端的 ADC 测试板上放置一个低通滤波器。 我想确认 ADC 能够与电流输入驱动运算放大器保持稳定。 使用直流输入时、输出是否看起来稳定在某个值?  

    有一个计算器工具: 模拟工程师计算 器、可帮助构建 RC 滤波器并确保您使用的运算放大器实际上可以在分配的采集时间内驱动 ADC 内的45pF 电容器。 在 该工具中进行快速计算、在"ADC SAR 驱动"选项卡下、运算放大器似乎需要115k 的带宽、并给出了 Optima RC 值。 不过、快速查看 AD267、它的带宽仅为80kHz、您应该确认这一点。

    此致、Cynthia

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们将 ADC 直接放置在板上。 根本没有导线。 他们安装了 RC 滤波器、一切都变得更好一些、但最后4位仍然跳很多。

    我们还尝试在没有运算放大器的情况下测量 AD627。 对于不带放大器的电路、一切都近乎完美、只有最后1-2位跳转。

    但是、我们的应用需要一个运算放大器、ADC 精度至少为14位。

    告诉我我们是否只能管理输出上的 RC 电路??? 或者、您还可以做些什么来提高精度?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    亚历山大


    Cynthia 不在办公室、很抱歉我错过了周一的问题。

    对于数字通信问题、我将确保主器件和 ADC 以及连接到电路的任何其他元件具有公共接地。 ADC 将无法测量浮动输入。

    如果主器件和 ADC 没有相同的接地、则 ADC 与主器件匹配的数字可能会出现问题、并且通信可能是间歇性的。 此外、确保两个数字部分具有相同的电压。 这样、电压电平与所有数字电平匹配。 这也会导致通信问题。

    对于模拟信号测量、需要注意一些事项。 VREF 和 VCC 使用什么。 如果 VREF 来自 REF195、则驱动基准的源是什么? 请注意、随着 REF195的压降、即使在输出电流为2mA 的低电流下、您也需要至少+0.95V 的电压。 如果您将 REF195用于5V 输出、则 REF 需要至少6V 的电源。 如果电源电压较低、则噪声可能比预期的要大。

    对于前端、您能否提供原理图? 您可以参阅使用 AD627测量热敏电阻。 这是在运算放大器作为缓冲器的情况下完成的。 如果您连接到 AD627仪表放大器、我认为您不需要缓冲器、您应该只能使用 RC 前端进行测量 不过、原理图会更清晰。 如果您使用的是运算放大器、您使用的是哪种运算放大器? 运算放大器的噪声和共模输入范围都可能很重要。 我还要注意的是、使用 AD627、您还需要跟踪仪表放大器的输入共模范围和增益。


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

    谢谢! 我们能够准确地解决问题!