实验室开放项目总结报告

20##年实验室开放项目总结报告

微弱信号检测电路设计

学生姓名:                   

学    号:      

     

电子与信息工程学院

20##年11月12日


                  摘    要

微弱信号检测是发展高新技术,探索及发现新的自然规律的重要手段,对推动很多领域的发展具有重要的应用价值。将淹没在强背景噪声中的微弱信号,运用电子学和近代信号处理手段抑制噪声,进而从噪声中提取和回复有用信号。锁定放大器的设计采用精密放大器,仪用放大器等新型电子元器件实现小信号高倍放大。本系统是基于锁相放大器的微弱信号检测装置,用来检测在强噪声背景下已知频率的微弱正弦波信号的幅度值。该系统由加法器、纯电阻分压网络、微弱信号检测电路和显示电路组成。其中加法器和纯电阻分压网络生成微小信号,微弱信号检测电路和显示电路完成微小信号的检测和显示在液晶屏上。本系统是以相敏检波器为核心,将参考信号经过移相器后,接着通过比较器产生方波去驱动开关乘法器CD4053,最后通过低通滤波器输出直流信号检测出微弱信号,将该直流信号送入单片机处理后,液晶显示出来。经最终的测试,本系统能较好地完成微小信号的检测。

 

关键词:多级交流放大器;微弱信号;相敏检测


目    录

第1章 方案论证.............................................................................................................. 1

1.1微信号检测电路................................................................................................... 1

1.2移相网络设计...................................................................................................... 1

1.3总体系统设计...................................................................................................... 1

第2章 分模块电路的工作原理分析及电路图.................................................................... 3

2.1电阻分压衰减网络............................................................................................... 3

2.2加法电路............................................................................................................. 3

2.4带通滤波器.......................................................................................................... 4

2.5相敏检波器.......................................................................................................... 4

2.6低通滤波器.......................................................................................................... 5

2.7直流放大器.......................................................................................................... 5

2.8移相器电路.......................................................................................................... 6

2.9方波形成电路...................................................................................................... 7

2.10 电源部分........................................................................................................... 7

2.11 显示电路........................................................................................................... 7

第3章 程序设计.............................................................................................................. 8

3.1单片机检测电路设计流程图................................................................................. 8

3.2部分程序代码...................................................................................................... 8

第4章 测试结果与分析................................................................................................. 23

4.1 指标参数........................................................................................................... 23

4.2测试仪表............................................................................................................ 23

4.3指标测试............................................................................................................ 24

4.4系统误差分析..................................................................................................... 25

第5章 设计总结............................................................................................................ 26

参考文献........................................................................................................................ 27

附录I:元器件清单........................................................................................................ 28

附录II:微弱信号检测电路的实物.................................................................................. 29


第1章 方案论证

1.1微信号检测电路

方案一:采用滤波电路检测微小信号,通过滤波电路将微小信号从强噪声中检测出来,但滤波电路中心频率是固定的,而信号的频率是可变的,无法达到要求,所以该方案不可行。

方案二:采用取样积分电路检测小信号,利用取样技术,在重复信号出现的期间取样,并重复N次,则测量结果的信噪比可改善倍,但这种方法取样效率低,不利于重复频率的信号恢复。

方案三:采用锁相放大器检测小信号,锁相放大器由信号通道、参考通道、和相敏检波器等组成,其中相敏检波器(PSD)是锁相放大器的核心,PSD把从信号通道输出的被测交流信号进行相敏检波转换成直流,只有当同频同相时,输出电流最大,具有很好的检波特性。由于该测试信号的频率是指定的且噪声强、信号弱,正好适合于锁相放大器的工作情况,故选择方案三。

1.2移相网络设计

因为检测电路选择了锁相放大器,而移相网络是锁相放大器中的一部分,在此进行分析。

方案一:采用全通滤波器模拟移相电路,一阶全通滤波器的移相范围接近180度,所以通过设计两级滤波则可使移相范围达到360度。

方案二:采用数字移相方法,数字移相可以在4个象限内进行0~89°的调节,合起来即实现了0~360°的移相,由集成芯片控制频率和相位预值,如用CD4046锁相环组成。

方案一与方案二相比,电路简单可靠,且方案二增加了电路的复杂度,成本也很高。

故选择方案一。

1.3总体系统设计

锁定放大器的设计采用精密放大器,仪用放大器等新型电子元器件实现小信号高倍放大。整个放大器结构由INA826构成的多级交流放大器、OP07构成的带通滤波器、MPY634构成的相敏检波器、OP07构成的参考信号移相器、方波驱动器、低通滤波器、直流放大器等构成。显示电路由MSP430单片机、TLV5618、ADS1115、液晶显示器等构成实现对信号的有效值显示。

 


第2章 分模块电路的工作原理分析及电路图

2.1电阻分压衰减网络

电阻分压衰减网络的原理主要是电阻串联分压的知识,输入电路由信号源入信号R(t)输出信号S(t)和两个220KΩ和220Ω的电阻组成,经过计算可得。从公式可以看出,由于分母R1+R2大于R2,所以输出电压小于入电压。也就是说分压电路是一个对输入信号进行衰减的电路。我们可以通过改变R1或R2的大小来改变输入电压R(t)的大小。通过计算本次设计衰减约1000倍。

2.2加法电路

加法电路的原理是同相放大电路,利用运算放大器来实现加法放大器的功能,输入信号S(t)通过电阻R1加到运算放大器的前一端,输入信号N(t)两个电阻加到运算放大器的同相端,输出电压V0通过电阻R3和R4的分压作用,得V0=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专用乘法器芯片,

当开路时SF=10,A为可调增益。如图2.3所示。

图2.3  相敏检波器

2.6低通滤波器

此低通滤波器为两个TI公司的op07构成的有源四阶巴特沃斯滤波器,C2、C4、C5、C7为电源旁路电容,滤除干扰作用。 截止频率有电阻电容参数决定。如图2.4所示。

 


图2.4 低通滤波器

2.7直流放大器

这一部分,我们运用了同向比例放大的原理,输入信号加到同相端,输出信号通过两个电阻R1  和R2的分压作用,得到Vn=Vf=R1Vo/(R1+R2),作用于反相输入端。由于Vn是由输出电压V0经过反馈元件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单片机检测电路设计流程图

本程序是通过AD采样后经过快速傅里叶变换后,当达到最大检测频率信号后,接入带阻滤波器,最后经DA输出,实现了啸叫检测与抑制的功能。

                   

图3.1  单片机检测电路流程图

3.2部分程序代码

#include <msp430g2553.h>

#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<<i)&0x80)

                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<n;i++)

       {

              Write_1_Byte(*writebuffer);

              if(Check())

              {

                     writebuffer ++;

              }

              else

              {

                     Stop();

                  return FALSE;

              }

       }

       Stop();

       return TRUE;

}

/***************Read a Byte****************/

unsigned char Read_1_Byte(void)

{

    unsigned char data=0,FLAG, i;

    for(i=0;i<8;i++)

    {

       SDA_H;

       Delay();

        SCL_H;

       SDA_DDR_IN; //端口为输入

       Delay();

        FLAG=SDA_IN& SDA;

        data <<= 1;

       if( FLAG)

          data |= 0x01;

       SDA_DDR_OUT;

        SCL_L;

        Delay();

    }

    return data;

}

/***************Read N Byte****************/

void Read_N_Byte(unsigned int*readbuff,unsigned char n)

{

       unsigned char i;

       for(i=0;i<n;i++)

       {

              readbuff[i]=Read_1_Byte();

              if(i==n-1)

                     NACK();  //不连续读字节

              else

                     ACK(); //连续读字节

       }

       Stop();

}

/*****************初始化******************/

void InitADS1115(void)

{

    SCL_SEL;

    SDA_SEL;

    SCL_DDR_OUT;

    SDA_DDR_OUT;

    SDA_H;

    Config = OS+MUX+PGA+DR+COMP_QUE;

    Writebuff[0]=ADDRESS_W;//0x90

    Writebuff[1]=Pointer_1;//0x01

    Writebuff[2]=Config/256;

    Writebuff[3]=Config%256;

    Readbuff[0]=ADDRESS_W;//0x90

    Readbuff[1]=Pointer_0;//0x00

    Readbuff[2]=ADDRESS_R;//0x91

}

/***************Write a Word***********************/

void WriteWord(void)

{

     int t;

     Start();   //写入4个字节

     do

     {

          t=Write_N_Byte(Writebuff,4);

     }while(t==0);

}

/***************Read Word***********************/

void ReadWord(void)

{

    int t;

    Start();  //写入2个字节

    do

    {

      t=Write_N_Byte(Readbuff,2);

    }while(t==0);

    Start();   //写入2个字节

    do

    {

      t=Write_N_Byte(&Readbuff[2],1);

    }while(t==0);

    Read_N_Byte(Result,2);  //读出2个字节

}

//用递归方法将正整数x转换为10进制格式

void ShowInt(long int x)

{

       if(x)

       {

          Format[t_DAS]= x%10;

          t_DAS  ++;

          ShowInt(x/10);

       }

}

/***************ADS1115********************/

void ADS1115(void)

{

//    InitADS1115();

    WriteWord();

    Delay_1ms();

    ReadWord();

    D_ADS=Result[0]*256+Result[1];  //转换的数字量

    t_DAS=0;

    ShowInt(D_ADS);    //转换的数字量转换成十进制

    VIN_DAS=4.096*D_ADS/32768;  //输入的电压值

}

void int_port(void)

{

       P2SEL&=~BIT3;                        //P1.4模拟SID

       P2DIR|=BIT3;

       P2SEL&=~BIT4;                        //P1.4模拟SID

       P2DIR|=BIT4;

       P2SEL&=~BIT5;                        //P1.5模拟SCLK

       P2DIR|=BIT5;

       P1SEL &=BIT6;

       P1DIR |=BIT6;

       P1OUT |=BIT6;

       P1SEL &=BIT7;

       P1DIR |=BIT7;

       P1OUT |=BIT7;

       SDA_OUT;

}

/***************************************************************************

** Function name:       delay

** Descriptions:        延时函数

****************************************************************************/

void delayX(uint z)

{

       uint x,y;

       for(x=0; x<z;  x++)

              for(y=0; y<10; y++);

}

/***************************************************************************

** Function name:       sendbyte

** Descriptions:        按照液晶的串口通信协议发送数据

****************************************************************************/

void sendbyte(unsigned char send_dat)

{

       unsigned int i;

       for(i=0; i<8; i++)

       {

              if((send_dat << i) & 0x80)

              {

                     LCD_SID_H;

               }

              else

              {

                     LCD_SID_L;

              }

              LCD_SCLK_L;

              LCD_SCLK_H;

       }

}

/***************************************************************************

** Function name:       write_com

** Descriptions:        写串口指令

****************************************************************************/

//串口控制格式(11111AB0)

//A数据方向控制,A=H时读,      A=L时写

//B数据类型选择,B=H时显示数据,B=L时显示命令

void write_com(uchar com)

{

       LCD_CS_H;

       sendbyte(0xf8);                //MCU向LCD发命令 A=0 B=0

       sendbyte(com & 0xf0);         //发高四位数据(数据格式D7D6D5D4_0000)

       sendbyte((com << 4) & 0xf0);  //发低四位数据(数据格式D3D2D1D0_0000)

       delayX(2);                      //延时等待

       LCD_CS_L;

}

/***************************************************************************

** Function name:       write_dat

** Descriptions:        写串口数据

****************************************************************************/

void write_dat(uchar dat)//写数据函数

{

       LCD_CS_H;

       sendbyte(0xfa);

       sendbyte(dat & 0xf0);         //发高四位数据

       sendbyte((dat << 4) & 0xf0);  //发低四位数据

       delayX(2);

       LCD_CS_L;

}

/***************************************************************************

** Function name:       lcd_init

** Descriptions:        液晶初始化

****************************************************************************/

void lcd_init(void)

{

       write_com(0x0c);               //整体显示,关游标

       delayX(50);

       write_com(0x01);               //清屏

       delayX(50);

       write_com(0x06);               //入口设置

       delayX(50);

}

/***************************************************************************

** Function name:       print_string

** Descriptions:        显示字符串

****************************************************************************/

void print_string(uchar *s)          //发送字符串

{

       while(*s > 0)                      //C语言里字符串末尾自动加“\0”(ASCII码值为0)

       {

          write_dat(*s);                //发送字符对应的ASCII码,12864指针可设置自动指向下一个显示地址

          s++;

          delayX(50);

       }

}

/***************************************************************************

** Function name:       LCD_12864_address_set

** Descriptions:        地址坐标设置

****************************************************************************/

void LCD_12864_address_set( uchar x,uchar y )

{

       uchar Address ;

       switch( y )

       {

              case 1  :  Address = 0x80 + (x - 1);  break;

              case 2  :  Address = 0x90 + (x - 1);  break;

              case 3  :  Address = 0x88 + (x - 1);  break;

              case 4  :  Address = 0x98 + (x - 1);  break;

              default :                             break;

       }

       write_com(Address);

}

/***************************************************************************

** Function name:       LCD_12864_string

** Descriptions:        显示函数

****************************************************************************/

void LCD_12864_string( uchar y, uchar x, uchar *pData )

{

       LCD_12864_address_set(x,y);

       while( *pData != '\0' )

       {

              write_dat(*pData++);

       }

}

void display_channel(void)

{

       switch(MUX)

       {

              case 0x4000:   LCD_12864_string(3,1,"通道:0");break;

              case 0x5000:   LCD_12864_string(3,1,"通道:1");break;

              case 0x6000:   LCD_12864_string(3,1,"通道:2");break;

              case 0x7000:   LCD_12864_string(3,1,"通道:3");break;

              case 0x0000:   LCD_12864_string(3,1,"通道:4");break;

              case 0x1000:   LCD_12864_string(3,1,"通道:5");break;

              case 0x2000:   LCD_12864_string(3,1,"通道:6");break;

              case 0x3000:   LCD_12864_string(3,1,"通道:7");break;

              default: break;

       }

}

void main()

{

       int i,temp,num[4];

       WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

       if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)

       {

              while(1); // If calibration constants are erased        // do not load, trap CPU!!

       }

       BCSCTL1 = CALBC1_1MHZ; // Set DCO

       DCOCTL = CALDCO_1MHZ;//    P1DIR |=BIT6;//    P1OUT |=BIT6;

       int_port();

       lcd_init();

       LCD_12864_string(1,2,"ADS_1115测量");

       LCD_12864_string(2,1,"电压值:     V");

       InitADS1115();

       display_channel();//

       while(1)

       {

              ADS1115();

              write_com(0x98);

              for(i=t_DAS -1;i>=0; i--)

              {

                     write_dat(Format[i]+'0');

              }

              temp=(int)(VIN_DAS*1000);

              num[0]=temp/1000;

              num[1]=temp%1000/100;

              num[2]=temp%100/10;

              num[3]=temp%10;

              write_com(0x94);

              write_dat(num[0]+'0');

              write_dat('.');

              for(i=1;i<4; i++)

              {

                     write_dat(num[i]+'0');

              }

       //     delayX(250); //注意延时

       }

}

第4章 测试结果与分析

4.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叠加,如图4.1所示。

 

(6)用另一信号源产生一个频率为1050~2100Hz的正弦波信号作为n(t),将其叠加在锁定放大器的输入端,信号幅度等于S(t)n(t)亦可由与获得S(t)同样结构的电阻分压网络得到。锁定放大器应尽量降低n(t)对S(t)信号有效值测量的影响,测量误差小于10%。

(7)增加n(t)幅度,使之等于10S(t)锁定放大器对S(t)信号有效值的测量误差小于10%。

4.2测试仪表

为了确定系统与题目要求的符合程度,对系统中的关键部分进行了实际测试。使用仪器设备见表4.2。

表4.2 测试使用的仪器设备

4.3指标测试

1、交流放大器放大倍数测试

    根据选择的元器件交流放大器由两极构成,两级放大倍数相同,均为34.13,整体放大倍数1165,实测为1236。误差为5.5%。

2、带通滤波器性能测试

测试条件V+ =12v,V- =-12v,带通滤波器的输入电压Vinp-p =4v测试结果如表4.2。

中心频率990Hz,带宽910Hz-1050Hz。满足设计要求。

表4.2  带通滤波器测试数据

3、四阶低通滤波器性能测试

低通滤波器输入信号Vinp-p =2v,对应不同频率输出电压如表4.3。通带电压放大倍数约5倍。截止频率约770Hz。相敏检波器输出的交流信号最低频率2000Hz。低通滤波器满足设计要求。

表4.3四阶低通滤波器测试数据 

4、移相器特性测试

    用Vinp-p=2V,信号测试,方波相移可以从0°~180°连续可调。输出信号频率幅值不变。

4.4系统误差分析

测试结果表明,在软硬件结合下,锁定放大器的性能满足题目要求的大部分性能指标,由于时间紧张和水平有限部分电路不完善。测试指标不理想。产生测试误差。

系统误差产生原因主要有以下几方面:

(1)   由于测试信号属于微弱小信号,电源噪声以及电路布局不理想引入的干扰,对测试结果产生影响。

(2)       由于时间原因电路设计采用多功能板连接,因此干扰严重。

(3)       元器件精度引入的误差。

(4)       单片机显示引入的量化误差。

第5章 设计总结

    本实验项目设计主要有锁定放大器的设计采用精密放大器,仪用放大器等新型电子元器件实现小信号高倍放大。整个放大器结构由TLV826构成的多级交流放大器、OP07构成的带通滤波器、MPY634构成的相敏检波器、OP07构成的参考信号移相器、方波驱动器、低通滤波器、直流放大器等构成。显示电路由MSP430单片机、TLV5618、ADS1115、液晶显示器等构成实现对信号的有效值显示。测试结果基本符合设计要求,实现绝大部分性能指标。在本次设计的过程中,遇到了许多困难,开始设计进度比较慢,但通过仔细的分析和进行多方面的调整后解决了问题,从中我们对电子专业知识与技能得到了更多的理解与提高。比赛中三个人分工明确,积极配合,最终完成了设计,这使我们深刻地体会到了共同协作和团队精神的重要性。总之,这次比赛对我们每个人都影响非常深刻。

               参考文献

[1] 高晋占主编《微弱信号检测》清华大学出版 2004

[2] 阎石主编《数字电子技术基础》高等教育出版社 2012.3

[3] 张毅刚主编《单片机原理与应用设计》电子工业出版社 2008.4

[4] 陈永真主编《全国大学生电子设计竞赛试题精讲选》电子工业出版社 2006.1

[5] 王昊主编《通用电子元器件的选用与检测》电子工业出版社 2006.1

[6] 全国大学生电子设计竞赛组委会编《第九届全国大学生电子设计竞赛获奖作品选编》北京理工大学出版社 2008.11

[7] 华成英主编《模拟电子技术基本教程》清华大学出版社 2009.8.

[8] 李杰等编著《电子技术基础》清华大学出版社 2008.

[9] 郑家龙主编《集成电子技术基础教程》高等教育出版社 2002.

[10]张金主编《电子设计与制作100例》北京电子工业出版社,20##年

[11]陈汝全主编《电子技术常用器件应用手册》北京理工大学出版社1991.

[12]王振宇主编《实验电子技术》 电子工业出版社,2004

附录I:元器件清单

附录II:微弱信号检测电路的实物

                               图 Ⅳ-1

                                  图 Ⅳ-2

相关推荐