《毕业设计(论文)集成运放参数测试仪程序设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)集成运放参数测试仪程序设计.doc(46页珍藏版)》请在三一办公上搜索。
1、集成运放参数测试仪程序设计内容摘要:该课题设计的运算放大器闭环参数测试系统是基于MSC-51单片机控制模块,并且由LCD(Liquid Crystal Display)显示模块,键盘模块,数据采集和转换模块,采用DDS芯片(AD9851)实现了40kHz4MHz的扫频输出模块等五部分组成。采用辅助运放测试方法,可对运放的输入失调电压、输入失调电流、交流差模开环电压增益和交流共模抑制比以及单位增益带宽进行测量。在软件上,用C语言来编程实现。其要实现的功能包括:对来自TLC2543A/D转换的数字信号进行接收、分析、计算和对结果的显示;通过不同键值的接收、分析来控制对不同对象的测量,并在LCD上显
2、示对应的人机界面;对来自DDS的高频信号源的频率进行控制来实现对集成运放的带宽参数的测试和显示。而且具有自动量程转换、自动测量功能和良好的人机交互性。关键词:单片机 C语言 DDS LCD 人机交互界面The Instrument for testing the Parameters of Integrated Operation Amplifierprogram designAbstract:This system is designed based on C51 microcontroller to measure the close loop parameters of the oper
3、ation amplifier. The system conclude five modules: LCD (liquid crystal display) display module, keyboard module, data collection module, conversion module, and the module of generating sweep sine-wave signal with frequency range from 40 kHz to 4 MHz, using the DDS chip of AD9851. The system can meas
4、ure the input offset voltage、the input offset current、the open loop AC differential mode voltage gain、the AC common mode rejection ratio and unit gain bandwidth,using the measure method of assistant amplifier. The data can be display on the LCD which is using of C program. And the function concludes
5、: receiving, analysing and calculating the digital signals from TLC2543A/D then send them to show; accepting different key value on keyboards, analysing and processing it for controlling the measurement of different target and display on the LCD with different computer interface; controlling the ban
6、dwidth of HF signal source from DDS chip to measure the integrated transport bandwidth parameters and display the result. Whats more C51 microcontroller can control relays to complete auto measurement range switching ,auto measuring and good interface. Key Words:MCU CLanguage DDS LCD interface目 录前言1
7、一、系统原理框图1二、硬件单元电路设计与实现2(一)、四个参数的测试电路2(二)单位增益带宽测量电路3(三)测试的信号源3(四)峰峰值检测电路的设计4(五)A/D采样电路4(六)扫频信号源4(七)键盘接口电路5(八)显示接口电路5三、软件设计6(一)软件功能设计6(二)系统软件框图和程序流程图6(三)软件模块设计7四、系统测试19(一)程序调试方法19(二)软件调试19(三)联机调试20五、结束语20六、感谢词20参考文献20附录一21附录二22附录三36(一)TLC254336(二)LCD液晶显示器36附录四38集成运放参数测试仪程序设计前言目前国内外市场上各种型号的集成运放参数测试仪已经相
8、当多,而且普遍性都采用“辅助放大器的测量方法”,使测试仪的整个系统具有稳定性好,精确度高,范围大的特点,而且测试仪测试参数一般包括:正向最大输出电压+,负向最大输出电压-,正向最大共模输出电压+,负向最大共模输出电压-,正转换速率+ ,负转换速率-,静态工作电流,输入失调电压,共模抑制比,开环增益带宽乘积BW,输入失调电流,开环电压增益,基极偏置电流等15项。但这种测试仪有一种共同的特点电路系统复杂,成本高,因此在某些应用领域中不能普遍使用。在此我们根据GB344286半导体集成电路运算电压放大器测试方法的基本原理规定的测试方法来设计,主要测试参数包括:输入失调电压,共模抑制比,开环增益宽带乘
9、积BW,输入失调电流,开环电压增益等5个,而且用MSC51系列单片机作为中央处理器,这样大大降低了成本,并且具有显示功能,使用方便,体积小,适合搬移,系统稳定。在软件方面,汇编语言是能直接控制单片机的底层语言,而且在控制硬件和位操作等方面表现很优异,程序运行时效率也很高,但当用汇编语言来编制复杂的数学运算类型的程序时就显得有些不方便。而使用C51高级语言开发MSC51系列单片机比汇编语言优越地多,如程序编写直观易懂、便于移植、便于修改和维护、便于进行模块化程序设计、提高计算精度等。虽然高级语言在产生代码方面会比较长些,而且运行速度相对来说会慢些但对于当今作为开发的计算机软件来说优化程序的编译已
10、经不是问题。在次我们结合了该设计自身的特点和需要,综合分析了以上的优、缺点最后决定采用C语言来编程,实现这个课题的功能,从而也提高其使用性。该成品可方便用于小型实验或个人实验室等场合。一、 系统原理框图该系统包括软件和硬件两个方面,程序被下载到单片机中,自动进行一系列测试工作,而且可以通过良好的人机界面对其进行选择、控制。其整体系统原理框图如图1所示。运放参数测试电路数据采集测试参数选择高频信号源增 益 控 制单片机LCD显示输出键 盘 输 入图1 系统原理框图二、 硬件单元电路设计与实现(一) 、四个参数的测试电路按照GB344286半导体集成电路运算(电压)放大器测试方法的基本原理规定的辅
11、助直流测试法,可实现运算放大器直流参数的准确测量。该方案的测试原理如图2所示。 图2 GB344286规定的运算放大器直流参数测试方法它是国标推荐的测试方法也是目前国际普遍采用的一种测试方法,具有稳定性好、精度高、范围大等特点,可测量各种集成运算放大器的输入失调电压、失调电流、共模抑制比、差模开环增益等参数,测试方便,测量输出的电压范围合适。而辅助运放对系统增益的稳定性有很关键的作用,虽然也会引起自激,但可以通过一定的方法来抑制。测试这四个参数的电路可以集成在两个电路里。首先可以将测试、这两个参数的电路通过继电器做成一个电路系统,如图3所示。电容Cu是补偿分布电容,用来抑制自激的发生,而Cu的
12、值是通过实验获得的:先将数百皮法的瓷片电容接入电路选定位置,观察自激信号的变化,直到取得使自激信号最小的电容值为止。然后将测试、这两个参数的电路也集成一个电路系统,如图4所示。这样通过两个核心测量电路就可以完成所有参数测试,同时通过对继电器的控制实现了测量的自动化,而且大大简化了电路。图3 输入失调电压和输入失调电流测试电路图4 电压增益和共模抑制比测试电路其测试电路和过程如下:、 当继电器1、4分别脚接向3、6脚时,测得辅助运放的输出电压记为VL0 ,则有:、 当继电器1、4分别脚接向2、5脚时,测得辅助运放的输出电压记为VL1,则有:、当把信号源输出(电压为VS)接到继电器的第1脚时,测得
13、辅助运放输出电压为VL0,则有 、当把信号源输出(电压为VS)接到继电器的第4脚时,测得辅助运放输出电压为VL0,则有 通过上述方法就可测得所要测试的四个参数。(二) 单位增益带宽测量电路单位增益带宽测量电路为一个反向比例放大器,从P1.3口输入正弦信号的幅值,改变信号频率,当P1.3口的输入电压幅值下降到3dB时的频率即为单位增益带宽。(三) 测试的信号源用文氏电桥电路实现产生4V、5Hz的正弦波。它是由RC振荡电路构成的低频正弦信号发生器。通过调节电路中的电阻和电容值的大小,可以产生不同频率和幅度的正弦信号,而且信号比较纯。该电路简单、信号幅度稳定,其稳定度优于1%。经过仿真后发现该电路只
14、能产生400KHz以内的信号,但这个频率范围已经满足我们的要求。(四) 峰峰值检测电路的设计图5 峰值检波图该电路主要由一个二极管和两个电容组成,用于检测扫频信号源的峰值。实际测量表明,该峰值检测电路在40kHz4MHz具有很好的线性度。该电路如图5所示。(五) A/D采样电路为保证测量精度,该部分电路采用12位串行口TLC2543。电路如图6所示。图6 A/D采样电路图(六) 扫频信号源采用直接数字频率合成芯片(AD9851)来产生扫频信号。它的频率稳定度完全由有源晶振的频率稳定度决定,具有较高的频率输出范围,而且可以直接由单片机的输出来控制频率的大小。经过输出扫频测试,DDS芯片可以在10
15、秒内连续、稳定输出频率在40kHz4MHz范围内连续变化的正弦波。其电路原理图如图7所示。AD9851采用并行送控制字的方式将频率控制字送入芯片。频率控制字FSW与最终合成的信号频率之间的转换公式为: 若系统时钟频率为30MHz,则最大分辨率=30106232Hz=0.007Hz。远超出本题1kHz分辩力的要求。图7 扫频信号源图(七) 键盘接口电路键盘的接收部分电路如图8所示:图8 键盘接收电路图当有按键时就触发外中断0,再通过控制片选端(KEY_CS)来读取当前按键的键值,这个信号是由74LS138实现的,其地址为C000H;键值的编辑则是采用一块PLD芯片GAL22V100和一个双向选通
16、芯片74LS245来实现;数据的读入和其他的数据一样都是通过总线的方式,(74ALS245的输出端B0到B7与单片机的P0口相连接)。键值的四位由低到高分别对应P0.0、P0.1、P0.2、P0.3。该键盘中各键的功能分配如下:KEY0:屏幕复位,键值为0;KEY1:进入参数测试界面,键值为1;KEY2:进入幅频特性测试界面,键值为2。(八) 显示接口电路采用MSC-G12864液晶显示器。该液晶显示器的管脚分配和管脚功能使用如表1所示,根据资料我们在硬件设计时将其管脚与单片机的连接如下:控制线:P2.3连CS2,P2.2连CS1,P2.1连R/W,P2.0连R/S,P2.4连E;数据线:D0
17、D7分别与P0.0P0.7相连接;因此液晶显示器和单片机的接口电路连接如图9所示。表1 液晶显示器管脚分配20191817161514131211SLKSLAVOUTRSTBCS2CS1DB7DB6DB5DB410987654321DB3DB2DB1DB0ER/WRSVOVDDVss图9显示接口电路图三、 软件设计(一) 软件功能设计软件系统以界面直观、利于操作、便于维护和升级为基础。而且为了增强系统的抗干扰性,还增加了软件陷阱处理,防止软件的“跑飞”。对于软件功能的设计不仅仅是对程序的简单设计,还包括对各电路间接口的设计,接口设计描述的是软件如何与外界系统进行通信,软件内部如何通信、以及软件
18、和软件的使用人员之间如何通信等问题。一个接口意味着一个信息流(例如,数据或控制流等),因此,在这里的一个重点就是要实现如何更好的分配数据和控制流,从而实现整个功能。(二) 系统软件框图和程序流程图AT89C52是美国ATMEL公司生产的低电压,高性能CMOS 8 位单片机,片内含8K bytes 的Flash ROM和256 bytes的SRAM。器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容。本系统以单片机AT89C52为主控核心,系统软件和硬件的接口框图如图10所示,程序流程图如图11所示。与单片机相连的接口电路还包括键盘接口电路,L
19、CD接口电路,转换模块接口电路。键盘输入51单片机LCD显示A/D转换模块测试板图10系统软件和硬件的接口框图TLC2543读入信号自动测试计算每路的值计算参数Uio、Uco、Avd、Kcmr并显示输出频率为4M400KHz的波形计算带宽增益键值1有按键键值0键值2初始化界面初始化界面图11程序流程图(三) 软件模块设计软件设计工作是建立在自顶而下和模块化的设计方法之上的。这就是说,软件应在逻辑上分割为实现特定功能部分的子程序,既程序编写的模块化,这样无论在设计、编码、还是以后的维护上都提供了很大的方便。在此我们根据接口电路的需要可以把该程序分为六个模块:主程序模块、显示模块、键盘模块、高频输
20、出模块、转换模块、数据处理模块。虽然每个模块之间都是利用数据的传送将他们联系起来,但在功能的实现上都是独立的。 主程序模块该模块主要包括main()函数。在将程序进行模块化时当然还要将各个子程序联系起来,在主程序里就是要实现它们之间逻辑关系的联系,而且基于单片机自身的特点,主程序应该是一个死循环的过程,否则程序执行完一次程序后就会跑飞,而不能实现整体功能,因而使整个系统处于瘫痪状态,此时只能通过重新断电和通电才能使系统重新运行,即使这样该系统还是会再次进入瘫痪状态。因此只能利用死循环来解决这个问题,这也是对单片机编程的一种常用的方法。在主程序模块中,主要实现的功能为:刚开机时,对外围设备进行初
21、始化设置,然后显示主界面,即欢迎界面;等待按键,通过按键标志来判断是否要调用按键处理函数keycl()。在keycl()函数中包括对不同键值的判断,并调用数据采集、分析、处理、显示等函数。因此主函数的流程图如图12所示。该主函数处于一种死循环的状态。开始显示主界面有按键否判断键值,并调用显示模块、调用键盘模块子程序、转换模块和数据处理模块子程序结束NY图12 主函数流程图主函数的程序如下所示: /*/ /* 主函数 */ /*/void main() unsigned char k,adbuf,dabuf,rambuf; idata unsigned int *para=&ramaddr; a
22、d2543(0x0C); /预先将要读取数据的通道数送入 dabuf=0xff; P3_4=1; /改变继电器 INTlcd(); /* 调初始化函数 */ CLEAR(); /* 调清屏函数 */ EA=1; EX0=1; IT0=1; flag=0; fw(); /复位 while(1) /使程序处于死循环 if(flag=1) /当有按键按下时 keycl(); /调用键盘处理函数包括对数据采集、分析、计算 其中INTlcd()函数,CLEAR()函数和fw()函数将在附录一里给出。 显示模块显示模块主要是负责跟液晶显示器接口的程序模块,包括液晶的驱动程序和结果显示程序。该模块主要是由x
23、ianshi()函数组成,它的功能是将处理结果数据显示在LCD上。流程图如图13所示。其中调用了写中文函数whz(),写西文函数wcode()。流程图如图14所示,以及两个判忙函数BUSYM(),BUSYR(),两个写指令函数PR1(),PR4(),两个写数据函数PR2(),PR5(),该模块在设计时主要考虑单片机和液晶之间的管脚连接,以及液晶自身的地址分配。在此我们参考了液晶显示器的使用手册,分析了在硬件上单片机的管脚分配情况,因此单片机和液晶的接口电路如图9。其地址控制说明如图15所示,接口管脚电平说明如表2所示。开始取出要计算的每一位调用写西文函数显示结果结束 开始液晶忙送要显示的数据结
24、束NY 图13 显示模块流程图 图14写中、西文函数流程图图15地址控制说明图表2: LCD管脚电平说明表Pin No.SymbolLevelDescription1VSS0VGround2VDD5.0VSupply voltage for logic3VO-Input voltage for LCD4RSH/LH:Date signal, L:Instruction signal5R/WH/LH:Read mode, l:write mode6EH,H-LChip enable signal7DB0H/LData bit 08DB1H/LData bit 19DB2H/LData bit 2
25、10DB3H/LData bit 311DB4H/LData bit 412DB5H/LData bit 513DB6H/LData bit 614DB7H/LData bit 715CS1HChip select signal for KS0108B(1)16CS2HChip select signal for KS0108B(2)17RSTBLReset signal18VOUT-5VOutput voltage for LCD19SLA4.2vSide light anode20SLK0VSide light cathode由液晶显示器的资料可知LCD是由两片KS0108B组成,且在液晶
26、显示器上片选CS1,CS2都是高电平有效,E脚:芯片使能端,是高电平或下降沿到来时有效,即只有当它为高电平或下降沿来时才能进行读、写入数据或者写指令操作,当该管脚为低电平时为忙状态,因此结合硬件电路的设计可得到液晶显示器的地址分配为:#define cwadd2 XBYTE0xb400 /*第二片写状态地址*/#define cradd2 XBYTE0xf600 /*第二片读状态地址*/#define dwadd2 XBYTE0xb500 /*第二片写数据地址*/#define cwadd1 XBYTE0xb800 /*第一片写状态地址*/#define cradd1 XBYTE0xfa00
27、/*第一片读状态地址*/#define dwadd1 XBYTE0xb900 /*第一片写数据地址*/#define display_on 0x3f; /开显示#define display_off 0x3e; /关显示#define para1 0x40; /*设置列地址*/#define start_line0 0x0c0; /*开始显示行为第0行*/#define page 0xb8 /设置页地址在显示数据之前一定要进行对液晶进行判忙工作,只有当液晶处于空闲状态才能对液晶进行写入操作,因此在开始对液晶进行写入指令和数据之前要先调用两个判忙函数,一个是BUSYM()即对左片判忙,还有一个是
28、BUSYR()即对右片进行判忙。而且只有当液晶是处于空闲和开状态的时候,才能进行下一个操作,否则将在此进入死循环中。其中写指令函数PR1(),PR4(),主要功能是设置液晶显示器的地址;写数据函数PR2(),PR5()是在地址设置后将要显示的数据写入到液晶显示器中;写中文函数whz()是显示中文字符,写西文函数wcode()是显示西文字符。以下给出了xianshi()函数具体程序,其它的程序在附录里给出,这里就不一一详述。/*/* 显示结果 */*/ void xianshi(void) float k; int j; unsigned char i,last,hang,lie; for(i=
29、64;i=100;i+=6) wcode(i,4,47); j=4; /求出每一位数,便于在LCD上显示 for(i=0;i0;j-) /要显示的数据共5位从最后一位开始显示 k=averagei-(int)averagei; /获得最后一位小数 if (k0.000000) k=0.000000; averagei=(int)averagei; last=k*10; / 将获得的最后一个小数转换为整数,便于显示 lie=64+j*7; /要显示的数据的行、列 hang=7-i; if (j=5) /要显示的数据共5位,有四位小数 wcode(lie,hang,46); /显示小数点 lie=
30、lie+5; j-; wcode(lie,hang,last); averagei=averagei/10; /求出下位数据 键盘模块该模块主要包括中断函数int1() interrupt 0和keycl()函数。 为了使该系统更具人性化,在硬件上加入了三个按键,相应地在软件上也离不开这个模块。这三个按键分别用来在:初始界面,参数测试界面和增加功能的带宽测试界面之间转换。当有键按下,就会产生一个下降沿脉冲从而触发中断的发生。在中断函数中调用一个延时程序实现消抖,如果确定有按键按下则将中断标志变量置1,即flag=1;在主程序中,通过对这个标志变量的查询,来决定是否调用函数keycl()。在该函
31、数中具体实现不同按键要显示的对应界面,并进行不同的操作。如果当前按下第一个键,则调用复位函数fw(),返回到初始的欢迎界面,显示“欢迎使用”这四个字;如果按下的是第二个键,在液晶的顶部中间显示要测试的四个参数 、然后调用参数测试函数ad2543()读取不同通道的数据,并通过对继电器的控制来读入相同通道中不同参数所需要的电压值,然后调用sort()函数去掉采集的数据中的一个最大值和一个最小值,并将获得的数据转换为真实的电压值,调用函数jisuan()将数据进行平均后再计算参数结果,最后调用函数xianshi()将处理完的结果显示出来;如果按下的是第三个键,则显示频带宽度界面,并调用函数highs
32、ource()输出高频信号,频率的分辨率为1KHz。该模块的流程图如图16所示。开始结束第一个按键NY调用主界面第二个按键采集AD2543中的数据并进行分析和显示第三个按键控制AD9851产生信号源YYNN图16 键盘模块程序流程/*/* 键盘中断 */*/void int1() interrupt 0 delay(100); if (P32=0) /消抖 keyv=keyaddr; flag=1; /*/* 按键处理函数 */*/void keycl(void) unsigned char i,j,k; flag=0; /清除按键标志 if (keyv=0) /当按下第一个键时 fw();
33、/显示主界面即复位 else if(keyv=1) /当按下第二个键时 zdcs(); /调用显示参数测试界面 k=0x0c; /选择通道0 for(i=0;i5;i+) /需要5个数据 /采集数据时要采集8组 for(j=0;j8;j+) ad0ij=ad2543(k); delay(0x30); /在每次采集之间调用延时程序 delay(0x60); /在要选部通道之间延时 /通过改变继电器获得所需的不同电压 if(i=0) /获得 vlO 当i=0时 jdq0=1; /当i=1时闭合开关获得vli if (i=1) /输入时信号源当i=2时换通道获得vlo 用来计算avd jdq0=0;
34、 jdq1=0; k=k+0x10; if (i=2) /i=3时获得vlo 是用来计算dcmr jdq1=1; if (i=3) /更换通道 获得信号源电压 jdq1=0; k=k+0x10; /通道数加1/因为输入通道数时只有前面的四位数有效 sort(); /去掉一个最大值和一个最小值,并转换为真实的电压值 jisuan(); /将数据进行平均,后再进行计算参数结果 xianshi(); /显示获得的结果 else if(keyv=2) highsource(); /输出高频信号,频率的分辨率为1KHz flag=0; /清除按键标志 其中jdq0,jdq1:继电器通断标志变量;falg
35、:按键标志变量,有键按下则为1,否则为0;keyv:存放不同按键的键值;ad0ij:存放来自通道的电压信号的数据,idata unsigned int ad058存放参数测试所需要的5组数据,又把每个所需要的数据采集的8次,因此每组数据中包括8个数据,这样真正采集的数据应该是40个。 高频输出模块void highsource()函数是控制DDS产生正弦波的,产生的正弦波的分辨率为1KHz。以下是AD9851的部分管脚功能说明:41,2825(D0D7):是8位的数据输入口,其中D0(4脚)是低位,D7(25脚)是高位;5(PGND):接地端;6(PVCC):电源端;这两个管脚都是当频率取输入
36、数据的六倍时用的;7(W_CLK):数字载入端,上升沿有效,由单片机控制,与P1.5相连; 8(FQ_UD):频率刷新端,上升沿有效,由单片机控制,与P1.6相连;9(REF_CLK):系统时钟,是外部输入,直接用10M晶振产生;10、19(AGND):模拟信号接地端;11、18(AVDD):模拟信号电源端;21(IOUT):输出口,产生的信号源输出口,必须接负载后再接入示波器;22(RESET):复位端,高电平时复位,当该管脚是低电平时处于正常工作,该管脚由单片机控制,与P1.7相连。AD9851芯片具有输入数字信号直接输出对应频率的正弦波的功能的芯片,有以上的管脚说明可知,数据输入端只有8
37、个口即D0D7,但AD9851允许输入的数据范围为40位,因此在程序中要用串并合用的方法,每次送入8位数据,并送W_CLK端一个脉冲,使芯片接受送入的数据,共送5次,先送入的为高电位,送完后将FQ_UD信号置1,使送入得数据有效,产生所需要频率的正弦波。该模块的程序流程如图17所示。highsource()函数如下所示:/*/* 产生高频信号 */*/void highsource()unsigned char i, j;idata unsigned long step;idata unsigned long addr=0x22222222; /频率的最大值约为4Midata unsigned char zanc5=0x00,0x22,0x22,0x22,0x22;unsigned char *p=&dacs; /高频信号源地址unsigned char *p1=&addr;unsigned int k;step=0x01000000; /频率变化的步进值fq_up=0;w_clk=0; reset=1; j+; /延时作用 j+; reset=0;for(
链接地址:https://www.31ppt.com/p-3985400.html