AD8370

本贴最后更新于 489 天前,其中的信息可能已经事过境迁

概述

  AD8370 是一款低成本、数字控制、==可变增益放大器(VGA),提供精确的增益控制、==高 IP3 和低噪声系数。良好的失真性能和宽频带使 AD8370 成为现代接收机增益控制的理想器件。

  对于宽输入、动态范围应用,==AD8370 提供两个输入范围:高增益模式和低增益模式。==一个游标,7 位,跨导(gm)级在优于 2db 分辨率下提供 28db 增益范围,在优于 1db 分辨率下提供 22db 增益范围。可以选择第二个增益范围,比第一个增益范围高 17 dB,以提供更好的噪声性能。

  通过对 PWUP 引脚施加适当的逻辑电平,AD8370 上电。在断电时,AD8370 的功耗低于 4 mA,并提供出色的输入输出隔离。在断电模式下工作时,增益设置保留。

  AD8370 的增益控制是通过一个==串行 8 位增益控制字==实现的。MSB 在两个增益范围之间进行选择,其余 7 位以精确的线性增益步骤调整总体增益。

  ‍

引脚

  ​image

理论

前置放大器

  有两个可选的输入前置放大器。通过串行增益控制数据字的最高有效位(MSB)进行选择。在高增益模式下,总体器件==增益比低增益设置高 7.1 V/V (17 dB)。==两个前置放大器使 AD8370 能够适应大范围的输入幅度。两个增益范围之间的重叠允许用户基于噪声和失真要求的一些灵活性。

输出放大器

image时序

  数字接口和时序数字控制端口==使用标准 TTL 接口==。当 LTCH 引脚保持==低位==时,以串行方式读取 8 位控制字。在 CLCK 信号的每个==上升沿==上读取呈现给 DATA 引脚的电平。图 41 演示了控制接口的时序图。时序参数的最小值如表 4 所示。图 42 是数字输入引脚的简化示意图。

  ​image

增益

  AD8370 的两个增益范围被称为==高增益(HG)和低增益(LG)==。在每个范围内,有==128==个可能的增益码。因此,低增益范围内的最小增益由术语 LG0 给出,而该范围内的最大增益由术语 LG127 给出。对于高增益范围也是如此。LG0 和 HG0 基本上都关闭可变跨导级,因此这些代码没有输出可用(参见图 26)。

  理论线性电压增益可以用增益码表示为 AV = GainCode 游标(1 + (PreGain−1)MSB),其中 AV 为线性电压增益。

  ==GainCode 是数字增益控制字减去 MSB(最后 7 位)。==

  游标= 0.055744 V/V PreGain = 7.079458 V/V MSB 是 8 位增益控制字中最重要的位。

  ==MSB 将设备设置为高增益模式(MSB = 1)或低增益模式(MSB = 0)。==

  例如,HG45(或 10101101 二进制)的增益控制字产生 17.76 V/V 的理论线性电压增益,计算为 45 × 0.055744 ×(1 +(7.079458−1)× 1)增益范围内增益的增加或减少仅仅是对 GainCode 进行操作的问题。六个-dB 增益步骤,相当于线性电压增益加倍或减半,通过加倍或减半 GainCode 来实现。

  当电源首次应用到 AD8370 时,该器件被编程为编码 LG0,以避免随后的电路过载。

  ​imageAV = GainCode * figure(系数)

  GainCode = AV / figure.

  MSB=1,figure=0.3946.

  ​image

  MSB=0,figure=0.0557.

  ​image

其他

AV 和 DB

  AV(Linear Voltage Gain)代表==线性电压增益==,是以电压比例的形式表示的增益。它用于衡量信号在电路中经过放大后的增益大小。

  DB(Decibels)代表分贝,是一种以对数比例的形式表示的增益或损耗。在电子和通信领域,我们常使用分贝来表示==信号的相对增益或减少==。

  两者之间可以通过下面的公式进行转换:

  ==AV = 10^(DB/20)==

  其中,AV 是线性电压增益,DB 是分贝值。

  如果要将线性电压增益转换为分贝值,可以使用以下公式:

  DB = 20 * log10(AV)

  需要注意的是,这些公式是基于常用的线性和对数关系,但在具体的应用中,还可能涉及到不同的放大器特性、阻抗匹配等因素,因此在实际使用中可能需要考虑更多的因素来进行精确的转换计算。

程序

#include "ad8370.h"
#include "STC8A_GPIO.h"
#include "math.h"

void ad8370_init()
{
    GPIO_InitTypeDef GPIO_InitStr;
    GPIO_InitStr.Mode = GPIO_PullUp;
    GPIO_InitStr.Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
    GPIO_Inilize(GPIO_P0,&GPIO_InitStr);

    RESET_DATA;
    RESET_CLCK;
    SET_LTCH;
}
/*****
	range 0低增益 1高增益(可选范围0-127)
	gainCode 增益
*****/
void ad8370_write(unsigned char range, char gainCode)
{
    unsigned char i;

    SET_LTCH;
    delay_us(10);
    RESET_LTCH;

    if(range == 1)//选择高增益
    {
        gainCode |= 0x80;
    }

    for(i=0; i<8; i++)
    {
        RESET_CLCK;
        delay_us(10);
        if(gainCode & 0x80)
        {
            SET_DATA;
        }
        else
        {
            RESET_DATA;
        }
        delay_us(10);
        SET_CLCK;
        delay_us(10);
        gainCode<<=1;
    }
    SET_LTCH;
    RESET_CLCK;
}
/*****
	range 0低增益 1高增益(可选范围0-127)
	DB 增益
*****/
unsigned char set_DB(unsigned char range, char DB)
{
    float figure,AV;//系数
	unsigned char gaincode=0;
    AV = pow(10,DB/20.0);  //==AV = 10^(DB/20)==

    if(range == 0)
    {
        figure = 0.3946;
    }
    else
    {
        figure = 0.0557;
    }

    gaincode = (char)(AV / figure);

    ad8370_write(range,gaincode);
    return gaincode;//返回gaincode
}


#ifndef _AD8370_H_
#define _AD8370_H_

#include "STC8A_Delay.h"
#include "math.h"

//引脚定义
sbit DATA=P0^0;
sbit CLCK=P0^1;
sbit LTCH=P0^2;
//sbit SEC=P0^3;

#define RESET_DATA DATA=0
#define SET_DATA DATA=1

#define RESET_CLCK CLCK=0
#define SET_CLCK CLCK=1

#define RESET_LTCH LTCH=0
#define SET_LTCH LTCH=1

//初始化
void ad8370_init();

//写控制字
void ad8370_write(unsigned char range, char gainCode);

//设置DB
unsigned char set_DB(unsigned char range, char DB);

#endif

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...