• 854.50 KB
  • 2022-04-22 13:51:28 发布

自动增益放大器毕业设计论文.doc

  • 44页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'自动增益放大器毕业设计论文目录摘要IAbstractII第1章绪论11.1自动增益控制的原理11.2自动增益控制放大器设计内容2第2章方案设计32.1概述32.2系统方案论证与选择32.2.1可控增益电路32.2.2滤波电路模块论证与选择32.2.3峰值检波模块论证与选择42.2.4显示模块42.3系统总体方案设计42.4本章小结5第3章电路设计及参数计算63.1概述63.2可控增益电路63.3功率放大电路63.4滤波电路73.5峰值检波电路73.6麦克风信号采集电路83.7LCD1602显示和键盘模块93.8单片机控制电路93.9本章小结10第4章程序设计1141 4.1主程序流程图114.2各模块程序流程图134.2.1键盘程序流程图134.2.2噪声采样程序流程图144.2.3反馈程序流程图154.3本章小结15第5章测试方案与测试结果165.1测试方法与仪器165.1.1测试方法165.1.2测试仪器165.2测试数据与结果165.3功能测试总表175.4数据分析与结论18总结与展望19参考文献20致谢21附录A总电路图22附录B总程序图2341 自动增益控制放大器第1章绪论1.1自动增益控制的原理自动增益控制电路已广泛用于各种接收机、录音机和信号采集系统中,另外在光纤通信、微波通信、卫星通信等通信系统以及雷达、广播电视系统中也得到了广泛的应用。随着微电子技术、计算机网络技术和通信技术等行业的迅速发展,自动增益控制电路越来越被人们熟知并且广泛的应用到各个领域当中。自动增益控制线路,简称AGC线路,A是AUTO(自动),G是GAIN(增益),C是CONTROL(控制)。AGC环是闭环电路,是一个负反馈系统,一般来说分成增益受控放大电路和控制电压形成电路两部分.增益受控放大电路,其增益随控制电压而改变.控制电压形成电路的基本部件是AGC检波器和低通平滑滤波器,有时也包含门电路和直流放大器等部件.放大电路的输出信号U0经检波并经滤波器滤除低频调制分量和噪声后,产生用以控制增益受控放大器的电压Uc.当输入信号Ui增大时,U0和Uc亦随之增大,Uc增大使放大电路的增益下降,从而使输出信号的变化量显着小于输入信号的变化量,达到自动增益控制的目的。AGC电路目前概括起来有模拟AGC和数字AGC电路。AGC环路可以放在模拟与数字电路之间,增益控制算法在数字部分来实现,合适的增益设置反馈给模拟可变增益放大器(VGA)。现在出现的自动增益控制方法可以分为以下3类:基于电路反馈的自动增益控制;基于光路反馈的自动增益控制;光路反馈和电路反馈相结合的自动增益控制。本次设计中要研究的是基于电路反馈的利用放大器实现的自动增益控制。目前,实现自动增益控制的手段很多,典型的有压控放大器,也就是本次设计所要研究的自动增益控制放大器。它是通过调整放大器一个控制端的电压,就可以实现调节这个放大器的增益。因此,我们就可以通过反馈电路采集输出端的电压,通过调整网络后加到放大器的控制端.就可以实现自动增益控制。1.2自动增益控制放大器设计内容本设计中采用的芯片有VCA822程控放大芯片实现自动增益。放大器可以从41 自动增益控制放大器MP3或信号源输入音频(100Hz~10kHz)信号,可以带600Ω负载或驱动8Ω喇叭(2~5W)。当输入信号幅度在10mV~5V间变化时,放大器输出默认值保持在2V±0.2V内,能够显示输入信号幅度大小及频率高低。并且能够在1V~3V范围内步进式调节放大器输出幅度,步距0.2V。41 自动增益控制放大器第2章方案设计2.1概述通过MSP430单片机对各个信号的采集、处理来调控外部增益控制放大电路的放大倍数,从而调节音响的音量,音频信号强时自动减小放大器的倍数,信号弱时自动增大放大器的倍数。可控增益放大电路的输出信号经过滤波,峰值检波,单片机经过A/D转换进而采集到音响的电压信号。2.2系统方案论证与选择为了更好地实现各模块的功能,分别设计了几种方案进行比较,选择一种比较好的方案。2.2.1可控增益电路方案一:采用AD603来实现自动增益控制,AD603是低噪、90MHz带宽增益可调的集成运放,如增益用分贝表示,则增益与控制电压成线性关系。并且通过两级放大器的级联使增益控制范围增宽。方案二:采用VCA822来实现自动增益控制,芯片VCA822作为核心器件,宽带、电压控制增益可变放大器,最高频率达150MHz,实现将20mVpp~2Vpp范围内的正弦波、三角波和方波信号转换为一稳定的输出,输出能力达到5Vpp,并且在0~5V范围内实现数控,其中包括细调100级以0.05V步进、粗调10级以0.5V步进。方案选定:由于输入信号幅度在10mV~5V间变化,而AD603的信号输入范围较小,需要两片级联,增加了系统的复杂度,VCA822芯片信号输入范围更适合这一要求,故选用芯片VCA822。2.2.2滤波电路模块论证与选择方案一:滤波电路采用由LM358和RC电路组成,以获得更稳定的电压,提高环路稳定性及改善环路跟踪性能和噪声性能,且LM358的工作电压为+12V。41 自动增益控制放大器方案二:采用双电源集成UA741芯片制作带通滤波电路,该电路能提供很好的精度,无频率补偿要求,低功耗。方案选定:由于LM358的工作电压为+12V,其功耗较大,需要频率限制故选用方案二。2.2.3峰值检波模块论证与选择方案一:采用数字检波。通过单片机MSP430采集一段时间的信号进行比较,取出最大值即为峰值。此方案硬件简单,电路调试非常方便,但是编程复杂,对于ADC采样模块的精度要求高,并且不能检测频率较高的信号。方案二:采用峰值检波电路。通过运算放大器和二极管构成峰值检波电路,该方案对硬件电路的要求较为复杂,但编程简单,并且可以检测高频,可以检测规定带宽的频率。综合以上两种方案,选择方案二。2.2.4显示模块方案一:采用数码管显示。其亮度高、体积小,编程较容易,资源占用较少。但显示的信息简单、有限,无法实现本系统中模式选择、数据显示等功能。方案二:采用液晶显示器(LCD)。液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影像稳定不闪烁等优势,而且显示信息丰富、拥有较好的人机界面和强大的显示功能,通过它可以显示控制方式选择及显示输出效果。方案选定:基于功能考虑,我们采用方案二。本系统中,采用了液晶显示屏LCD1602,以显示输出电压,便于测试人员及时的控制。2.3系统总体方案设计本系统采用MSP430F169单片机作为主控芯片,外围电路包含能实现能自动增益放大的模块、信号处理转换模块。控制原理方案如图2-1所示。41 自动增益控制放大器图2-1系统总体框图2.4本章小结在各个模块的方案设计中,选择较好的一种,进行外围电路的设计,以取得更好的稳定的效果。41 自动增益控制放大器第3章电路设计及参数计算3.1概述对各个模块选择的方案进行相对应的硬件电路的设计,以及用到的公式和参数计算,其中有自动增益电路、滤波电路、峰值检波电路以及单片机电路设计等。3.2可控增益电路该电路以TI公司提供的VCA822芯片为核心,由电压控制放大器VCA822工作原理可知,对其电压放大倍数以及输出电压的控制,其实质是能产生正确的控制电压。工作时通过键盘设定放大器的电压放大倍数或应输出的电压值,通过显示电路实时进行显示。VCA822是一个直接耦合、宽带、线性增益连续可调,电压控制增益放大器。最大增益由反馈电阻RF和增益电阻RG决定。电路如图3-1所示放大倍数公式(3.20)图3-1可控增益电路3.3功率放大电路该电路如图3-241 自动增益控制放大器所示,采用NE5532芯片和LA4225芯片电路组成,形成固定的功率放大器,放大倍数为20倍。图3-2功率放大电路3.4滤波电路滤波电路如图3-3所示,该电路为有源带通滤波电路,前一部分实现两级二阶高通滤波,其截止频率为3400Hz;后一部分实现两级二阶低通滤波,其截止频率为300Hz,两部分组合从而形成通带是300Hz~3400Hz的带通滤波器。其中,前一部分有两个UA741运放,每个运放上有两个RC环节,后一部分也是有两个UA741运放,每个运放上有两个RC环节。图3-3带通滤波电路3.5峰值检波电路峰值检测电路如图3-41 自动增益控制放大器4所示,是一个能记忆信号峰值的电路,其输出电压的大小一直追随输入信号的峰值,并且保持在输入信号的最大峰值。图3-4峰值检波电路3.6麦克风信号采集电路麦克风信号采集电路如图3-5所示,用来采集外部声音的干扰,采集后的微弱信号进入运算放大器进行放大,然后由单片机采样后,根据外部声音的大小改变输出信号的标准值,利用系统的自动增益控制作用改变输出信号的电平,从而达到题目要求的根据外部噪声的大小调节输出信号的功能。此电路通过LM324芯片进行两级信号放大,放大倍数分别,(3.60)图3-5麦克风信号采集电路41 自动增益控制放大器3.7LCD1602显示和键盘模块本模块通过显示信号的频率和幅值构成人机交互界面,通过按键对输出信号的幅值控制,每次步进0.2V。LCD1602显示如图3-6所示,键盘模块如图3-7所示。图3-6LCD显示模块图3-7按键模块3.8单片机控制电路单片机电路如图3-8所示,P1口控制按键的数据口,P1.0~P1.2口分别控制标准电压加、标准电压减和模式选择。P6口为A/D和D/A数据接口,P6.0、P6.1、P6.2为A/D数据采集口,P6.0为反馈信号电压的采集,P6.1为麦克风环境噪声的采集,P6.2为前置输出信号的采集,P6.6为D/A控制增益电压的输出电压。P58口为单片机的RST数据接口。P2.0~P2.7和P6.3~P6.5为LCD1602的数据输入端。41 自动增益控制放大器图3-8单片机控制电路总电路图见附录A总电路图。3.9本章小结在各个模块中基于数电和模电以及电路分析进行电路设计,同时查询各种电路和芯片的资料进行分析,同时制作时简单电路用万用板焊接,而较复杂的电路则选用PCB板制作。41 自动增益控制放大器第4章程序设计在进行系统设计时,除了硬件设计外,大量的工作就是如何根据每个输入信号的实际需要设计应用程序。因此,软件设计自动增益系统设计中占据非常重要。所以系软件设计更为重要。4.1主程序流程图该主程序包括了键盘模块和DAC输出子程序,按键通过外置在P1口,DAC输出程序为P6.6口输出,主流程图如图4-1所示图4-1主程序流程图主程序:voidmain(void){WDTCTL=WDTPW+WDTHOLD;//关闭看门狗41 自动增益控制放大器/*下面六行程序关闭所有的IO口*/P1DIR=0XFF;P1OUT=0XFF;P2DIR=0XFF;P2OUT=0XFF;P3DIR=0XFF;P3OUT=0XFF;P4DIR=0XFF;P4OUT=0XFF;P5DIR=0XFF;P5OUT=0XFF;P6DIR=0XFF;P6OUT=0XFF;P1DIR=0XF7;P3OUT=0X00;P1SEL=0x08;//P1IES=0XF7;P6DIR|=BIT2;P6OUT|=BIT2;//关闭电平转换ClkInit();//时钟初始化,1MHZ,smclkLcdReset();//复位1602液晶reset();//外部显示初始化ADCreset();//ADC12初始化TBCCR0=32768-1;//设置定时器A的中断时间为1STBCTL=TBSSEL_1+MC_1;//计数时钟ACLK,增计数模式TBCCTL0|=CCIE;TACCTL2=CM_1+SCS+CCIS_0+CAP+CCIE;_EINT();//开启总中断//_BIS_SR(LPM0_bits+GIE);//低功耗模式LPM0DACreset();while(1){if(keyin!=0x0f){//delay();switch(keyin){case0x0e:bz_v+=248;break;//P1.0键按下,标准电压步进加0.2vcase0x0d:bz_v-=248;break;//P1.1键按下,标准电压步进减0.2vcase0x0b:t+=1;if(t==2)t=0;Disp1Char(14,1,t+0x30);break;default:break;}41 自动增益控制放大器while(keyin!=0x0f);if(bz_v>=3723)bz_v=3723;elseif(bz_v<=1241)bz_v=1241;}DACout();}}4.2各模块程序流程图4.2.1键盘程序流程图键盘程序通过P1口的按键控制,程序流程图如图4-2所示。图4-2键盘程序键盘程序:if(keyin!=0x0f){//delay();switch(keyin){41 自动增益控制放大器case0x0e:bz_v+=248;break;//P1.0键按下,标准电压步进加0.2vcase0x0d:bz_v-=248;break;//P1.1键按下,标准电压步进减0.2vcase0x0b:t+=1;if(t==2)t=0;Disp1Char(14,1,t+0x30);break;default:break;}while(keyin!=0x0f);4.2.2噪声采样程序流程图噪声采样通过麦克风采样模块采集环境声音,再在程序中判断声音来改变输出信号的大小,程序流程图如图4-3所示,程序见附录B:噪声采样程序。图4-3噪声采样程序流程图4.2.3反馈程序流程图反馈程序通过A/D采样的电压值来调节控制增益的输出,其流程图如图4-4所示,程序见附录B。41 自动增益控制放大器图4-4反馈程序流程图4.3本章小结程序通过IAR软件进行MSP430编程,编程是根据硬件电路的设计进行编程,同时定义所用的端口和MSP430的工作的模式,并进行模块化编程。41 自动增益控制放大器第5章测试方案与测试结果通过仪器来对硬件电路进行测试,在测试完成后,下载程序后用示波器来测试波形。5.1测试方法与仪器5.1.1测试方法用万用表、示波器等相关仪器检测自制的自动增益控制放大器工作是否能够正常工作,其电压、频率、电流等参数是否与理论值相符合,各种情况下波形是否能够正确显示,能否根据输入信号和环境噪声幅度的变化自动调节音量。5.1.2测试仪器本系统测试仪器见表1。表1自动增益控制放大器测试仪器序号名称型号说明1数字万用表UNI-T用来检测自制探测仪的硬件焊接和电缆检测的结果以及各模块的工作情况2双踪示波器UT2025C测试探测仪是否能检测到带电电缆5.2测试数据与结果(1)给放大器输入MP3或用信号源输入音频信号,放大器的输出接600欧负载或8欧喇叭,放大器均能正常工作。(2)当输入信号幅度在10mV~5V间变化时的测试输出电压数据如下表2所示。41 自动增益控制放大器输入电压频率(Hz)表2数据与结果1输出电压0.010.501.002.505.002002.201.902.102.122.208002.152.002.202.132.1230002.152.102.151.982.10100001.962.002.201.952.14由上表2可知:放大器的输出值保持在2V±0.2V内,并且波动非常小。(3)LCD1602液晶显示能正常显示输入信号幅度大小及频率高低。表3数据与结果2(4)由下表3可知在1V~3V范围内步进式调节放大器输出幅度的功能正常输入电压频率(Hz)输出电压1.01.41.82.22.63.02001.021.51.822.212.623.0110001.101.351.792.202.603.1040001.131.471.822.192.632.9570000.951.351.802.252.592.98100001.091.541.792.162.603.015.3功能测试总表功能测试如表4所示。表4功能测试表测试条件测试内容测试结果输入信号幅度在10mV~5V间变化时输入电压10mV100mV1V2.5V5V41 自动增益控制放大器放大器输出电压2.01.92.122.11.98输入信号幅度大小及频率高低显示频率显示否输入信号幅度显示能输入音频信号(100Hz~10kHz)600Ω负载时输出能8Ω喇叭输出能1V~3V范围内步进式调节放大器输出能是否能够根据环境噪声调整自动调节放大器输出幅度不能其他无5.4数据分析与结论将数据进行比较,基本相符,无太大误差,多次用示波器和万用表反复测量,将测得的结果反复论证,并确保每一次测试误差不超过0.2V,在输入信号幅度相同的情况下,改变频率的大小,输出的电压误差在0.2V范围内,同时能对环境噪声输出不同的声音大小。综上所述,本设计基本达到设计要求。41 自动增益控制放大器总结与展望一、总结在本文中对自动增益控制放大器的原理也进行了讨论及分析。确定了实现增益控制功能的放大器增益范围,并且设计出具体的硬件电路,对各部分电路的工作原理也进行了详细介绍。在程序的设计中流程图展示了其设计思路,并在文章的最后,列出了具体实验中的实验数据及分析结果,对存在的问题也有了一定的认识。二、今后研究方向随着微电子技术、计算机网络技术和通信技术的发展,自动增益控制的研究也在不断的进步,实现自动增益控制的方法也在不断的完善,改进目前在性能方面的一些不足,将会得到更大的提高。41 自动增益控制放大器参考文献[1]德州仪器高性能模拟器件高校应用指南[2]沈建华,杨艳琴,翟骁曙.MSP430系列16位超低功耗单片机实践与系统设计[M].清华大学出版社,2005[3]周雪.模拟电子技术[M].西安电子科技大学出版社[4]沈建华.杨艳琴.MSP430超低功耗单片机原理与应用[M].清华大学出版社[5]曾一江.单片微机原理与接口技术(修订版)[M].科学出版社[6]唐红,王冬艳,李小平.数字电子技术实训教程[M].化学工业出版社[7]张永瑞.电路分析[M].北京清华大学出版社[8]胡大可.MSP430系列单片机C语言程序设计与开发[M].北京航空航天大学出版社,2003[9]张霆.基于VCA822的正弦信号发生器程控放大器[J].成都电子高等专科学校学报,2009,第12卷第3期[10]FernandezDang.GettingStartedwiththeMSP430Launchpad[M].Newnes,2013[11]JohnH.Davies.MSP430MicrocontrollerBasics[M].Newnes,2013[12]StevenBarrett,DanielPack.MicrocontrollerProgrammingandInterfacing[M].Morgan&ClaypoolPublishers,201141 自动增益控制放大器致谢本设计是在导师胡沁春的悉心指导下完成的,能够顺利完成,还承蒙胡老师指导和同学的帮助。在设计过程中,胡老师给予了悉心的指导,最重要的是给了我部分资料,在此,我对胡老师表示最真挚的感谢!同时感谢所有帮助过我的同学!41 自动增益控制放大器附录A总电路图41 自动增益控制放大器附录B总程序图Main.c/********************************************************程序功能:①通过P6.0口采样到的输出电压与初始标准电压比较,调节DA转换器的输出电压,减小或增大VCA822的增益,从而使输出电压稳定在所设标准输出电压上,误差±0.2v。②当麦克风选通开关打开时,P6.1口采样到的噪声信号使输出电压标准值增加或减少,从而调节输出信号的大小。③通过按键程序调节输出电压标准值的大小从而使输出电压在1—3V以0.2V步进调节。----------------------------------------------------------测试说明:*******************************************************/#include#include#include"cry1602.h"#include"cry1602.c"#include"DAC12.h"#include"DAC12.c"#include"finish.h"#defineNum_of_Results32#definekeyin(P1IN&0X0F)/****************变量定义******************************/ucharshuzi[]={"0123456789."};unsignedcharU[]={"U"};unsignedcharI[]={"SR:"};//unsignedcharA[]={"PL:"};unsignedcharBZ[]={"BZ:"};unsignedlongsum0=0,//P6.0口采样的输出电压sum1=0,//P6.1口采样的麦克风输入电压sum2,//衰减10倍后的输入电压,判断选通开关bz_v=2482,//输出信号初始值为2vt=0,micbz_v=0;//麦克风信号输入改变了的输出标准值41 自动增益控制放大器signedintz=1861;//定义为有符号数,避免运算出错staticuintresults[Num_of_Results];//保存ADC转换电压结果的数组staticuintresults1[Num_of_Results];//保存ADC转换电压结果的数组staticuintresults2[Num_of_Results];//保存ADC转换电压结果的数组/****************************函数申明*******************voidTrans_val(uintHex_Val);//电压转化函数声明voidTrans_val1(uintHex_Val);//电压转化函数声明voidreset(void);//外部显示初始化函数声明voidADCreset(void);//ADC模块初始化函数声明voidDACreset(void);//DAC模块初始化函数声明voidDACout(void);//DAC模块输出函数声明voidClkInit(void);//SMCLK时钟初始化函数声明voiddelay(void);//延时程序声明voidbzxs(uintHex_Val);//标准电压参数显示函数声明voidTrans_val2(uintHex_Val);************************************************************//************************主函数*************************/voidmain(void){WDTCTL=WDTPW+WDTHOLD;//关闭看门狗/*下面六行程序关闭所有的IO口*/P1DIR=0XFF;P1OUT=0XFF;P2DIR=0XFF;P2OUT=0XFF;P3DIR=0XFF;P3OUT=0XFF;P4DIR=0XFF;P4OUT=0XFF;P5DIR=0XFF;P5OUT=0XFF;P6DIR=0XFF;P6OUT=0XFF;P1DIR=0XF0;P3OUT=0X00;//P1IE=0x08;//P1IES=0XF7;P6DIR|=BIT2;P6OUT|=BIT2;//关闭电平转换ClkInit();//时钟初始化,1MHZ,smclkLcdReset();//复位1602液晶reset();//外部显示初始化ADCreset();//ADC12初始化41 自动增益控制放大器//CCR0=32768-1;//设置定时器A的中断时间为1S//TACTL=TASSEL_1+MC_1;//计数时钟ACLK,增计数模式//CCTL0|=CCIE;_EINT();//开启总中断//_BIS_SR(LPM0_bits+GIE);//低功耗模式LPM0DACreset();while(1){if(keyin!=0x0f){//delay();switch(keyin){case0x0e:bz_v+=248;break;//P1.0键按下,标准电压步进加0.2vcase0x0d:bz_v-=248;break;//P1.1键按下,标准电压步进减0.2vcase0x0b:t+=1;if(t==2)t=0;break;//选择是否开启噪声监测default:break;}while(keyin!=0x0f);if(bz_v>=3724)//上限为3vbz_v=3724;elseif(bz_v<=1241)//下限为1vbz_v=1241;}DACout();}}/*******************************************函数名称:ADC12ISR功能:ADC中断服务函数,在这里用多次平均的计算P6.0和P6.1口的模拟电压数值参数:无41 自动增益控制放大器返回值:无********************************************/#pragmavector=ADC_VECTOR__interruptvoidADC12ISR(void){staticuintindex=0;results[index++]=ADC12MEM0;//采样输出电压if(index==Num_of_Results){uchari;//unsignedlongsum0=0;index=0;for(i=0;i>=5;//除以32Trans_val(sum0);//显示输出电压值if(t==0)//没有按键按下时{if(sum0>bz_v)//判断采样值是否大于标准值{z+=50;//如果大于,则增大DA输出,减小反馈增益if(z>=3276)//输出2v时,衰减倍数最大z=3276;}elseif(sum0micbz_v)//如果麦克风输入小于反馈值z+=100;//衰减输出信号if(sum0>=5;//除以32micbz_v=1241+sum1;//麦克风输入的电压,固定增加1vif(micbz_v>3723)micbz_v=3723;if(micbz_v<1241)micbz_v=1241;//Trans_val1(sum1);//显示麦克风采集的电压}staticuintindex2=0;results2[index2++]=ADC12MEM2;//采样数据控制模拟开关if(index2==Num_of_Results){uchari2;unsignedlongsum2=0;index2=0;41 自动增益控制放大器for(i2=0;i2>=5;//除以32Trans_val2(sum2);//显示输入信号幅度if(sum2<13)//当输入电压大于100mv时,P3OUT=BIT0;//打开衰减信号通道elseif(sum2>=13&&sum2<125)P3OUT=BIT1;//打开未衰减信号(P3.1)通道elseif(sum2>=125)P3OUT=BIT2;//打开未衰减信号(P3.2)通道}}/*******************************************函数名称:Trans_val功能:将16进制ADC转换数据变换成4位10进制真实的模拟电压数据,并在液晶上显示参数:Hex_Val--16进制数据n--变换时的分母等于2的n次方返回值:无********************************************/voidTrans_val(uintHex_Val)//电压测量{unsignedlongcaltmp;unsignedlongdaa;uchari;ucharptr[5];caltmp=Hex_Val;daa=((caltmp/1)*805664)/1000000;//参考电压为3.3v时,转化为十进制//daa=((caltmp/1)*610351)/1000000;//参考电压为2.5v时ptr[0]=daa/1000;//取参数的权位值ptr[1]=10;41 自动增益控制放大器ptr[2]=(daa-ptr[0]*1000)/100;ptr[3]=(daa-ptr[0]*1000-ptr[2]*100)/10;ptr[4]=daa%10;//shuzi表中第10位对应符号"."for(i=0;i<5;i++)Disp1Char((1+i),0,shuzi[ptr[i]]);}voidTrans_val1(uintHex_Val)//输入信号幅度测量,更改运算参数{unsignedlongcaltmp;unsignedlongdaa;uchari;ucharptr[5];caltmp=Hex_Val;daa=((caltmp/1)*805664)/1000000;ptr[0]=daa/1000;//Hex->Dec变换ptr[1]=10;ptr[2]=(daa-ptr[0]*1000)/100;ptr[3]=(daa-ptr[0]*1000-ptr[2]*100)/10;ptr[4]=daa%10;//shuzi表中第10位对应符号"."for(i=0;i<5;i++)Disp1Char((1+i),1,shuzi[ptr[i]]);}voidTrans_val2(uintHex_Val)//输入信号频率测量,更改运算参数{unsignedlongcaltmp;unsignedlongdaa;uchari;ucharptr[5];caltmp=Hex_Val;daa=((caltmp/1)*805664)/1000000;ptr[0]=daa/1000;//Hex->Dec变换ptr[1]=(daa-ptr[0]*1000)/100;ptr[2]=10;//shuzi表中第10位对应符号"."ptr[3]=(daa-ptr[0]*1000-ptr[1]*100)/10;41 自动增益控制放大器ptr[4]=daa%10;for(i=1;i<5;i++)Disp1Char((2+i),1,shuzi[ptr[i]]);}/*******************************************函数名称:bzxs函数功能:显示通过键盘设定的标准电压值返回参数:无******************************************/voidbzxs(uintHex_Val){unsignedlongcaltmp;unsignedlongdaa;unsignedinti;ucharptr[5];caltmp=Hex_Val;daa=((caltmp/1)*805664)/1000000;ptr[0]=daa/1000;//Hex->Dec变换ptr[1]=10;ptr[2]=(daa-ptr[0]*1000)/100;ptr[3]=(daa-ptr[0]*1000-ptr[2]*100)/10;ptr[4]=daa%10;//shuzi表中第10位对应符号"."for(i=0;i<5;i++)Disp1Char((11+i),0,shuzi[ptr[i]]);}/*******************Reset***********************函数名称:Reset函数功能:对外部显示初始化返回参数:无************************************************/voidreset(void){DispNChar(0,0,1,U);//显示“u”DispNChar(0,1,3,I);//显示“SR:”DispNChar(8,0,3,BZ);//显示“BZ:”//DispNChar(8,1,3,A);//显示“SI:”Disp1Char(6,0,"V");41 自动增益控制放大器Disp1Char(9,1,"V");//Disp1Char(15,1,"m");}/**********************ADCreset***********************函数名称:ADCreset函数功能;对ADC12进行初始化返回参数:无******************************************************/voidADCreset(){P6SEL|=0x07;//使能ADC通道ADC12CTL0=ADC12ON+SHT0_8+MSC;//打开ADC,设置采样时间,ADC12CTL0|=REF2_5V+REFON;//使用内部参考电压源2.5VADC12CTL1=SHP+CONSEQ_3;//使用采样定时器,序列通道多次模式//ADC12MCTL0=INCH_0+SREF_1;//p6.0口采样,使用内部参考电压//ADC12MCTL1=INCH_1+SREF_1;//p6.1口采样,使用内部参考电压ADC12MCTL0=INCH_0;ADC12MCTL1=INCH_1;ADC12MCTL2=INCH_2+EOS;ADC12IE=0x02;//使能ADC中断ADC12IFG=0x02;ADC12CTL0|=ENC;//使能转换ADC12CTL0|=ADC12SC;//开始转换}/*******************DACreset*************************函数名称:DACreset函数功能:初始化内部DAC12转换器返回参数:无**************************************************/voidDACreset(void){DAC12Init(0,5);//初始化DAC12Cal(2);//校准//ADC12CTL0=REF2_5V+REFON;//开启内部参考源2.5v必须有;以供DA使用//z=2048;//DAC12_0DAT=z;//输出放大器倍数对应的电压值}41 自动增益控制放大器/*****************************************************************************名称:ClkInit*功能:时钟系统初始化MCLK为8MHz,SMCLK为1MHz*入口参数:无*出口参数:无****************************************************************************/voidClkInit(void){charmi;BCSCTL1&=~XT2OFF;//打开XT2振荡器IFG1&=~OFIFG;//清除振荡错误标志while((IFG1&OFIFG)!=0){for(mi=0;mi<0xff;mi++);IFG1&=~OFIFG;//清除振荡错误标志}BCSCTL2|=SELM_2+SELS+DIVS_3;//MCLK为8MHz,SMCLK为1MHz}/******************DACout*********************函数名称:DACout函数功能:计算ADC采集的输入电压与默认值2v的倍数关系并转化为相应的电压通过DAC模块输出。返回参数:无*********************************************/voidDACout(void){DAC12_0DAT=z;//输出放大器倍数对应的电压值}/*******************************************函数名称:delay功能:用于消抖的延时参数:无返回值:无********************************************/voiddelay(void){41 自动增益控制放大器uinttmp;for(tmp=12000;tmp>0;tmp--);}Cry1602.c#include#include"cry1602.h"typedefunsignedcharuchar;typedefunsignedintuint;/**************宏定义***************/#defineDataDirP2DIR#defineDataPortP2OUT#defineBusy0x80#defineCtrlDirP6DIR#defineCLR_RSP6OUT&=~BIT3;//RS=P6.3#defineSET_RSP6OUT|=BIT3;#defineCLR_RWP6OUT&=~BIT4;//RW=P6.4#defineSET_RWP6OUT|=BIT4;#defineCLR_ENP6OUT&=~BIT5;//EN=P6.5#defineSET_ENP6OUT|=BIT5;/*******************************************函数名称:DispNchar功能:让液晶从某个位置起连续显示N个字符参数:x--位置的列坐标y--位置的行坐标n--字符个数ptr--指向字符存放位置的指针返回值:无********************************************/voidDispNChar(ucharx,uchary,ucharn,uchar*ptr){uchari;for(i=0;i#include"DAC12.h"/*********************************************************函数名称:DAC12_0Init*功能:DAC12_0用到的相关资源初始化*参数:*DAC12AMPx:DAC运算放大器设置:*0输入缓冲器关闭,输出缓冲器关闭,高阻*1输入缓冲器关闭,输出缓冲器关闭,0V*2输入缓冲器低速/电流,输出缓冲器低速/电流*3输入缓冲器低速/电流,输出缓冲器中速/电流*4输入缓冲器低速/电流,输出缓冲器高速/电流*5输入缓冲器中速/电流,输出缓冲器中速/电流*6输入缓冲器中速/电流,输出缓冲器高速/电流*7输入缓冲器高速/电流,输出缓冲器高速/电流*返回值:无*说明:其他默认为:12位方案、写入即更新输出,module模*块为3时,两个都写入更新;DAC12的满量程为参考电*压;内部2.5v参考电压:需要AD设置参考源打开2.5.*********************************************************/voidDAC12_0Init(charDAC12AMPx){41 自动增益控制放大器//Internalrefgain1DAC12_0CTL=DAC12SREF_0+DAC12IR;DAC12_0CTL|=DAC12LSEL_1+(DAC12AMPx<<5);DAC12_0CTL|=DAC12ENC;}/*********************************************************函数名称:DAC12_1Init*功能:DAC12_1用到的相关资源初始化*参数:*DAC12AMPx:DAC运算放大器设置:*0输入缓冲器关闭,输出缓冲器关闭,高阻*1输入缓冲器关闭,输出缓冲器关闭,0V*2输入缓冲器低速/电流,输出缓冲器低速/电流*3输入缓冲器低速/电流,输出缓冲器中速/电流*4输入缓冲器低速/电流,输出缓冲器高速/电流*5输入缓冲器中速/电流,输出缓冲器中速/电流*6输入缓冲器中速/电流,输出缓冲器高速/电流*7输入缓冲器高速/电流,输出缓冲器高速/电流*返回值:无*说明:其他默认为:12位方案、写入即更新输出,module模*块为3时,两个都写入更新;DAC12的满量程为参考电*压;内部2.5v参考电压:需要AD设置参考源打开2.5.*********************************************************/voidDAC12_1Init(charDAC12AMPx){//Internalrefgain1DAC12_1CTL=DAC12SREF_0+DAC12IR;DAC12_1CTL|=DAC12LSEL_1+(DAC12AMPx<<5);DAC12_1CTL|=DAC12ENC;}/*********************************************************函数名称:DAC12Init*功能:DAC12用到的相关资源初始化*参数:*module模块0:使用模块DAC12_041 自动增益控制放大器*1:使用模块DAC12_1*2:使用模块DAC12_0/1*3:使用模块DAC12_0/1共同更新*DAC12AMPx:DAC运算放大器设置:*0输入缓冲器关闭,输出缓冲器关闭,高阻*1输入缓冲器关闭,输出缓冲器关闭,0V*2输入缓冲器低速/电流,输出缓冲器低速/电流*3输入缓冲器低速/电流,输出缓冲器中速/电流*4输入缓冲器低速/电流,输出缓冲器高速/电流*5输入缓冲器中速/电流,输出缓冲器中速/电流*6输入缓冲器中速/电流,输出缓冲器高速/电流*7输入缓冲器高速/电流,输出缓冲器高速/电流*返回值:char,设置成功返回1,参数错误返回0*说明:其他默认为:12位方案、写入即更新输出,module模*块为3时,两个都写入更新;DAC12的满量程为参考电*压;内部2.5v参考电压:需要AD设置参考源打开2.5.*********************************************************/charDAC12Init(charmodule,charDAC12AMPx){if(DAC12AMPx>7){return(0);}//---------------------------设置模块-------------------------------switch(module){case0:DAC12_0Init(DAC12AMPx);break;//模块0case1:DAC12_1Init(DAC12AMPx);break;//模块1case2:DAC12_0Init(DAC12AMPx);DAC12_1Init(DAC12AMPx);break;//模块0、1case3:DAC12_0Init(DAC12AMPx);DAC12_1Init(DAC12AMPx);DAC12_0CTL|=DAC12GRP;break;//无校验41 自动增益控制放大器default:return(0);//参数错误}return(1);}/*********************************************************函数名称:DAC12Cal*功能:校准DAC12,内部自动校准*参数:*module:校准哪个模块*0:DAC12_0模块1:DAC12_1模块*2,3两个模块都校准*返回值:无*********************************************************/voidDAC12Cal(charmodule){switch(module){case0:DAC12_0CTL|=DAC12CALON;//启动效验DACwhile((DAC12_0CTL&DAC12CALON)!=0);//等待效验完成break;//模块0case1:DAC12_1CTL|=DAC12CALON;//启动效验DACwhile((DAC12_1CTL&DAC12CALON)!=0);//等待效验完成break;//模块1case2:case3:DAC12_0CTL|=DAC12CALON;//启动效验DACwhile((DAC12_0CTL&DAC12CALON)!=0);//等待效验完成DAC12_1CTL|=DAC12CALON;//启动效验DACwhile((DAC12_1CTL&DAC12CALON)!=0);//等待效验完成break;//模块0、1default:return;//参数错误}}41'