基于某51单片机地程控放大器设计.doc

上传人:李司机 文档编号:1131798 上传时间:2022-06-30 格式:DOC 页数:36 大小:1.90MB
返回 下载 相关 举报
基于某51单片机地程控放大器设计.doc_第1页
第1页 / 共36页
基于某51单片机地程控放大器设计.doc_第2页
第2页 / 共36页
基于某51单片机地程控放大器设计.doc_第3页
第3页 / 共36页
基于某51单片机地程控放大器设计.doc_第4页
第4页 / 共36页
基于某51单片机地程控放大器设计.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《基于某51单片机地程控放大器设计.doc》由会员分享,可在线阅读,更多相关《基于某51单片机地程控放大器设计.doc(36页珍藏版)》请在三一办公上搜索。

1、摘要本设计主要以CD4051模拟开关以与所连的电阻网络作为核心,利用SST89C51单片机控制所选A/D的电阻网络状态,同时编写峰值检测软件对输入信号进展峰值检测并以此为依据来控制正弦波的放大倍数,最后利用液晶显示器将其显示出来。经过实际测量,本系统可以实现通频为0Hz1.5KHz,放大倍数为0.965的无失真的自动波形放大器。关键词:SST89C51单片机 液晶显示器 放大器 TLC549目录摘要-2一 设计要求-4程控放大器的作用-4二 实验方案与论证-5三 单元电路分析与实现- -6引脚特性说明-63.2 A/D转换电路-7-8- -11- -11四 软件分析-12-12-12-13-1

2、3-15-15五 实验仿真处理与结果分析-16六 实验总结- -21七 参考文献- -22附录-23一. 设计要求.程控放大器的作用在信号调理电路中,必须将输出信号调理在适当水平。比如一个正弦交流信号,要连接到A/D转换器件进展A/D转换,当A/D转换器件的参考电压为5V时,交流信号的幅值应调节到小于并接近于2.5V的水平,以提高A/D转换器件精度的利用率。被测交流信号一般为正负交替的电压信号,需经电压提升电路,将被测电压信号中叠加一个直流分量后,输出电压在05V之间,如图1.1.1所示:图1.1.1 适当的输出信号幅值如果输出信号的幅值过大,超出A/D器件的基准电压,显然不能得到正确的A/D

3、转换结果;如果输出信号幅值过小,如此不能充分发挥A/D转换器件精度,即不能充分利用A/D转换器件的位数。因此有必要将输出信号调理到05V之间,并且尽可能接近边界。当原始被测信号的幅值变化较大时,如果采用固定增益的信号调理电路,如此不能自动根据原始被测信号的变化调整增益放大倍数。采用程控放大器,利用DSP实现增益的智能调节,如此可以根据信号幅值的变化自动调整放大倍数。程控放大器利用选通开关,控制放大器的反应电阻阻值,实现改变放大倍数的原理工作,其根本原理如图1.2.1所示。 a多项选择一开关控制 b一对一开关控制利用数模开关选通不同的开关通道,通过反应电阻的搭配可以实现多种数值的放大。采用图1.

4、2.1a所示的电路,只能进展较为简单的放大倍数控制。采用图1.2.1b所示的电路,放大器的放大倍数调整更灵活,只是编程也要复杂一些。实验中的选通电路原理如如下图1.2.2所示。图1.2.2 程控放大器实验原理图本实验的控制电路采用8选1模拟开关器件CD4051作为放大器反应电阻选择开关。a.按照图1.2.2所示,在面包板上自行搭接放大器电路,并与实验箱上的A/D转换器件与单片机连接;b.自行编程实现程控放大的功能;c.按照图1.2.1(b)所示的电路原理,利用两片模拟开关器件CD4051,自行搭接程控放大器实验电路,并编程实现程控放大功能。二. 实验方案设计与论证由于本实验中已经采用8选1模拟

5、开关器件CD4051作为放大器反应电阻选择开关,并且也指定了相应的阻值。所以不能用步进放大的方式来对放大器进展操作。同时由于实验中要求采用两块CD4051,通过两两电阻并联一共可得32种放大倍数。由于该32种放大倍数并无太多规律可循,所以弄清所有组合并对应单片机芯片的引脚变化是很重要的。先采取适宜算法先将CD4051电阻组合一一列出并与芯片引脚相对应。具体可参考附录一。此外,利用TLC549进展峰值检测处理时需要对TLC549有一定了解:TLC549是 TI公司生产的一种低价位、高性能的8位 A/D转换器,它以8位开关电容逐次逼近的方法实现 A/D转换,其转换速度小于 17us,最大转换速率为

6、 40000HZ,4MHZ典型内部系统时钟,电源为 3V至 6V。它能方便地采用三线串行接口方式与各种微处理器连接,构成各种廉价的测控应用系统。实验过程中,通过TLC549获取输入信号的峰值,从而可以反应给单片机一个最适宜的放大倍数,使放大后峰峰值接近5V。放大倍数通过单片机又发送给液晶屏,在液晶屏上显示放大倍数。本次实验采用的液晶屏为字符型液晶显示模块。具体型号为SMC1602该液晶模块采用HD44780驱动芯片,可兼容性强。该液晶屏驱动程序于单片机课程学习中已经给出,可显示192种字符160个5*7点阵字符和32个5*10点阵字符,这些字符的代码均与标准ASCII码大局部兼容。所以对于字符

7、对应和输出相当有帮助。实验总体方案是以单片机SST89C51控制为核心,液晶模块和A/D芯片与单片机结合参与工作,实现波形自动放大以与放大倍数的显示。系统框图如图2-1所示。该方案的优点是实现了软件与硬件相结合的控制方式,设置参数较为方便,可以实现倍数的快速自动调节,误差也较小,并且通过液晶显示器将其显示出来。利用软件局部省去了峰值检测局部的繁琐设计,大大简化了实验方案。三. 单元电路分析与实现。3.1首先对实验中用到的一些芯片特性进展说明。在实验中要用到单片机的局部引脚。本实验选用P1.0,P1.1,P1.2来控制第一块CD4051;P2.0,P2.1,P2.2来控制第二块CD4051。实验

8、接线图如如下图3.1.1所示:单片机与液晶显示器接线图如如下图3.1.2:3.2 A/D转换电路 本系统采用TLC549作为A/D转换芯片。下面介绍其一些根本特性。TLC549是 TI公司生产的一种低价位、高性能的8位 A/D转换器,它以8位开关电容逐次逼近的方法实现 A/D转换,其转换速度小于 17us,最大转换速率为 40000HZ,4MHZ典型内部系统时钟,电源为 3V至 6V。它能方便地采用三线串行接口方式与各种微处理器连接,构成各种廉价的测控应用系统。 编辑本段二、TLC549 引脚图与各引脚功能TLC549引脚图如如下图3.2.1所示:其各引脚说明如下:REF+:正基准电压输入 2

9、.5VREF+Vcc+0.1。 REF:负基准电压输入端,-0.1VREF-2.5V。且要求:REF+REF-1V。 VCC:系统电源3VVcc6V。 GND:接地端。 /CS:芯片选择输入端,要求输入高电平 VIN2V,输入低电平 VIN0.8V。 DATA OUT:转换结果数据串行输出端,与 TTL 电平兼容,输出时高位在前,低位在后。 ANALOGIN:模拟信号输入端,0ANALOGINVcc,当 ANALOGINREF+电压时,转换结果为全“1(0FFH),ANALOGINREF-电压时,转换结果为全“0(00H)。 I/O CLOCK:外接输入/输出时钟输入端,同于同步芯片的输入输出

10、操作,无需与芯片内部系统时钟同步实验测试时,TLC549接线图如如下图3.2.2所示:本系统采用AT89C51单片机最小控制系统,显示局部采用LCD1602液晶显示。本节重点介绍LCD1602的根本用法。1、LCD1602液晶简介与系统的硬件原理图1602采用标准的16脚接口,各引脚功能图如表3.2所示。表3311VSS地电源2VDD5V正电源3V0液晶显示器比照度调整端,接正电源时比照度最弱,接地电源时比照度最高,比照度过高时会产生“鬼影,使用时可以通过一个10K的电位器调整比照度4RS存放器选择,高电平时选择数据存放器、低电平时选择指令存放器5RW读写信号线,高电平时进展读操作,低电平时进

11、展写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据6E使能端,当E端由高电平跳变成低电平时,液晶模块执行命令714D0D78位双向数据线1516空脚1602液晶模块内部的字符发生存储器CGROM)已经存储了160个不同的点阵字符图形,如表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A的代码是01000001B41H,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A。表3-32 CGROM和CGRAM中字符

12、代码与字符图形对应关系高 位低 位00000010001101000101011001111010101111001101111011110000CGRAM(1)0Pp一P0001(2)!1AQaqq0010(3)2BRbr川0011(4)#3CScs0100(5)$4DTdt0101(6)%5EUeu0110(7)&6FVfv0111(8)7GWgw1000(1)(8HXhx1001(2)9IYiy-11010(3)*:JZjzj千1011(4)+;Kkx万1100(5),Nn1111(8)/?O_o2、1602液晶模块内部的控制器共有11条控制指令,如表3-3-3所示。它的读写操作、屏幕和

13、光标的操作都是通过指令编程来实现的。指令1:清显示,指令码01H,光标复位到地址00H位置指令2:光标复位,光标返回到地址00H指令3:光标和显示模式设置 1/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平如此无效指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光R/L:1向右移动;0向左移动。指令6:功能设置命令 DL高电平时为4

14、位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符指令7:字符发生器RAM地址设置指令8:DDRAM地址设置指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据指令11:读数据表3-3-3 1602液晶模块的控制指令液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否如此此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表2-4是DM-162的内部显示地址。表3-3

15、-4 DM-162的内部显示地址1234567891011121314151600H01H02H03H04H05H06H07H08H09H0AH0BH0CH0DH0EH0FH40H41H42H43H44H45H46H47H48H49H4AH4BH4CH4DH4EH4FH比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B40H)+10000000B(80H)=11000000B(C0H)。 进展实验前,我通过查阅相关资料,进展了一个峰值检测电路的设

16、计,电路如如下图3.4所示:该电路在低频情况下能够检测出信号的峰峰值,但进入高频后,检测结果误差很大,这可以通过后面的仿真来看出,所以经过一番取舍,我最后放弃了这种方案。 实验最后硬件效果图如图3.5所示:四. 软件分析本实验中需要利用软件解决两个问题,两块CD4051选通放大倍数组合情况的分析排序以与对应单片机引脚的编码设计。利用C+编程实现了所有放大倍数的组合。以下是该程序的示例:通过以上程序,能够实现将所有的两两组合的放大倍数情况全部包含于数组C64中,当然这个数组现在是杂乱无章并且有很多重复倍数的。那么接下来就需要进展第二步排序。通过对C64进展排序处理,可以得到放大倍数从小到大有顺序

17、的所有放大倍数组合。程序示例如下:上面是一个简单的排序算法,但能够很巧妙的将所有的放大倍数从小到大一一列出。仅仅获得所有的放大倍数显然是不够的,必须与单片机相应引脚对应起来并通过控制CD4051的选通来实现这些放大倍数才能达到实验自动放大的要求。 本实验选用P1.0,P1.1,P1.2来控制第一块CD4051;P2.0,P2.1,P2.2来控制第二块CD4051。由上述硬件分析我们可以知道CD4051引脚关系图。通过比照每块CD4051的放大倍数以与两块组合的放大倍数我们可以将引脚关系也按与放大倍数相对应的关系来一一对应。本实验采用的做法是创建两个一维数组, floatB36=0.5,0.6,

18、0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,2.126,2.2218,2.4812,2.55,2.9143,3.3775,3.4,4.0476,5;intC36=77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,44,52,43,51,33,50,42,41,

19、32,40,31,30,22,21,20,11,10,0;对C数组进展十位以与个位的处理就可以得到相应引脚数值,具体程序如下所示:将P1.0,P1.1,P1.2对应于d;P2.0,P2.1,P2.2对应于e就可以得到相应的放大倍数。现在的问题是如何确定最开始需要的放大倍数以与对此放大倍数做怎样的处理。 在进展峰值检测前我曾设想过两种方案,一种是通过硬件设计,这在前面已经提过,另外一种就是软件检测了。通过对所接入信号进展不断采样并与前述信号进展比拟得出峰峰值,并且在TLC549基准电压下将其转换为char型数据,这样通过与5V所对应的char型数据255比拟可以得出放大的最大倍数。具体程序如下:

20、 液晶显示的目的是反映放大倍数,这样可以对原输入信号有一个清晰的了解。液晶编写需要对其驱动程序接口有比拟完整的认识。液晶驱动程序流程图如如下图4.4.1所示: 依据上述读写操作即可对液晶LCD进展读写。实验中对液晶操作的读写程序如如下图4.4.2和4.4.3:TLC549为CMOS8位开关电容逐次逼近A/D转换器。与处理器或外围设备连接采用SPI串行总线方式,包括一个数据输出端DO和个控制输入端:输入/输出时钟CLK和芯片选择CS输入作为数据控制,其最高CLK输入频率为1.1MHz。TLC549引脚接线已在硬件局部介绍。对于其读写程序应严格按时序图来进展处理。当在头文件进展完整分析后,主程序对

21、TLC549进展操作就很简单了。接下来就按照上面的分析对程序进展处理,先进展初始化:函数主体处理局部如如下图示,与前述介绍流程图根本一致:五. 实验仿真处理与结果分析首先是对峰值检测电路进展仿真,仿真的频率特性如如下图5.1所示:从仿真可以看到,对于低频局部峰值 检测电路效果很好,但对于高频检测局部其效果并不佳,这也是为什么我最后舍弃这种方法的原因。本实验采用LM324作为放大电路对实验放大电路局部进展仿真分析如图5.2:由于LM324频率特性较好,不会对电路造成太大影响,并且LM324在电源电压为3到32V均可正常工作,而单片机开发板上最大只能提供5V电压,所以实验采用LM324作为放大芯片

22、是非常适宜的。实验测试中需要用到示波器与信号源,所以在测试过程中,我通过protues搭建了一个模拟的单片机仿真图。具体如如下图5.3所示:通过屡次测试,该开发板与实际所以单片机开发板根本吻合。对于程序调试和联合仿真起了很大作用。如下图5.4是进展仿真实时图:通过一系列测试,我们发现该实验结果所能放大的倍数X围以与频率X围如下表所示:最低最高放大倍数 5 频率X围 0Hz 1500Hz由于测试X围TLC549参考电压为5V,单片机内部会议2.5V左右的直流偏置,考虑到TLC549供电电压为5V,所以其放大最小倍数约为1倍。仿真示波器图形如如下图5.5.1所示:最大放大倍数由于收到反应电阻的影响

23、,故最大放大倍数为5倍,仿真显示如如下图5.5.2所示:在进展频率测试时,当输入直流电压时,仍能正常工作,故最低频率特性为0Hz。仿真结果如如下图5.5.3所示:最大频率特性检测如如下图5.5.4所示:造成这种结果的原因是利用软件进展峰值检测,其频率特性也收到了很大限制,如单片机处理速度,TLC549采样速度等。六. 实验总结通过一个多星期的课程设计,从选题到查资料,从完善原理图到写报告文档,让我明白了课程设计是名副其实的综合性训练,不仅要运用学过的数字电路、单片机与汇编原理等知识,还要学会查阅各种图书资料和工具书,并将新知识和所学的结合起来为自己所用。进一步熟练使用Proteus仿真软件,加

24、强了工程绘图的能力,也提高了动手能力。在设计中遇到一些困难和问题,在向教师请教和与同学的讨论中,解决了问题,觉得很有收获。这个设计过程中,我遇到过许屡次失败的考验,就比如,自己对实际生活中的交通秩序的不了解给整个设计带来的困扰,连东南西北四个方向红绿灯之间的关系都没搞清楚,这是对现实生活中小细节的忽略。不仅补学了生活中的小常识,还让我明白了,生活中的点滴也蕴藏着知识,我们不仅要学习书本上的知识,也要去发现身边的学问。值得一提的是,通过单片机课程设计,我不仅加深了对单片机理论的理解,还学会了将理论很好地应用到实际当中去。上学期学习单片机的课时不多,对单片机的硬件设计,软件设计掌握的深度不够,但通

25、过此次课程设计,理论水平明显地提高了了,并且对于硬件电路的工作原理有了进一步的学习,有了一定的掌握;软件方面,在程序的设计、程序的调试方面都有了很大的进步。另外在编程中出现问题时,一定要戒骄戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误。我在这一设计过程中,学会了坚持不懈,不轻易言弃。设计过程,也好比是我们的成长历程,常有一些不如意,也许这就是在对我们提出挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。七. 参考文献1.谢自美电子线路设计实验测试(第二版) 华中理工大学, 2000, 黄心汉. 程控增益放大器和自动调整增益放大器的设计J . 电子技术应用, 1998

26、, (5) : 5051.3.华中科技大学电工电子科技创新中心组.SST单片机实践教程 .华中科技大学,2010. MCS - 51 系列单片机应用系统设计M . ;航空航天大学,1990.#includeusing namespace std;int main() int i,j; float k; float C72; float A8=1,1.5,2,2.7,3.3,5.1,6.8,10; float B8=1,1.5,2,2.7,3.3,5.1,6.8,10; for(i=0;i8;i+) for(j=0;j8;j+) Ci*8+j+1=Ai*Bj/(Ai+Bj); coutC64en

27、dl; for(i=0;i8;i+) Ci+65=Ai; coutC72endl; for(i=0;i72;i+) for(j=0;jCj+1) k=Cj; Cj=Cj+1; Cj+1=k; for(i=1;i=72;i+) coutCi ; system(pause); #includeusing namespace std;int i,b,c,d,e;float a;int geti(float c36,float a) if(a=c35) for(i=0;cia; b=geti(B,a); c=getjk(C,b); d=c/10; e=c%10; coutbendlcendldendl

28、e0;j-);char geti(float c36,float a) if(a=c35) for(i=0;civolmax) volmax=vol; float code Amp36=0.5,0.6,0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,2.126,2.2218,2.4812,2.55,2.9143,3.37

29、75,3.4,4.0476,5;unsigned char CD36=77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,44,52,43,51,33,50,42,41,32,40,31,30,22,21,20,11,10,0;int main() unsigned char volget; int voltcal; char display4,screen4; LcdInit(); display1=-2; PutStr(0,0,Please wait!); while(1) volget=TLC549_GetAD(); /AD数据获取

30、vppfun(volget); /峰值获取if(P1_5=0) delay(30); Ap=127.0/(volmax-128); /放大倍数获取 beishu=geti(Amp,Ap); /通过如倍数比拟获取适宜倍数 cod=CDbeishu; / 将倍数与引脚关系相对应 f=Ampbeishu; p1=cod/10; /获取P1引脚数值,CD4051选通 p2=cod%10; /获取P2引脚数值,CD4051选通 P1=p1; P2=p2; voltcal=f*100; display0= voltcal/100; display2=( voltcal%100)/10; display3= voltcal%10; for(i=0;i4;i+) screeni=displayi+48; PutStr(0,0,The Ampi is:); PutChar(i+6,1,screeni); 777675746673726571706415563546261536044521。485435133504241324031302221201110500

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号