ADI 技术
直播中

华一颖

7年用户 181经验值
私信 关注
[问答]

AD7175-2采集精度和速度和手册上不一样

AD7175测试的结果不太理想,最慢速5hz的时候波动达到5uV,按照手册说的应该1uV以下,AD和电源电路
另外,高速的时候也不知道驱动程序问题还是电路问题!而且手册里的驱动时序感觉说的乱七八糟!(下面图里看下)驱动程序里不能每个字节都CS使能,而是完整一次操作使能一次才可以,那给第一张时序图有啥用??高速情况下速度达不到手册里说的建立时间(5Hz的时候建立时间对着呢),程序如下用的连续转换模式,ADOUT配置浮空输入,其他引脚推挽输出。
实验现象是:高速情况下数据偶尔会出错,电压波动都1-2mV了,而且0x28寄存器配置为50k的时候速度最高也就到10k

程序代码
#include "ad7172.h"
#include "delay.h"
//uint8_t DataRead[4];
void AD_Delay(void)
{
    uint8_t i = 1,j;
    for(j=0; j }

long ReadAD7172()
{
     long d = 0;
     uint8_t i = 0;
    for(i = 0; i < 24; i++)
    {
        d <<= 1;
        SCLK_L;
        AD_Delay();
        if(DOUT_HorL)
            d |= 0x00000001;
        else
            d &= 0xFFFFFFFE;
        SCLK_H;
        AD_Delay();
    }
//    if(a == BIPOLAR)
//    {
        if(d < 0x800000)
            d = -(0x800000 - d); // 是负数,变成补码
        else
            d &= 0x007FFFFF;

//    }
//    result = d;
    return d;
}
uint8_t ReadAD7172_8B()
{
     uint8_t d = 0;
     uint8_t i = 0;
//    while(DOUT_HorL);
//    CS_L;
    for(i = 0; i < 8; i++)
    {
        d <<= 1;
        SCLK_L;
        AD_Delay();
        if(DOUT_HorL)
            d |= 0x01;
        else
            d &= 0xFE;
        SCLK_H;
        AD_Delay();
    }
    return d;
}
/******************************************************************
*函数描述:写AD7714
*局部变量:
*返回变量:
******************************************************************/
void WriteAD7172_8Bit(uint8_t d)
{
    uint8_t i = 0;
    for(i = 0; i < 8; i++)
    {
        SCLK_L;
        AD_Delay();
        if(d & 0x80)
            DIN_H;
        else
            DIN_L;
        SCLK_H;
        AD_Delay();
        d <<= 1;
    }
    DIN_H;
}
void AD7172_Reset(void)
{
    unsigned char i=0;
    SCLK_H;
    CS_L;
    DIN_H;
    for(i=0; i < 12; i++)
    {
        WriteAD7172_8Bit(0xFF);
    }

}
/******************************************************************
*函数描述:初始化AD7714电压测量,AIN2通道
*局部变量:
*返回变量:
******************************************************************/
void InitAD7172_V()
{

    AD7172_Reset();
    CS_H;
//7175 可用
    CS_L;
    WriteAD7172_8Bit(0x01);
    WriteAD7172_8Bit(0x00);
    WriteAD7172_8Bit(0x00);   
    CS_H;
    CS_L;
    WriteAD7172_8Bit(0x02);
    WriteAD7172_8Bit(0x08);
    WriteAD7172_8Bit(0x00);        
    CS_H;
    CS_L;
    WriteAD7172_8Bit(0x10); //选择通道0的 AN0 AN1
    WriteAD7172_8Bit(0x80);
    WriteAD7172_8Bit(0x01);   
    CS_H;
    CS_L;
    WriteAD7172_8Bit(0x20);
    WriteAD7172_8Bit(0x13);
    WriteAD7172_8Bit(0x00);   
    CS_H;
    CS_L;
    WriteAD7172_8Bit(0x28); //选择滤波频率
    WriteAD7172_8Bit(0x00);
    WriteAD7172_8Bit(0x05);    //?为07的时候可以40k  00的时候反而不行 原因未知
    CS_H;
}

最后采集程序
    CS_L;
    while(DOUT_HorL);
    WriteAD7172_8Bit(0x44);
    Acq_value=ReadAD7172();
    CS_H;


这样循环操作采集然后不断上传Acq_value
请各位论坛好友解答下!一起讨论讨论,不胜感激~

手册地址
http://www.analog.com/media/en/technical-documentation/data-sheets/AD7175-8.pdf

回帖(5)

郝思雨

2019-1-21 15:45:28
大侠是怎么测噪声时,输入端接的什么信号?
举报

华一颖

2019-1-21 16:03:36
引用: 深圳王先生 发表于 2019-1-21 16:49
大侠是怎么测噪声时,输入端接的什么信号?

输入端直接短路测噪声,或者可以给个高精度的信号源和仪表对比测量
举报

李辰圻

2019-1-21 16:11:54
请问AD7175测试的如何了?能留个联系方式吗?在使用AD7172时附近有仪器打开或关闭会造成AD7127死机(采集数据不正确)
举报

华一颖

2019-1-21 16:21:21
引用: 京西重工瞿先生 发表于 2019-1-21 17:15
请问AD7175测试的如何了?能留个联系方式吗?在使用AD7172时附近有仪器打开或关闭会造成AD7127死机(采集数据不正确)

现在测试都基本已经没啥问题了,常速和高速指标都和手册基本一致。
短路噪声0.3uV  采样率10hz
死机最主要原因就是DRDY也就是DOUT引脚引起的。
1.用示波器看下DRDY引脚的波形,看是否失真(大部分是这个原因),IO配置为上拉
2.确定一下附近干扰有多大,是否会影响到晶振。
加我qq***
举报

更多回帖

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