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

更新时间:2024-01-16 20:39:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕业设计(论文)

自动增益控制放大器

学 号 ***号

学生姓名 教学院系 专业班次 指导教师 单 位

***

电气与电子工程系 应用电子技术2012级1202122 ***

职 称

成都工业学院

教授

完成日期 2015 年

5 月 25 日

摘 要

为了克服外界各种因素对接收机输入信号的影响,需要使用自动增益控制技术。自动增益控制(AGC)电路是通信设备,特别是通信接收设备的重要电路之一,其主要作用是使设备的输出电平保持为一定的数值。它能够保证在接收弱信号时,接收机的增益高,而接收强信号时则增益低。使输出信号保持适当的电平,不至于因为输入信号太小而无法正常工作,也不至于因为输入信号太大而使接收机发生饱和或堵塞。

本次设计主要研究应用于音频放大的前级电压放大,放大器可以从MP3或信号源输入音频(100Hz~10kHz)信号,可以带600Ω负载或驱动8Ω喇叭(2~5W)。因此设计的电路需容纳的频带范围应较宽,以至于使语音信号通过。由于语音信号的频带范围为100Hz-10000Hz,所以该电路所应设计的频带范围应在100Hz-10000Hz之间,并且电路应该实现增益的闭环调节,通过此电路可以实现增益的自动调整保持在2V(?0.2),本设计中采用的芯片有VCA822程控放大芯片和MSP430F169单片机来进行控制和显示,通过LCD1602显示输入信号幅度大小及频率高低,可以通过按键来控制输出增益的大小。

关键词:MSP430;自动增益控制;滤波;峰值检波;D/A

I

Abstract

In order to overcome the impact of external factors on the receiver input signal, use AGC technology. Automatic Gain Control (AGC) circuit is a communication device, in particular is an important circuit communication receiving device, and its main role is to make the device output level to maintain a constant value. It can ensure that when receiving a weak signal, the receiver gain is high, and when receiving a strong signal, the gain is low. The output signal to maintain an appropriate level, not because of the input signal is too small and does not work, that does not mean much since leaving the receiver input signal saturation or blockage occurs.

The design of the main pre-amplification applied to the audio voltage amplification, amplifier input audio (100Hz ~ 10kHz) signal from a mp3 or source, can take 600Ω load or drive 8Ω speaker (2 ~ 5W). Therefore, the frequency range of the circuit design should be required to accommodate wider, so much so that the voice signal. Since the frequency range of the speech signal is 100Hz-10000Hz, so the frequency range of the circuit should be designed to be at 100Hz-10000Hz between, and the circuit should be adjusted to achieve a closed-loop gain, through this circuit can automatically adjust the gain is maintained at 2V (+0.2), the design used in the chip VCA822 programmable amplifier chip and MSP430F169 microcontroller to control and display, through LCD1602 display size and frequency of the input signal amplitude level of the output of the gain can be controlled through the key size.

Key words: MSP430; AGC; filter; peak detection; D/A

II

目 录

摘 要 .................................................................................................................................... I Abstract .................................................................................................................................. II 第1章 绪论 ......................................................................................................................... 1 1.1自动增益控制的原理 ................................................................................................. 1 1.2自动增益控制放大器设计内容 ................................................................................. 2 第2章 方案设计 ................................................................................................................. 3 2.1概述 ............................................................................................................................. 3 2.2系统方案论证与选择 ................................................................................................. 3 2.2.1可控增益电路 ...................................................................................................... 3 2.2.2滤波电路模块论证与选择 .................................................................................. 3 2.2.3峰值检波模块论证与选择 .................................................................................. 4 2.2.4显示模块 .............................................................................................................. 4 2.3系统总体方案设计 ..................................................................................................... 4 2.4 本章小结 .................................................................................................................... 5 第3章 电路设计及参数计算 ............................................................................................. 6 3.1概述 ............................................................................................................................. 6 3.2可控增益电路 ............................................................................................................. 6 3.3功率放大电路 ............................................................................................................. 6 3.4滤波电路 ..................................................................................................................... 7 3.5峰值检波电路 ............................................................................................................. 7 3.6麦克风信号采集电路 ................................................................................................. 8 3.7 LCD1602显示和键盘模块 ........................................................................................ 9 3.8 单片机控制电路 ........................................................................................................ 9 3.9 本章小结 .................................................................................................................. 10 第4章 程序设计 ............................................................................................................... 11 4.1主程序流程图 ........................................................................................................... 11 4.2各模块程序流程图 ................................................................................................... 13 4.2.1键盘程序流程图 ................................................................................................ 13

III

成都工业学院毕业设计(论文)

4.2.2噪声采样程序流程图 ........................................................................................ 14 4.2.3反馈程序流程图 ................................................................................................ 15 4.3 本章小结 .................................................................................................................. 15 第5章 测试方案与测试结果 ........................................................................................... 16 5.1测试方法与仪器 ....................................................................................................... 16 5.1.1测试方法 ............................................................................................................ 16 5.1.2测试仪器 ............................................................................................................ 16 5.2测试数据与结果 ....................................................................................................... 16 5.3功能测试总表 ........................................................................................................... 17 5.4 数据分析与结论 ...................................................................................................... 18 总结与展望 ......................................................................................................................... 19 参考文献 ............................................................................................................................. 20 致 谢 ................................................................................................................................... 21 附录A 总电路图 ............................................................................................................... 22 附录B 总程序图 ............................................................................................................... 23

IV

自动增益控制放大器

第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

成都工业学院毕业设计(论文)

1.2自动增益控制放大器设计内容

本设计中采用的芯片有VCA822程控放大芯片实现自动增益。放大器可以从MP3或信号源输入音频(100Hz~10kHz)信号,可以带600Ω负载或驱动8Ω喇叭(2~5W)。当输入信号幅度在10mV~5V间变化时,放大器输出默认值保持在2V±0.2V内,能够显示输入信号幅度大小及频率高低。并且能够在1V~3V范围内步进式调节放大器输出幅度,步距0.2V。

2

自动增益控制放大器

第2章 方案设计

2.1概述

通过MSP430单片机对各个信号的采集、处理来调控外部增益控制放大电路的放大倍数,从而调节音响的音量,音频信号强时自动减小放大器的倍数,信号弱时自动增大放大器的倍数。可控增益放大电路的输出信号经过滤波,峰值检波,单片机经过A/D转换进而采集到音响的电压信号。 2.2系统方案论证与选择

为了更好地实现各模块的功能,分别设计了几种方案进行比较,选择一种比较好的方案。

2.2.1可控增益电路

方案一:采用AD603来实现自动增益控制,AD603是低噪、90MHz带宽增益可调的集成运放,如增益用分贝表示,则增益与控制电压成线性关系。并且通过两级放大器的级联使增益控制范围增宽。

方案二:采用VCA822来实现自动增益控制,芯片 VCA822作为核心器件,宽带、电压控制增益可变放大器,最高频率达 150 MHz,实现将 20mVpp~2Vpp范围内的正弦波、 三角波和方波信号转换为一稳定的输出,输出能力达到5Vpp,并且在 0~5V 范围内实现数控, 其中包括细调 100 级以0.05V 步进、 粗调10级以 0.5V 步进。

方案选定:由于输入信号幅度在10mV~5V间变化,而AD603的信号输入范围较小,需要两片级联,增加了系统的复杂度,VCA822芯片信号输入范围更适合这一要求,故选用芯片VCA822。 2.2.2滤波电路模块论证与选择

方案一:滤波电路采用由LM358和RC电路组成,以获得更稳定的电压,提高环路稳定性及改善环路跟踪性能和噪声性能,且LM358的工作电压为+12V。

方案二:采用双电源集成UA741芯片制作带通滤波电路,该电路能提供很好的

3

成都工业学院毕业设计(论文)

精度,无频率补偿要求,低功耗。

方案选定:由于LM358的工作电压为+12V,其功耗较大,需要频率限制故选用方案二。

2.2.3峰值检波模块论证与选择

方案一:采用数字检波。通过单片机MSP430采集一段时间的信号进行比较,取出最大值即为峰值。此方案硬件简单,电路调试非常方便,但是编程复杂,对于ADC采样模块的精度要求高,并且不能检测频率较高的信号。

方案二:采用峰值检波电路。通过运算放大器和二极管构成峰值检波电路,该方案对硬件电路的要求较为复杂,但编程简单,并且可以检测高频,可以检测规定带宽的频率。

综合以上两种方案,选择方案二。 2.2.4显示模块

方案一:采用数码管显示。其亮度高、体积小,编程较容易,资源占用较少。但显示的信息简单、有限,无法实现本系统中模式选择、数据显示等功能。

方案二:采用液晶显示器(LCD)。液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影像稳定不闪烁等优势,而且显示信息丰富、拥有较好的人机界面和强大的显示功能,通过它可以显示控制方式选择及显示输出效果。

方案选定:基于功能考虑,我们采用方案二。本系统中,采用了液晶显示屏LCD1602,以显示输出电压,便于测试人员及时的控制。 2.3系统总体方案设计

本系统采用MSP430F169单片机作为主控芯片,外围电路包含能实现能自动增益放大的模块、信号处理转换模块。控制原理方案如图2-1所示。

4

成都工业学院毕业设计(论文)

图3-8 单片机控制电路

总电路图见附录A 总电路图。 3.9 本章小结

在各个模块中基于数电和模电以及电路分析进行电路设计,同时查询各种电路和芯片的资料进行分析,同时制作时简单电路用万用板焊接,而较复杂的电路则选用PCB板制作。

10

自动增益控制放大器

第4章 程序设计

在进行系统设计时,除了硬件设计外,大量的工作就是如何根据每个输入信号的实际需要设计应用程序。因此,软件设计自动增益系统设计中占据非常重要。所以系软件设计更为重要。 4.1主程序流程图

该主程序包括了键盘模块和DAC输出子程序,按键通过外置在P1口,DAC输出程序为P6.6口输出,主流程图如图4-1所示

开始 ADC初始化 DAC初始化 判断是否有键按下 Y 键盘程序 N DAC输出子程序 图4-1 主程序流程图

主程序:void main(void) {

WDTCTL = WDTPW+WDTHOLD; //关闭看门狗

11

成都工业学院毕业设计(论文)

/*下面六行程序关闭所有的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,smclk LcdReset(); //复位1602液晶 reset(); //外部显示初始化 ADCreset(); //ADC12初始化 TBCCR0 = 32768 - 1; //设置定时器A的中断时间为1S TBCTL = TBSSEL_1 + MC_1; //计数时钟ACLK, 增计数模式 TBCCTL0 |= CCIE;

TACCTL2=CM_1+SCS+CCIS_0+CAP+CCIE;

_EINT(); //开启总中断 // _BIS_SR(LPM0_bits+GIE); //低功耗模式 LPM0 DACreset();

while (1) {

if(keyin!=0x0f) {

//delay(); switch(keyin) {

case 0x0e:bz_v+=248;break; //P1.0键按下,标准电压步进加0.2v

case 0x0d:bz_v-=248;break; //P1.1键按下,标准电压步进减0.2v case 0x0b:t+=1;if(t==2) t=0;Disp1Char(14,1,t+0x30);break; default:break;

12

自动增益控制放大器

}

while(keyin!=0x0f); if(bz_v>=3723) bz_v=3723; else if(bz_v<=1241) bz_v=1241; }

DACout(); } }

4.2各模块程序流程图 4.2.1键盘程序流程图

键盘程序通过P1口的按键控制,程序流程图如图4-2所示。

键盘子程序按键是否按下?是否增加标准值减小标准值选择模式返回

图4-2 键盘程序

键盘程序: if(keyin!=0x0f) {

//delay(); switch(keyin)

13

成都工业学院毕业设计(论文)

{

case 0x0e:bz_v+=248;break; //P1.0键按下,标准电压步进加0.2v

case 0x0d:bz_v-=248;break; //P1.1键按下,标准电压步进减0.2v

case 0x0b:t+=1;if(t==2) t=0;Disp1Char(14,1,t+0x30);break; default:break; }

while(keyin!=0x0f); 4.2.2噪声采样程序流程图

噪声采样通过麦克风采样模块采集环境声音,再在程序中判断声音来改变输出信号的大小,程序流程图如图4-3所示,程序见附录B:噪声采样程序。

噪声采样子程序AD采样大于噪声值是否大于标准值?相等小于增加D/A输出不改变标准值减小D/A输出改变输出改变输出返回 图4-3 噪声采样程序流程图

14

自动增益控制放大器

4.2.3反馈程序流程图

反馈程序通过A/D采样的电压值来调节控制增益的输出,其流程图如图4-4所示,程序见附录B。

反馈子程序AD采样反馈值是否等于标准值?不等不改变标准值改变D/A输出返回 图4-4 反馈程序流程图

4.3 本章小结

程序通过IAR软件进行MSP430编程,编程是根据硬件电路的设计进行编程,同时定义所用的端口和MSP430的工作的模式,并进行模块化编程。

15

成都工业学院毕业设计(论文)

第5章 测试方案与测试结果

通过仪器来对硬件电路进行测试,在测试完成后,下载程序后用示波器来测试波形。

5.1测试方法与仪器 5.1.1测试方法

用万用表、示波器等相关仪器检测自制的自动增益控制放大器工作是否能够正常工作,其电压、频率、电流等参数是否与理论值相符合,各种情况下波形是否能够正确显示,能否根据输入信号和环境噪声幅度的变化自动调节音量。 5.1.2测试仪器

本系统测试仪器见表1。

表1自动增益控制放大器测试仪器

序号 1 名称 数字万用表 型号 UNI-T 说明 用来检测自制探测仪的硬件焊接和电缆检测的结果以及各模块的工作情况 测试探测仪是否能检测双踪示波器 UT2025C 到带电电缆 2 5.2测试数据与结果

(1)给放大器输入MP3或用信号源输入音频信号,放大器的输出接600欧负载或8欧喇叭,放大器均能正常工作。

(2)当输入信号幅度在10mV~5V间变化时的测试输出电压数据如下表2所示。

16

自动增益控制放大器

表2 数据与结果1

输出电压 输入电压 0.01 频率(Hz) 0.50 1.90 2.00 2.10 2.00 1.00 2.10 2.20 2.15 2.20 2.50 2.12 2.13 1.98 1.95 5.00 2.20 2.12 2.10 2.14 200 800 3000 10000 2.20 2.15 2.15 1.96 由上表2可知:放大器的输出值保持在2V±0.2V内,并且波动非常小。 (3)LCD1602液晶显示能正常显示输入信号幅度大小及频率高低。 (4)由下表3可知在1V~3V范围内步进式调节放大器输出幅度的功能正常 输出电压 频率(Hz) 输入电压 表3 数据与结果2 1.0 1.02 1.10 1.13 0.95 1.09 1.4 1.5 1.35 1.47 1.35 1.54 1.8 1.82 1.79 1.82 1.80 1.79 2.2 2.21 2.20 2.19 2.25 2.16 2.6 2.62 2.60 2.63 2.59 2.60 3.0 3.01 3.10 2.95 2.98 3.01 200 1000 4000 7000 10000 5.3功能测试总表

功能测试如表4所示。

表4 功能测试表

测试条件 输入信号幅度在输入电压 10mV~5V间变化时 10mV 测试内容 测试结果 100 mV 2.5 V 1 V 5 V 17

成都工业学院毕业设计(论文)

放大器输出电压 输入信号幅度大小及频率高低显示 输入音频信号(100Hz~10kHz) 频率显示 输入信号幅度显示 600Ω负载时输出 8Ω喇叭输出 2.0 1.9 2.12 2.1 1.98 否 能 能 能 能 不能 1V~3V范围内步进式调节放大器输出 是否能够根据环境噪声调整自动调节放大器输出幅度 其他 5.4 数据分析与结论

无 将数据进行比较,基本相符,无太大误差,多次用示波器和万用表反复测量,将测得的结果反复论证,并确保每一次测试误差不超过?0.2V,在输入信号幅度相同的情况下,改变频率的大小,输出的电压误差在?0.2V范围内,同时能对环境噪声输出不同的声音大小。

综上所述,本设计基本达到设计要求。

18

自动增益控制放大器

总结与展望

一、总结

在本文中对自动增益控制放大器的原理也进行了讨论及分析。确定了实现增益控制功能的放大器增益范围,并且设计出具体的硬件电路,对各部分电路的工作原理也进行了详细介绍。在程序的设计中流程图展示了其设计思路,并在文章的最后,列出了具体实验中的实验数据及分析结果,对存在的问题也有了一定的认识。 二、今后研究方向

随着微电子技术、计算机网络技术和通信技术的发展,自动增益控制的研究也在不断的进步,实现自动增益控制的方法也在不断的完善,改进目前在性能方面的一些不足,将会得到更大的提高。

19

成都工业学院毕业设计(论文)

参考文献

[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] Fernandez Dang. Getting Started with the MSP430 Launchpad[M]. Newnes,2013 [11] John H. Davies. MSP430 Microcontroller Basics[M]. Newnes,2013

[12] Steven Barrett, Daniel Pack. Microcontroller Programming and Interfacing[M].

Morgan & Claypool Publishers,2011

20

自动增益控制放大器

致 谢

本设计是在导师胡沁春的悉心指导下完成的,能够顺利完成,还承蒙胡老师指导和同学的帮助。在设计过程中,胡老师给予了悉心的指导,最重要的是给了我部分资料,在此,我对胡老师表示最真挚的感谢!同时感谢所有帮助过我的同学!

21

成都工业学院毕业设计(论文)

附录A 总电路图

22

自动增益控制放大器

附录B 总程序图

Main.c

/******************************************************** 程序功能:①通过P6.0口采样到的输出电压与初始标准电压比较,调节 DA转换器的输出电压,减小或增大 VCA822的增益,从而使 输出电压稳定在所设标准输出电压上,误差±0.2v。 ②当麦克风选通开关打开时,P6.1口采样到的噪声信号使输出 电压标准值增加或减少,从而调节输出信号的大小。 ③通过按键程序调节输出电压标准值的大小从而使输出电压 在1—3V以0.2V步进调节。

---------------------------------------------------------- 测试说明:

*******************************************************/ #include #include #include \#include \#include \#include \#include \

#define Num_of_Results 32 #define keyin (P1IN&0X0F)

/****************变量定义******************************/ uchar shuzi[] = {%unsigned char U[] = {%unsigned char I[] = {\//unsigned char A[] = {\

unsigned char BZ[] = {\

unsigned long sum0=0, //P6.0口采样的输出电压

sum1=0, //P6.1口采样的麦克风输入电压

sum2, //衰减10倍后的输入电压,判断选通开关 bz_v=2482, //输出信号初始值为2v t=0,

micbz_v=0; //麦克风信号输入改变了的输出标准值

23

成都工业学院毕业设计(论文)

signed int z=1861; //定义为有符号数,避免运算出错 static uint results[Num_of_Results]; //保存ADC转换电压结果的数组 static uint results1[Num_of_Results]; //保存ADC转换电压结果的数组 static uint results2[Num_of_Results]; //保存ADC转换电压结果的数组 /****************************函数申明******************* void Trans_val(uint Hex_Val); //电压转化函数声明 void Trans_val1(uint Hex_Val); //电压转化函数声明 void reset(void); //外部显示初始化函数声明 void ADCreset(void); //ADC模块初始化函数声明 void DACreset(void); //DAC模块初始化函数声明 void DACout(void); //DAC模块输出函数声明 void ClkInit(void); //SMCLK时钟初始化函数声明 void delay(void); //延时程序声明

void bzxs(uint Hex_Val); //标准电压参数显示函数声明 void Trans_val2(uint Hex_Val);

************************************************************/ /************************主函数*************************/ void main(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,smclk LcdReset(); //复位1602液晶 reset(); //外部显示初始化 ADCreset(); //ADC12初始化

24

自动增益控制放大器

// CCR0 = 32768 - 1; //设置定时器A的中断时间为1S //TACTL = TASSEL_1 + MC_1; //计数时钟ACLK, 增计数模式 // CCTL0 |= CCIE;

_EINT(); //开启总中断 // _BIS_SR(LPM0_bits+GIE); //低功耗模式 LPM0 DACreset();

while (1) {

if(keyin!=0x0f) {

//delay(); switch(keyin) { case 0x0e:

bz_v+=248;break; //P1.0键按下,标准电压步进加0.2v case 0x0d:

bz_v-=248;break; //P1.1键按下,标准电压步进减0.2v case 0x0b:

t+=1;if(t==2) t=0;break; //选择是否开启噪声监测 default:break; }

while(keyin!=0x0f);

if(bz_v>=3724) //上限为3v bz_v=3724;

else if(bz_v<=1241) //下限为1v bz_v=1241; }

DACout(); } }

/******************************************* 函数名称:ADC12ISR

功 能:ADC中断服务函数,在这里用多次平均的 计算P6.0和P6.1口的模拟电压数值 参 数:无

25

成都工业学院毕业设计(论文)

返回值 :无

********************************************/ #pragma vector=ADC_VECTOR __interrupt void ADC12ISR (void) {

static uint index = 0;

results[index++] = ADC12MEM0; // 采样输出电压 if(index == Num_of_Results) {

uchar i;

//unsigned long sum0 = 0;

index = 0;

for(i = 0; i < Num_of_Results; i++) {

sum0 += results[i]; }

sum0 >>= 5; //除以32 Trans_val(sum0); //显示输出电压值 if(t==0) //没有按键按下时 {

if( sum0>bz_v) //判断采样值是否大于标准值 { z+=50; //如果大于,则增大DA输出,减小反馈增益 if(z>=3276) //输出2v时,衰减倍数最大 z=3276; }

else if(sum0

z=0; //输出为0v时,放大倍数最大,3倍 }

bzxs(bz_v); //显示标准值 }

else if(t==1) //如果有键按下 {

26

自动增益控制放大器

if(sum0>micbz_v) //如果麦克风输入小于反馈值 z+=100; //衰减输出信号

if(sum0

static uint index1 = 0; results1[index1++] = ADC12MEM1; if(index1 == Num_of_Results) {

uchar i1;

unsigned long sum1 = 0;

index1 = 0;

for(i1 = 0; i1 < Num_of_Results; i1++) {

sum1 += results1[i1]; }

sum1>>= 5; micbz_v=1241+sum1; if(micbz_v>3723) micbz_v=3723; if(micbz_v<1241) micbz_v=1241;

//Trans_val1(sum1); }

static uint index2 = 0;

results2[index2++] = ADC12MEM2; if(index2 == Num_of_Results) {

uchar i2;

unsigned long sum2 = 0;

index2 = 0;

// 麦克风采样数据控制标准值 //除以32

//麦克风输入的电压,固定增加1v //显示麦克风采集的电压 // 采样数据控制模拟开关 27

成都工业学院毕业设计(论文)

for(i2 = 0; i2 < Num_of_Results; i2++) {

sum2 += results2[i2]; }

sum2>>= 5; //除以32

Trans_val2(sum2); //显示输入信号幅度

if(sum2<13) //当输入电压大于100mv时, P3OUT=BIT0; //打开衰减信号通道 else if(sum2>=13&&sum2<125)

P3OUT=BIT1; //打开未衰减信号(P3.1)通道 else if(sum2>=125)

P3OUT=BIT2; //打开未衰减信号(P3.2)通道 } }

/******************************************* 函数名称:Trans_val

功 能:将16进制ADC转换数据变换成4位10进制 真实的模拟电压数据,并在液晶上显示 参 数:Hex_Val--16进制数据

n--变换时的分母等于2的n次方 返回值 :无

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

void Trans_val(uint Hex_Val) //电压测量 {

unsigned long caltmp; unsigned long daa; uchar i; uchar ptr[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;

28

自动增益控制放大器

ptr[2] = (daa - ptr[0]*1000)/100;

ptr[3] = (daa - ptr[0]*1000-ptr[2]*100)/10;

ptr[4]=daa; //shuzi表中第10位对应符号\ for(i = 0;i < 5;i++)

Disp1Char((1 + i),0,shuzi[ptr[i]]); }

void Trans_val1(uint Hex_Val) //输入信号幅度测量,更改运算参数 {

unsigned long caltmp; unsigned long daa; uchar i; uchar ptr[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; //shuzi表中第10位对应符号\ for(i = 0;i < 5;i++)

Disp1Char((1 + i),1,shuzi[ptr[i]]); }

void Trans_val2(uint Hex_Val) //输入信号频率测量,更改运算参数 {

unsigned long caltmp; unsigned long daa; uchar i; uchar ptr[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;

29

成都工业学院毕业设计(论文)

ptr[4]=daa; for(i = 1;i < 5;i++)

Disp1Char((2+ i),1,shuzi[ptr[i]]);

} /******************************************* 函数名称:bzxs

函数功能:显示通过键盘设定的标准电压值 返回参数:无

******************************************/ void bzxs(uint Hex_Val) {

unsigned long caltmp; unsigned long daa; unsigned int i; uchar ptr[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; //shuzi表中第10位对应符号\ for(i = 0;i < 5;i++)

Disp1Char((11 + i),0,shuzi[ptr[i]]); }

/*******************Reset*********************** 函数名称:Reset

函数功能:对外部显示初始化 返回参数:无

************************************************/ void reset(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');

30

自动增益控制放大器

Disp1Char(9,1,'V'); // Disp1Char(15,1,'m'); }

/**********************ADCreset*********************** 函数名称:ADCreset

函数功能;对ADC12进行初始化 返回参数:无

******************************************************/ void ADCreset() {

P6SEL |= 0x07; // 使能ADC通道

ADC12CTL0 = ADC12ON+SHT0_8+MSC; // 打开ADC,设置采样时间, ADC12CTL0 |= REF2_5V+REFON; //使用内部参考电压源 2.5V ADC12CTL1 = 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转换器 返回参数:无

**************************************************/ void DACreset(void) {

DAC12Init(0,5); //初始化 DAC12Cal(2); //校准

//ADC12CTL0 = REF2_5V + REFON; //开启内部参考源 2.5v 必须有;以供DA使用 //z=2048;

//DAC12_0DAT=z; //输出放大器倍数对应的电压值 }

31

成都工业学院毕业设计(论文)

/**************************************************************************** * 名 称:ClkInit

* 功 能:时钟系统初始化 MCLK为8MHz,SMCLK为1MHz * 入口参数:无 * 出口参数:无

****************************************************************************/ void ClkInit(void) {

char mi;

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模块输出。 返回参数:无

*********************************************/ void DACout(void) {

DAC12_0DAT=z; //输出放大器倍数对应的电压值 }

/******************************************* 函数名称:delay

功 能:用于消抖的延时 参 数:无 返回值 :无

********************************************/ void delay(void) {

32

自动增益控制放大器

uint tmp;

for(tmp = 12000;tmp > 0;tmp--); } Cry1602.c

#include #include \typedef unsigned char uchar; typedef unsigned int uint;

/**************宏定义***************/ #define DataDir P2DIR #define DataPort P2OUT #define Busy 0x80 #define CtrlDir P6DIR

#define CLR_RS P6OUT&=~BIT3; //RS = P6.3 #define SET_RS P6OUT|=BIT3;

#define CLR_RW P6OUT&=~BIT4; //RW = P6.4 #define SET_RW P6OUT|=BIT4; #define CLR_EN P6OUT&=~BIT5; #define SET_EN P6OUT|=BIT5;

/******************************************* 函数名称:DispNchar

功 能:让液晶从某个位置起连续显示N个字符 参 数:x--位置的列坐标 y--位置的行坐标 n--字符个数

ptr--指向字符存放位置的指针 返回值 :无

********************************************/ void DispNChar(uchar x,uchar y, uchar n,uchar *ptr) {

uchar i;

for (i=0;i

Disp1Char(x++,y,ptr[i]); if (x == 0x0f) {

//EN = P6.5

33

成都工业学院毕业设计(论文)

}

/******************************************* 函数名称:LocateXY

功 能:向液晶输入显示字符位置的坐标信息 参 数:x--位置的列坐标 y--位置的行坐标 返回值 :无

********************************************/ void LocateXY(uchar x,uchar y) {

uchar temp; }

/******************************************* 函数名称:Disp1Char

功 能:在某个位置显示一个字符 参 数:x--位置的列坐标 y--位置的行坐标 data--显示的字符数据 返回值 :无

********************************************/ void Disp1Char(uchar x,uchar y,uchar data) { }

/******************************************* 函数名称:LcdReset

功 能:对1602液晶模块进行复位操作

LocateXY( x, y );

LcdWriteData( data ); temp = x&0x0f; y &= 0x01;

if(y) temp |= 0x40; //如果在第2行 temp |= 0x80;

LcdWriteCommand(temp,1); }

x = 0; }

y ^= 1;

34

自动增益控制放大器

参 数:无 返回值 :无

********************************************/ void LcdReset(void) {

CtrlDir |= 0x07; //控制线端口设为输出状态 DataDir = 0xFF; //数据端口设为输出状态 LcdWriteCommand(0x38, 0); //规定的复位操作

Delay5ms();

LcdWriteCommand(0x38, 0); Delay5ms();

LcdWriteCommand(0x38, 0); Delay5ms();

LcdWriteCommand(0x38, 1);

//显示模式设置 //显示关闭

//写字符时整体不移动 //显示开,不开游标,不闪烁

LcdWriteCommand(0x08, 1); }

LcdWriteCommand(0x06, 1); LcdWriteCommand(0x0c, 1);

LcdWriteCommand(0x01, 1); //显示清屏

/******************************************* 函数名称:LcdWriteCommand 功 能:向液晶模块写入命令 参 数:cmd--命令,

chk--是否判忙的标志,1:判忙,0:不判 返回值 :无

********************************************/ void LcdWriteCommand(uchar cmd,uchar chk) {

if (chk) WaitForEnable(); // 检测忙信号 CLR_RS; CLR_RW; _NOP();

DataPort = cmd; //将命令字写入数据端口 _NOP(); _NOP();

SET_EN; //产生使能脉冲信号

35

成都工业学院毕业设计(论文)

}

/******************************************* 函数名称:LcdWriteData

功 能:向液晶显示的当前地址写入显示数据 参 数:data--显示字符数据 返回值 :无

********************************************/ void LcdWriteData( uchar data ) {

WaitForEnable(); //等待液晶不忙 SET_RS; CLR_RW; _NOP(); _NOP(); CLR_EN;

DataPort = data; //将显示数据写入数据端口 _NOP(); }

/******************************************* 函数名称:WaitForEnable

功 能:等待1602液晶完成内部操作 参 数:无 返回值 :无

********************************************/ void WaitForEnable(void) {

P2DIR &= 0x00; //将P4口切换为输入状态

CLR_RS; SET_RW; _NOP(); SET_EN; _NOP(); _NOP();

SET_EN; //产生使能脉冲信号 _NOP(); _NOP(); CLR_EN;

36

自动增益控制放大器

while((P2IN & Busy)!=0); //检测忙标志 CLR_EN;

P2DIR |= 0xFF; //将P4口切换为输出状态

}/******************************************* 函数名称:Delay5ms 功 能:延时约5ms 参 数:无 返回值 :无

********************************************/ void Delay5ms(void) {

uint i=40000; while (i != 0) { i--; } }

/******************************************* 函数名称:Delay400ms 功 能:延时约400ms 参 数:无 返回值 :无

********************************************/ void Delay400ms(void) {

uchar i=50; }

/*********************************************** 函数名称:DispStr

功 能:让液晶从某个位置起连续显示一个字符串 参 数:x--位置的列坐标

uint j; while(i--) { }

j=7269; while(j--);

37

成都工业学院毕业设计(论文)

y--位置的行坐标

ptr--指向字符串存放位置的指针 返回值 :无

***********************************************/ void DispStr(uchar x,uchar y,uchar *ptr) {

uchar *temp; uchar i,n = 0; temp = ptr;

while(*ptr++ != '\\0') n++; //计算字符串有效字符的个数 for (i=0;i

Disp1Char(x++,y,temp[i]); if (x == 0x0f) {

x = 0; y ^= 1; } } }

/******************************************* 函数名称:Disp2Char

功 能:在某个位置显示一个字符 参 数:x--位置的列坐标 y--位置的行坐标 data--显示的字符数据 返回值 :无

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

void Disp2Char(unsigned char x,unsigned char y,unsigned char data) { } DAC12.c

/*---------------------------------------------------------------- *

LocateXY( x, y );

LcdWriteData( data );

38

自动增益控制放大器

* 文件功能描述:

* MSP430F16x系列单片机DAC12程序库 * 说明:

* 该程序完成DAC12模块的通用程序库,方便以后使用DA * DAC12Cal是430内部校准,用来校正DAC的偏移误差,不 * 需要输出准确的电压时,不需要校准。 * * * *

* 修改标识: * 修改描述:

**----------------------------------------------------------------*/

#include #include \

/******************************************************** * 函数名称:DAC12_0Init

* 功 能:DAC12_0用到的相关资源初始化 * 参 数:

* DAC12AMPx:DAC运算放大器设置: * 0 输入缓冲器关闭,输出缓冲器关闭,高阻 * 1 输入缓冲器关闭,输出缓冲器关闭,0V * 2 输入缓冲器低速/电流,输出缓冲器低速/电流 * 3 输入缓冲器低速/电流,输出缓冲器中速/电流 * 4 输入缓冲器低速/电流,输出缓冲器高速/电流 * 5 输入缓冲器中速/电流,输出缓冲器中速/电流 * 6 输入缓冲器中速/电流,输出缓冲器高速/电流 * 7 输入缓冲器高速/电流,输出缓冲器高速/电流 * 返 回 值:无

* 说 明:其他默认为:12位方案、写入即更新输出,module模 * 块为3时,两个都写入更新;DAC12的满量程为参考电 * 压;内部2.5v参考电压:需要AD设置参考源打开2.5. *********************************************************/ void DAC12_0Init(char DAC12AMPx) {

39

成都工业学院毕业设计(论文)

// Internal ref gain 1

DAC12_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. *********************************************************/ void DAC12_1Init(char DAC12AMPx) {

// Internal ref gain 1

DAC12_1CTL = DAC12SREF_0 + DAC12IR;

DAC12_1CTL |= DAC12LSEL_1 + (DAC12AMPx << 5); DAC12_1CTL |= DAC12ENC; }

/******************************************************** * 函数名称:DAC12Init

* 功 能:DAC12用到的相关资源初始化 * 参 数:

* module模块 0:使用模块DAC12_0

40

自动增益控制放大器

* 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. *********************************************************/ char DAC12Init(char module,char DAC12AMPx) {

if(DAC12AMPx>7) {

return(0); }

//---------------------------设置模块------------------------------- switch(module) {

case 0: DAC12_0Init(DAC12AMPx); break; //模块0 case 1: DAC12_1Init(DAC12AMPx); break; //模块1 case 2:

DAC12_0Init(DAC12AMPx); DAC12_1Init(DAC12AMPx);

break; //模块0、1 case 3:

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 两个模块都校准 * 返 回 值:无

*********************************************************/ void DAC12Cal(char module) {

switch(module) {

case 0:

DAC12_0CTL |= DAC12CALON; // 启动效验DAC while((DAC12_0CTL & DAC12CALON) != 0); // 等待效验完成 break; //模块0 case 1:

DAC12_1CTL |= DAC12CALON; // 启动效验DAC while((DAC12_1CTL & DAC12CALON) != 0); // 等待效验完成 break; //模块1 case 2: case 3:

DAC12_0CTL |= DAC12CALON; // 启动效验DAC while((DAC12_0CTL & DAC12CALON) != 0); // 等待效验完成 DAC12_1CTL |= DAC12CALON; // 启动效验DAC while((DAC12_1CTL & DAC12CALON) != 0); // 等待效验完成 break; //模块0、1 default : return; //参数错误 } }

42

本文来源:https://www.bwwdw.com/article/rdfo.html

Top