LNIT-17
题目:锁定放大器的设计(C题)
摘要:微弱信号检测是发展高新技术,探索及发现新的自然规律的重要手段,对推动很多领域的发展具有重要的应用价值。将淹没在强背景噪声中的微弱信号,运用电子学和近代信号处理手段抑制噪声,进而从噪声中提取和回复有用信号。锁定放大器的设计采用精密放大器,仪用放大器等新型电子元器件实现小信号高倍放大。整个放大器结构由INA826构成的多级交流放大器、OP07构成的带通滤波器、MPY634构成的相敏检波器、OP07构成的参考信号移相器、方波驱动器、低通滤波器、直流放大器等构成。显示电路由MSP430单片机、TLV5618、ADS1115、液晶显示器等构成实现对信号的有效值显示。
1方案比较和论证
1.1总体系统设计
锁定放大器的设计采用精密放大器,仪用放大器等新型电子元器件实现小信号高倍放大。整个放大器结构由INA826构成的多级交流放大器、OP07构成的带通滤波器、MPY634构成的相敏检波器、OP07构成的参考信号移相器、方波驱动器、低通滤波器、直流放大器等构成。显示电路由MSP430单片机、TLV5618、ADS1115、液晶显示器等构成实现对信号的有效值显示。
2 系统硬件设计与实现
2.1 电阻分压衰减网络
电阻分压衰减网络的原理主要是电阻串联分压的知识,输入电路由信号源入信号R (t )输出信号S (t )和两个220K Ω和220Ω的电阻组成,经过计算可得
()()t R R R R t S 2
12
+=
。从公式可以看出,由于分母R1+R2大于R2,所以输出电压小
于入电压。也就是说分压电路是一个对输入信号进行衰减的电路。我们可以通过改变R1或R2的大小来改变输入电压R (t )的大小。通过计算本次设计衰减约1000倍。
图1 锁定放大器基本组成结构框图
信号通道
2.2 加法电路
加法电路的原理是同相放大电路,利用运算放大器来实现加法放大器的功能,输入信号S(t)通过电阻R1加到运算放大器的前一端,输入信号N(t)两个
电阻加到运算放大器的同相端,输出电压V
0通过电阻R3和R4的分压作用,得V
=S
(t)+N(t)。R3为接地电阻,R4为反馈电阻。如图2.1所示
图2.1 加法电路
2.3 前置放大电路
前置放大电路运用两个集成运算放大器INA826的级联,达到对不同信号幅度放大倍数不同的作用。是由前置放大器放大输入的信号,需要先被放大到一定的电平才可以到其它级上。通常前置具有较高的电压增益,可以将小信号放大到标准电平上。
利用三个集成运算放大器,我们可以得到在三部分的增益As=A1*A2*A3,Am=A1*A2,AL=A1*A3,放大倍数依次增大,所得到的输出信号依次减小,变化为10μV,100μV,到1mV。
2.4 带通滤波器
帯通滤波器输入正弦波信号,先通过低通滤波器滤除频率为1100Hz 以上信号,再进过高通滤波器滤除频率为900Hz 以下信号。实现频率在900Hz —1100Hz 的频率能够通过,即通频带为900Hz —1100Hz 。如图2.2所示为通频带为900Hz —1100Hz 的带通滤波器。所用芯片为OP07运算放大器,其中,R1=47k Ω为前端电阻,C2、C4并联等效电容为90nF ,与R3构成低通滤波器。C1、C3并联与R2构成高通滤波器。R4、R5并联与Rf 构成反馈网络实现增益放大。如图2.2所示。
图2.2 带通滤波器
2.5 相敏检波器
相敏检波器采用MPY634芯片,能够实现函数的乘积的作用,原理图如下:
MPY634为Ti 专用乘法器芯片,
()
()()?
??
???----=212121Z Z SF Y Y X X A V OUT 。 当开路时SF=10,A 为可调增益。如图2.3所示。
图2.3 相敏检波器
2.6 低通滤波器
此低通滤波器为两个TI公司的op07构成的有源四阶巴特沃斯滤波器,C2、C4、C5、C7为电源旁路电容,滤除干扰作用。截止频率有电阻电容参数决定。如图2.4所示。
图2.4 低通滤波器
2.7 直流放大器
这一部分,我们运用了同向比例放大的原理,输入信号加到同相端,输出
信号通过两个电阻R
1 和R
2
的分压作用,得到Vn=Vf=R
1
Vo/(R
1
+R
2
),作用于反相
输入端。由于
Vn是由输出电压V
经过反馈元件R1和R2送回到运放的反相输入端。我们这里选取的是R1=10kΩ和R2= 10kΩ。如图2.5所示。
图2.5 直流放大器
2.8 移相器电路
利用op07运算放大器构成移相电路,其中为了防止衰减过大R1与Rf取47K Ω。滑动变阻器R2可调,其作用使输入正弦波滞后移相0°~180°可调。如图2.6所示。
图2.6 移相电路
2.9 方波形成电路
通过OP07构成的过零比较器实现正弦波到方波的变换。如图2.7所示。
图2.7 方波形成电路
2.10 电源部分
电源电路由电源变压器、整流电路、滤波电路、稳压电路等构成。出于对电路的选择,考虑到放大器的特性,我们选择用电源电路输出的电压用来给各个运算放大器供电。采用220V市电供电,经变压器变压为±18V电压,经整流滤波后接LM317、LM337,再进行滤波后得到稳定的±12V电源给运算放大器供电。
2.11 显示电路
显示电路由MSP430单片机、TLV5618、ADS1115、液晶显示器等构成实现对信号的有效值显示。
系统软件任务主要有A/D转换、D/A转换、液晶显示等实现。系统加电后,主程序首先完成系统初始化,其中包括I/O接口、中断系统、定时器、计数器等工作状态的设置以及系统变量赋值等工作,完成系统初始化后检测输入电压,通过液晶显示输出电压有效值。
3 测试方案与测试结果
3.1 指标参数
(1)外接信号源提供频率为1kHz的正弦波信号,幅度自定,输入至参考信号R(t)端。R(t)通过自制电阻分压网络降压接至被测信号S(t)端,S(t)端幅度
有效值为 10μV~1mV。
(2)参考通道的输出r(t)为方波信号,r(t)的相位相对参考信号R(t)可连续或步进移相180度,步进间距小于10度。
(3)信号通道的3dB频带范围为900Hz~1100Hz。误差小于20%。
(4)在锁定放大器输出端,设计一个能测量并显示被测信号S(t)幅度有效值的电路。所测量的显示值与S(t)有效值的误差小于10%。
(5)在锁定放大器信号S(t)输入端增加一个运放构成的加法器电路,实现S(t)
与干扰信号n (t )的1:1叠加,如图2所示。
(6)用另一信号源产生一个频率为1050~2100Hz 的正弦波信号作为n (t ),将
其叠加在锁定放大器的输入端,信号幅度等于S (t )。n (t )亦可由与获得S (t )同样结构的电阻分压网络得到。锁定放大器应尽量降低n (t )对S (t )信号有效值测量的影响,测量误差小于10%。
(7)增加n (t )幅度,使之等于10S (t ),锁定放大器对S (t )信号有效值的测量误
差小于10%。
3.2 测试仪表
为了确定系统与题目要求的符合程度,对系统中的关键部分进行了实际测试。使用仪器设备见表4—1
3.3 指标测试
1、交流放大器放大倍数测试
根据选择的元器件交流放大器由两极构成,两级放大倍数相同,均为34.13,
图2 锁定放大器叠加噪声电路图
S (t ) n (t )
整体放大倍数1165,实测为1236。误差为5.5%。
2、带通滤波器性能测试
测试条件V+ =12v,V- =-12v,带通滤波器的输入电压Vinp-p =4v测试结果如表4.1。
中心频率990Hz,带宽910Hz-1050Hz。满足设计要求。
3、四阶低通滤波器性能测试
低通滤波器输入信号Vinp-p =2v,对应不同频率输出电压如表4.2。通带电压放大倍数约5倍。截止频率约770Hz。相敏检波器输出的交流信号最低频率2000Hz。低通滤波器满足设计要求。
表4.2四阶低通滤波器测试数据
4、移相器特性测试
用Vinp-p=2V,信号测试,方波相移可以从0°~180°连续可调。输出信号频率幅值不变。
3.4 系统误差分析
测试结果表明,在软硬件结合下,锁定放大器的性能满足题目要求的大部分性能指标,由于时间紧张和水平有限部分电路不完善。测试指标不理想。产生测试误差。
系统误差产生原因主要有以下几方面:
(1)由于测试信号属于微弱小信号,电源噪声以及电路布局不理想引入的干扰,对测试结果产生影响。
(2)由于时间原因电路设计采用多功能板连接,因此干扰严重。
(3)元器件精度引入的误差。
(4)单片机显示引入的量化误差。
4 总结
锁定放大器的设计采用精密放大器,仪用放大器等新型电子元器件实现小信号高倍放大。整个放大器结构由TLV826构成的多级交流放大器、OP07构成的带通滤波器、MPY634构成的相敏检波器、OP07构成的参考信号移相器、方波驱动器、低通滤波器、直流放大器等构成。显示电路由MSP430单片机、TLV5618、ADS1115、液晶显示器等构成实现对信号的有效值显示。测试结果基本符合设计要求,实现绝大部分性能指标。
在本次设计的过程中,遇到了许多困难,开始设计进度比较慢,但通过仔细的分析和进行多方面的调整后解决了问题,从中我们对电子专业知识与技能得到了更多的理解与提高。比赛中三个人分工明确,积极配合,最终完成了设计,这使我们深刻地体会到了共同协作和团队精神的重要性。总之,这次比赛对我们每个人都影响非常深刻。
参考文献:
[1]《微弱信号检测》,高晋占著,清华大学出版社,2004年;
[2]《电子设计与制作100例》,张金著,北京:北京电子工业出版社,2009年;
[3]《模拟电子线路基础》,吴运昌著,广州:华南理工大学出版社,2004年;
[4]《数字电子技术基础》,阎石著,北京:高等教育出版社,1997年;
[5]《实验电子技术》,王振宇等著,北京:电子工业出版社,2004年;
附录:
附1:主要元器件清单:
1、单片机MSP430 G2553
2、12位D/A转换器TLV5618
3、16位A/D转换器ADS1115
4、液晶QC12864B
5、仪用放大器INA826
6、高精度运算放大器OP07
7、稳压芯片LM317、LM337
8、精密放大器OPA2320
附3:程序清单
#include
#define uint unsigned int
#define uchar unsigned char
/**********12864引脚定义********************/ #define LCD_CS_H P2OUT|=BIT3//片选
#define LCD_CS_L P2OUT&=~BIT3
#define LCD_SID_H P2OUT|=BIT4//串行数据
#define LCD_SID_L P2OUT&=~BIT4
#define LCD_SCLK_H P2OUT|=BIT5//时钟
#define LCD_SCLK_L P2OUT&=~BIT5
/***********ADS_1115引脚定义*****************/ #define SCL 0x01
#define SDA 0x20
#define SCL_SEL P2SEL &= ~SCL
#define SCL_DDR_OUT P2DIR |= SCL
#define SCL_OUT P2OUT
#define SCL_H SCL_OUT |= SCL
#define SCL_L SCL_OUT &= ~SCL
#define SDA_SEL P1SEL &= ~SDA
#define SDA_DDR_OUT P1DIR |= SDA
#define SDA_DDR_IN P1DIR &= ~SDA
#define SDA_OUT P1OUT
#define SDA_IN P1IN
#define SDA_H SDA_OUT |= SDA
#define SDA_L SDA_OUT &= ~SDA
/************************************
* ADDR---> GND
* VDD ---> 3.3V
* SCL ---> P2.6
* SDA ---> P2.7
* AINp=AIN0, AINn=GND
************************************/
/**********ADDR宏定义***************/
#define ADDRESS_0 0x90 //ADDR PIN ->GND
#define ADDRESS_1 0x92 //ADDR PIN ->VDD
#define ADDRESS_2 0x94 //ADDR PIN ->SDA
#define ADDRESS_3 0x96 //ADDR PIN ->SCL
/************POINTER REGISTER*****************/ #define Pointer_0 0x00 //Convertion register
#define Pointer_1 0x01 //Config register
#define Pointer_2 0x02 //Lo_thresh register
#define Pointer_3 0x03 //Hi_thresh register
/************CONFIG REGISTER*****************/ #define OS_0 0x0000
#define OS_1 0x8000
#define MUX_0 0x4000 //AINp=AIN0, AINn=GND
#define MUX_1 0x5000 //AINp=AIN1, AINn=GND #define MUX_2 0x6000 //AINp=AIN2, AINn=GND #define MUX_3 0x7000 //AINp=AIN3, AINn=GND #define MUX_4 0x0000 //AINp=AIN0, AINn=AIN1 #define MUX_5 0x1000 //AINp=AIN0, AINn=AIN3 #define MUX_6 0x2000 //AINp=AIN1, AINn=AIN3 #define MUX_7 0x3000 //AINp=AIN2, AINn=AIN3
#define PGA_0 0x0000 //FS=6.144V
#define PGA_1 0x0200 //FS=4.096V
#define PGA_2 0x0400 //FS=2.048V
#define PGA_3 0x0600 //FS=1.024V
#define PGA_4 0x0800 //FS=0.512V
#define PGA_5 0x0A00 //FS=0.256V
#define PGA_6 0x0C00 //FS=0.256V
#define PGA_7 0x0E00 //FS=0.256V
#define MODE_0 0x0000
#define MODE_1 0x0100
#define DR_0 0x0000 //Data Rate = 8
#define DR_1 0x0020 //Data Rate = 16
#define DR_2 0x0040 //Data Rate = 32
#define DR_3 0x0060 //Data Rate = 64
#define DR_4 0x0080 //Data Rate = 128
#define DR_5 0x00A0 //Data Rate = 250
#define DR_6 0x00C0 //Data Rate = 475
#define DR_7 0x00E0 //Data Rate = 860
#define COMP_MODE_0 0x0000
#define COMP_MODE_1 0x0010
#define COMP_POL_0 0x0000
#define COMP_POL_1 0x0008
#define COMP_LAT_0 0x0000
#define COMP_LAT_1 0x0040
#define COMP_QUE_0 0x0000
#define COMP_QUE_1 0x0001
#define COMP_QUE_2 0x0002
#define COMP_QUE_3 0x0003
#define TRUE 1
#define FALSE 0
/*************ADDR Initial********************/
#define ADDRESS ADDRESS_0 //ADDR PIN ->GND
#define ADDRESS_W ADDRESS |0x00 //写地址
#define ADDRESS_R ADDRESS|0x01 //读地址
/*************Config Initial*********************/
#define OS OS_1 //0X8000
#define MUX MUX_1 //AINp=AIN0, AINn=GND #define PGA PGA_1 //FS=6.144V
#define DR DR_0 //Data Rate = 860
#define COMP_QUE COMP_QUE_3
unsigned char t_DAS;
int Format[5];
float VIN_DAS;
unsigned int Config;
unsigned char Writebuff[4],Readbuff[3];
unsigned int Result[2];
int D_ADS; //转换的数字量
float VIN_DAS; //输入的电压值
unsigned char t_DAS;
int Format[5]={0}; //转换的数字量转换成十进制
/*******************************************
函数名称:delay
功能:延时约15us的时间
参数:无
返回值:无
********************************************/
void Delay(void)
{
unsigned char i;
for(i = 0;i < 15;i++)
_NOP();
}
/******************延时1ms的时间*********************/ void Delay_1ms(void)
{
unsigned char i;
for(i = 150;i > 0;i--)
_NOP();
}
/*******************************************
函数名称:Start
功能:完成IIC的起始条件操作
参数:无
返回值:无
********************************************/
void Start(void)
{
SCL_H;
SDA_H;
Delay();
SDA_L;
Delay();
SCL_L;
Delay();
}
/*******************************************
函数名称:Stop
功能:完成IIC的终止条件操作
参数:无
返回值:无
********************************************/ void Stop(void)
{
SDA_L;
Delay();
SCL_H;
Delay();
SDA_H;
Delay();
}
/******************************************* 函数名称:ACK
功能:完成IIC的主机应答操作
参数:无
返回值:无
********************************************/ void ACK(void)
{
SDA_L;
_NOP();
_NOP();
SCL_H;
Delay();
SCL_L;
_NOP();
_NOP();
SDA_H;
Delay();
}
/******************************************* 函数名称:NACK
功能:完成IIC的主机无应答操作
参数:无
返回值:无
********************************************/ void NACK(void)
{
SDA_H;
_NOP();
_NOP();
SCL_H;
Delay();
SCL_L;
_NOP();
_NOP();
SDA_L;
Delay();
}
/**********检查应答信号函数******************/ /*如果返回值为1则证明有应答信号,反之没有*/ /******************************************* 函数名称:Check
功能:检查从机的应答操作
参数:无
返回值:从机是否有应答:1--有,0--无
********************************************/ unsigned char Check(void)
{
unsigned char slaveack;
SDA_H;
_NOP();
_NOP();
SCL_H;
_NOP();
_NOP();
SDA_DDR_IN;
_NOP();
_NOP();
slaveack = SDA_IN&SDA; //读入SDA数值
SCL_L;
Delay();
SDA_DDR_OUT;
if(slaveack)
{
return FALSE;
}
else
{
return TRUE;
}
}
/***************Write a Byte****************/
void Write_1_Byte(unsigned char DataByte)
{
int i;
for(i=0;i<8;i++)
{
if(DataByte&0x80) //if((DataByte<
SDA_H;
else
SDA_L;
Delay();
SCL_H;
Delay();
SCL_L;
Delay();
DataByte <<= 1;
}
SDA_H;
_NOP();
}
/***************Write N Byte****************/
unsigned char Write_N_Byte(unsigned char *writebuffer,unsigned char n) {
int i;
for(i=0;i {