zoukankan      html  css  js  c++  java
  • 电赛总结(二)——AD芯片总结之AD7715

    一、特性参数

    1、16位无失真AD转换器

    2、增益可调,在1,2,32,128可切换。

    3、数字地和模拟地分开,可以减少噪声。

    4、具有较大的输出电流,有比较好的带载能力。

    二、管脚排列

    image

    三、引脚功能

    引脚名称 功能
    SCLK 串行时钟,施密特逻辑输入。将一个外部的串行时钟加于这一输入端口,以访问AD7715 的串行数据。和单片机传输数据时的控制时钟
    MCLKIN 为转换器提供主时钟信号。能以晶体/谐振器或外部时钟的形式提供。晶体/谐振器可以接在MCLKIN 和MCLKOUT 二引脚之间。此外,MCLKIN 也可用CMOS 兼容的时钟驱动, 而MCLKOUT 不连接。时钟频率的范围为500kHz~5MHz
    MCLKOUT 当主时钟为晶体/谐振器时,晶体/谐振器被接在MCLKIN 和MCLKOUT 之间。如果在MCLKIN 引脚处接上一个外部时钟,MCLKOUT 将提供一个反相时钟信号。这个时钟可以用来为外部电路提供时钟源,且可以驱动一个CMOS 负载。如果用户不需要,MCLKOUT 可以通过时钟寄存器中的CLKDIS位关掉。这样,器件不会在MCLKOUT 脚上驱动电容负载而消耗不必要的功率
    CS’ 片选,低电平有效的逻辑输入,选择AD7715。将该引脚接为低电平,AD7715 能以三线接口模式运行(以SCLK、DIN 和DOUT 与器件接口)。在串行总线上带有多个器件的系统中,可由CS’对这些器件作出选择,或在与AD7715通信时,CS’可用作帧同步信号
    RESET 复位输入。低电平有效的输入,将器件的控制逻辑、接口逻辑、校准系数、数字滤波器和模拟调制器复位至上电状态
    AVDD 模拟电源电压,5V
    AVIN(+) 差分模拟输入的正输入端
    AVIN(-) 差分模拟输入的负输入端
    REFIN(+) 基准输入端,基准输入是差分的,并规定REFIN(+)必须大于REFIN(-)。REFIN(+)可以取VDD 和GND 之间的任何值
    REFIN(-) 基准输入端,REFIN(-)可以取VDD 和GND 之间的任何值,且满足REFIN(+)大于REFIN(-)
    AGND 模拟地
    DRDY’

    逻辑输出。这个输出端上的逻辑低电平表示可从AD7705/7706 的数据寄存器获取新的输出字。完成对一个完全的输出字的读操作后,DRDY’引脚立即回到高电平。如果在两次输出更新之间,不发生数据读出,DRDY’将在下一次输出更新前500×tCLKIN 时间返回高电平。当DRDY’处于高电平时,不能进行读操作,以免数据寄存器中的数据正在被更新时进行读操作。当数据被更新后,DRDY’又将返回低电平。DRDY’也用来指示何时AD7705/7706 已经完成片内的校准序列.

    DOUT 串行数据输出端
    DIN 串行数据输入端
    DVDD 数字电源电压,可以是+5V,也可以是3.3V
    DGND 数字地

    四、片内寄存器

    1、概述

          只有四个寄存器,分别是通信、设置、数据还有校准寄存器。一般来说只是用通信和设置以及数据寄存器。而且每次进行操作的时候是先对通信寄存器进行操作,之后再跳到所选的下一个寄存器进行读写。

    2、通信寄存器

    image

    管脚名称 功能
    0/DRDY’ 这意味必须写“0”,否则不能继续进行对寄存器的操作。
    ZERO 这一位必须写“0”,否则芯片不一定能正常工作。
    RS1– RS0 选择下一个进行通讯的寄存器
    image
    STBY “1”表示进入低功耗模式,功耗只有10uW,“0”则是正常工作,一般默认为“0”即可。
    G1-G0 设置增益倍数
    image

    3、设置寄存器

    image

    管脚名称 功能
    MD1 MD0 image
    CLK 时钟位。CLK 位应根据AD7705/7706 的工作频率而设置。如果转换器的主时钟频率为2.4576MHz(CLKDIV=0)或为4.9152MHz(CLKDIV=1),CLK 应置“0”。如果器件的主时钟频率为1MHz(CLKDIV=0)或2MHz (CLKDIV=1),则该位应置“1”。该位为给定的工作频率设置适当的标度电流,并且也(与FS1 和FS0 一起)选择器件的输出更新率。
    FS1, FS0 滤波器选择位,它与CLK 一起决定器件的输出更新率。表12 显示了滤波器的第一陷波和-3dB 频率。
    image
    B/U’ “0”表示双极性设置
    “1”表示单极性设置
    BUF “1”表示二分频,“0”表示不分频
    FSYNC 滤波器同步。该位处于高电平时,数字滤波器的节点、滤波器控制逻辑和校准控制逻辑处于复位状态下,同时,模拟调制器也被控制在复位状态下。当处于低电平时,调制器和滤波器开始处理数据,并在3×(1/输出更新速率)时间内(也就是滤器的稳定时间)产生一个有效字。FSYNC 不影响数字接口,也不使DRDY’输出复位(如果它是低电平)。

    4、数据寄存器

          数据寄存器是一个16 位只读寄存器,它包含了来自AD7715 最新的转换结果。如果通信寄存器将器件设置成对该寄存器写操作,则必定会实际上发生一次写操作以使器件返回到准备对通信寄存器的写操作,但是向器件写入的16 位数字将被AD7715 忽略。

    五、芯片外围电路图

    image

    六、STM32F103ZET驱动程序(以IO口模拟方式)

    #ifndef __ADC7715_H
    #define __ADC7715_H
    
    
    #include "stm32f10x.h"
    #include "pbdata.h"
    #include "spi.h"
    
    //自编函数
    #include "timer.h"
    #include "gpio.h"
    #include "baseFunc.h"
    
    #define SCLK Pin0 
    #define DIN  Pin1 
    #define DOUT Pin2
    #define DRDY Pin3 
    
    void WriteAD7715Data(u8 data);
    
    void delay_Ms(int time);
    
    u32 ReadAD7715Data(u8 byte);
    
    void InitAD7715(void);
    
    u32 GetAD7715Num(void);
    
    
    
    #endif
    #include "adc7715.h"
    
    void delay_Ms(int time)
    {
        u32 i,j;
        for(i=time;i>0;i--)
        {
            for(j=0;j<512;j++)
            {
                
            }
        }
    }
    
    
    void WriteAD7715Data(u8 data)
    {
        u8 i;
        for(i=0;i<8;i++)
        {
            if( (data&0x80)!=0 )
            {
                set_outH(GPIOA,DIN);
            }
            else
            {
                set_outL(GPIOA,DIN);
            }
            data=data<<1;
            delay_Ms(10);
            
            set_outH(GPIOA,SCLK);
            delay_Ms(10);
            set_outL(GPIOA,SCLK);
            delay_Ms(10);
            set_outH(GPIOA,SCLK);
            delay_Ms(10);
        }
        set_outH(GPIOA,DIN);
        delay_Ms(10);
    }
    
    
    
    u32 ReadAD7715Data(u8 byte)
    {
        u8 i;  
        u32 data = 0;
        for(i=0;i<byte*8;i++)
        {
            set_outH(GPIOA,SCLK);
            delay_Ms(10);
            set_outL(GPIOA,SCLK);
            delay_Ms(20);
            
            data=data<<1;
            
            if(read_in(GPIOA,DOUT)==1)
            {
                data=data+1;
            }
            set_outH(GPIOA,SCLK);
          delay_Ms(10);
        }
        return data;
    }
    
    
    
    void InitAD7715(void)
    {
        set_out(GPIOA,SCLK|DIN);
        set_FIN(GPIOA,DOUT|DRDY);
        
        WriteAD7715Data(0x10);
        WriteAD7715Data(0x66);
        
    }
    
    
    
    u32 GetAD7715Num(void)
    {
        while(read_in(GPIOA,DRDY)==1);
        
        WriteAD7715Data(0x38);
        
        return ReadAD7715Data(2);
    }
  • 相关阅读:
    Android开发视频教学第一季(116集)视频&源码下载
    Android开发视频教学第一季(1734集)视频源码下载
    老罗Android开发视频教程( android解析json数据 )4集集合
    Android 亲测源码分享
    老罗Android开发视频教程 (android常用UI编程) 25集集合
    老罗Android开发视频教程 (android常用布局介绍)5集集合
    老罗Android开发视频教程 (android解析xml文件 )3集集合
    Android 开发源码分享
    基于R语言的时间序列分析预测
    .NET新手系列(六)
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4741367.html
Copyright © 2011-2022 走看看