前言

购买到的AD7606八通道AD转换模块可以用于各种实验。本文就该模块的基本性能进行测试。

▲ 模块基本信息

▲ 模块基本信息


简介

相应的资料可以在AD7606百度网盘下载,提取文件密码:6f5g.
https://pan.baidu.com/s/1i4HIJvn 密码: 6f5g

 

1. 模块外部接口

▲ 模块外部接口

▲ 模块外部接口

 

2.模块的参考电路图

▲ 模块的电路图

▲ 模块的电路图


制作实验电路

1. 模块对外接口

原来模块是32芯的外部接口,使用10芯电缆制作串行的对外接口。

▲ 制作十芯对外接口

▲ 制作十芯对外接口

引线管脚定义:

管脚定义
1GND
2+5V
3RANGE
4CA-CB
5RD-CLK
6RST
7BUSY
8CS
9D7-DOUTA
10D8-DOUTB

2.Oversample Bit Setting

OS012确定了AD7606数字滤波器的截止频率。实验中,在电路模块后面使用锡桥将OS012焊接在一起,然后通过短路子与GND,+5V选择连接。

▲ Oversample Bit Setting

▲ Oversample Bit Setting

▲ 使用短路子将OS0,1,2都接地

▲ 使用短路子将OS0,1,2都接地

3.串行接口

AD7606数据接口是依靠管脚 _PAR/SER/BYTE来选择的。当管脚为高电平,输出为串行接口;如果是低电平,输出为并行接口。

在模块中,通过R1,R2来确定_PAR管脚的电平的高低。现在配置的是高电平,模块为串行输出接口。
▲ 板上通过R1,R2的焊接来确定串行和还是并行接口

▲ 板上通过R1,R2的焊接来确定串行和还是并行接口

4.CA,CB接口

模块中,CA,CB已经使用锡桥在背面焊接在一起了。因此在控制中只需要一个信号线便可以启动所有的八个通道的采样转换了。


与MCU相连

1.MCU电路板1

电路板采用了在博文“23LC1024四线访问数据”中的MCU板,其中集成了23LC1024串口RAM作为数据缓存,这样可以保证采集数据的速率和时间均匀采样。

该电路模块留有10pin的接口用于控制AD7606模块,接口的定义分别为:

管脚符号功能定义
1GND电源地
2+5V电源
3AD_CLKSPI的CLK, P3,2
4AD_MISOSPIMISO, P3.3
5AD_MOSISPIMOSI, P3.4
6AD_SSSPI_SS, P3.5
7ADCP1AD控制线1, P3.6
8ADCP2AD控制线2, P3.7
9ADCP3AD控制线3, P1.6
10ADCP4AD控制线4, P1.7

2.连接MCU与AD7606模块

按照以下规格,通过面包板搭建实验电路。实际上就是按照顺序将MCU的PIN1,8连接到AD7606模块引脚的3-10。

序号MCU引线AD7606
1ADCP4, P1.7D8_DOUTB
2ADCP3, P1.6D7_DOUTA
3ADCP2,P3.7CS
4ADCP1,P3.6BUSY
5AD_SS,P3.5RST
6AD_MOSI, P3.4RD-CLK
7AD_MISO,P3.3CA-CB
8AD_CLK,P3.2RANGE

▲ 搭建的实验电路

▲ 搭建的实验电路


软件调试 2

1. 基本时序信号

(1) 启动转换与BUSY信号

CACB脉冲C宏定义:

#define AD7606_STARTC           (OFF(AD7606_CACB), ON(AD7606_CACB))
  • CACB的脉冲宽度: T C A C B = 33 n s T_{CACB} = 33ns TCACB=33ns
  • BUSY信号的宽度为: T B U S Y = 3.93 μ s T_{BUSY} = 3.93\mu s TBUSY=3.93μs

▲ 启动转换脉冲与BUSY脉冲

▲ 启动转换脉冲与BUSY脉冲

根据 T B U S Y T_{BUSY} TBUSY的大小,可以看到,最快的转换速率为: 1 / T B U S Y = 1 / 3.93 × 1 0 − 6 = 250 k H z 1/T_{BUSY} = 1/3.93 \times 10^{ - 6} = 250kHz 1/TBUSY=1/3.93×106=250kHz

设计一个函数用于转换并等待BUSY信号完成转换:

//------------------------------------------------------------------------------
unsigned int AD7606Convert(void) {
    unsigned int i;
    AD7606_STARTC;
    
    for(i = 0; i < 0x100; i ++) {
        if(VAL(AD7606_BUSY) == 0) 
            break;
    }
    
    return i;    
}

使用AD7606_CLK作为外部时间指示,测量AD7606Convert()函数执行时间为: T C O N V = 4.17 μ s T_{CONV} = 4.17\mu s TCONV=4.17μs

▲ 测量ADC7606Convert()执行时间

▲ 测量ADC7606Convert()执行时间

(2)读取转换数据

AD7606的串行数据读取时序图为:

▲ AD7606串行数据读取时序图

▲ AD7606串行数据读取时序图

读取相应的子程序:

void AD7606ReadData(int * pData, unsigned char ucNumber) {
    unsigned int nA, nB, nMask;
    unsigned char i, j;
    
    OFF(AD7606_CS);
    
    for(j = 0; j < ucNumber; j ++) {

        nMask = 0x8000;
        nA = nB = 0;
        for(i = 0; i < 16; i ++) {
            ON(AD7606_CLK);
            if(VAL(AD7606_DOUTA))
                nA |= nMask;
        
            if(VAL(AD7606_DOUTB))
                nB |= nMask;
        
            OFF(AD7606_CLK);
            nMask >>= 1;            
        }

    
        *(pData ++) = nA;
        *(pData ++) = nB;
    
    }
        
    ON(AD7606_CS);
}

读取时序与时间:
完成8个数据的读取时间为: T 8 I N T = 44.1 μ s T_{8INT} = 44.1\mu s T8INT=44.1μs

▲ 读取8个数据的时序

▲ 读取8个数据的时序

分别测试读取1~4组数据所需要的时间:

读取组数消耗时间(us)
111.6
222.9
334.4
445.5

如果使用单路数据读取,则读取四个数据的时间为: T 4 = 35.5 μ s T_4 = 35.5\mu s T4=35.5μs,比使用双路同时读取两个通道的四个数据少了9us。

实测读取一个数据的时间为 9 μ s 9\mu s 9μs

读取单个(DOUTA, DOUTB)的子程序为:

void AD7606ReadDataA(int * pData, unsigned char ucNumber) {
    unsigned int nA, nMask;
    unsigned char i, j;
    
    OFF(AD7606_CS);
    
    for(j = 0; j < ucNumber; j ++) {

        nMask = 0x8000;
        nA = 0;
        for(i = 0; i < 16; i ++) {
            ON(AD7606_CLK);
            if(VAL(AD7606_DOUTA))
                nA |= nMask;
        
            OFF(AD7606_CLK);
            nMask >>= 1;            
        }

    
        *(pData ++) = nA;
    }
        
    ON(AD7606_CS);
}

采集数据测试

1. 电压与AD转换数据

测量在AD端口不同的电压,所ADC转换后的数据。下面是给出的采集数据以及相应的数据波形。

volt=[-4.94,-4.74,-4.53,-4.33,-4.13,-3.93,-3.72,-3.52,-3.32,-3.12,-2.91,-2.71,-2.51,-2.31,-2.10,-1.90,-1.70,-1.50,-1.29,-1.09,-0.89,-0.69,-0.48,-0.28,-0.08,0.07,0.31,0.51,0.72,0.92,1.13,1.33,1.53,1.74,1.94,2.15,2.35,2.55,2.76,2.96,3.16,3.37,3.57,3.77,3.98,4.18,4.39,4.59,4.79,5.00]
data=[-16555.00,-15704.00,-15248.00,-14389.00,-13837.00,-13158.00,-12423.00,-11791.00,-11115.00,-10450.00,-9876.00,-9092.00,-8488.00,-7845.00,-7129.00,-6519.00,-5816.00,-5136.00,-4479.00,-3840.00,-3180.00,-2493.00,-1841.00,-1178.00,-526.00,87.00,756.00,1427.00,2100.00,2750.00,3447.00,4083.00,4748.00,5403.00,6122.00,6742.00,7393.00,8037.00,8798.00,9424.00,10185.00,10817.00,11390.00,12081.00,12734.00,13414.00,14187.00,14862.00,15410.00,16005.00]

▲ 电压与采集的AD数据

▲ 电压与采集的AD数据

2. 改变RANGE的设置

前面的实验设置RANGE=1, 这样测量电压范围是 ± 10 V \pm 10V ±10V。下面将RANGE设置为低电平,此时采集电压的范围是 ± 5 V \pm 5V ±5V。重新采集前面的电压,得到如下的测量数据和相关的曲线。

volt=[-4.94,-4.74,-4.53,-4.33,-4.13,-3.93,-3.72,-3.52,-3.32,-3.12,-2.91,-2.71,-2.51,-2.31,-2.10,-1.90,-1.70,-1.50,-1.29,-1.09,-0.89,-0.69,-0.48,-0.28,-0.08,0.07,0.31,0.51,0.72,0.92,1.13,1.33,1.53,1.74,1.94,2.15,2.35,2.55,2.76,2.96,3.16,3.37,3.57,3.77,3.98,4.18,4.39,4.59,4.79,5.00]
data=[-16555.00,-15704.00,-15248.00,-14389.00,-13837.00,-13158.00,-12423.00,-11791.00,-11115.00,-10450.00,-9876.00,-9092.00,-8488.00,-7845.00,-7129.00,-6519.00,-5816.00,-5136.00,-4479.00,-3840.00,-3180.00,-2493.00,-1841.00,-1178.00,-526.00,87.00,756.00,1427.00,2100.00,2750.00,3447.00,4083.00,4748.00,5403.00,6122.00,6742.00,7393.00,8037.00,8798.00,9424.00,10185.00,10817.00,11390.00,12081.00,12734.00,13414.00,14187.00,14862.00,15410.00,16005.00]

▲ 输入电压与ADC数值

▲ 输入电压与ADC数值


  1. 电路板设计工程文件:AD\Test\2020\TestAD7606STC\TestAD7606STC8G.SchDoc ↩︎

  2. C51工程文件:C51\STC\Test\2020\testAD76068G1K\TestAD76068G.uvproj ↩︎

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐