毕业设计(论文)-波形发生器设计.doc_第1页
毕业设计(论文)-波形发生器设计.doc_第2页
毕业设计(论文)-波形发生器设计.doc_第3页
毕业设计(论文)-波形发生器设计.doc_第4页
毕业设计(论文)-波形发生器设计.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 引言在电子行业的基础设施和制造等领域,波形发生器都是有效的通用仪器。它可以生成不同频率和幅度的大量信号,用来评估新电路的运行情况,代替时钟信号,对新产品进行制造测试,及用于许多其它用途。在教学中同样起着不可忽视的作用,所以我做了此设计。这个设计是基于信号发生芯片max038的多功能波形发生器。由max038、da转换,max414运算放大器、lcd12864显示、单片机以及外围电路构成的多波形发生器。2 系统设计2.1 设计要求(1)具有产生正弦波、方波、三角波等几种周期性波形的功能。(2)输出波形的频率范围为1hz2.4mhz,重复频率可调,频率步进间隔100hz。 (3) 输出波形的幅度范围05v(峰-峰值),可按步进0.1v(峰-峰值)调整。(4)输出显示波形的型类、周期和幅度的功能。(5)增加稳幅输出功能,当负载变化时,输出电压幅度变化3%。2.2 总体设计2.2.1 设计思路题目要求设计一个波形发生器,波形发生器的输出为正弦波、方波、三角波和锯齿波。设计中利用max038单片函数信号发生器的特性,产生各种波形。输入部分采用运算放大器对微弱信号进行放大使波形易于观察。控制部分用单片机和键盘组成的人机交互控制界面。采样部分采用运算放大器和a/d转换芯片。而显示部分则用带字库的液晶模块lcd12864,lcd12864可以直观显示波形的型类、频率、幅度和占空比等功能。2.2.2 设计选择(1)波形发生电路的设计选择 利用单片集成芯片实现函数信号发生器。这种信号发生器能产生多种波形信号且达到较高频率,且易于调试,成本低。所以从性能和制作成本考虑,本设计采用单片机控制键盘输入通过d/a转换控制单片函数信号发生芯片max038产生可调频率、幅度和占空比的波形信号。(2)开关电路的设计选择采用电子模拟开关,模拟开关是一种三稳态电路,它可以根据选通端的电平,决定输人端与输出端的状态。当选通端处在选通状态时,输出端的状态取决于输人端的状态;当选通端处于截止状态时,则不管输人端电平如何,输出端都呈高阻状态。模拟开关在电子设备中主要起接通信号或断开信号的作用。由于模拟开关具有功耗低、速度快、无机械触点、体积小和使用寿命长等特点。其内部电路组成和工作原理如图1图1 模拟开关的电路组成和工作原理本设计技术要求波型选择开关响应速度快,所以采用电子模拟开关,使用8选1模拟开关cd4051。(3)d/a转换器的设计选择 按照输出类型的不同可以分为电压输出型和电流输出型器件。 电压输出型d/a转换器采用内置的输出放大器来实现低阻抗的输出,没有放大部分的延迟,可以做到很高的速度且一般用于高阻抗负载的情况下。电流输出型d/a转换器则用得较少;按照接口类型的不同可以分为串行输出和并行输出器件。并行d/a转换器的转换速度快,但占用i/o多。串行d/a转换器输出建立时间相对于并行d/a转换器稍长,但芯片与cpu连接时使用引线少、电路简单,成本低;按照数字量的位数可以分为8位、10位、12位、16位等d/a转换器,位数越大分辨率越大但相应的成本也越高。综上所述,选择性价比较好的d/a转换器,本设计采用maxim公司的8位串行电压输出型d/a转换器max517。(4)信号采样电路的设计选择采用并行a/d转换芯片,并行方式一般在转换后可直接接收,转换时间快但使用芯片的引脚比较多;采用串行a/d转换芯片,串行方式所用芯片引脚少,封装小,在pcb板上占用的空间也小,但需要软件处理才能得到所需的数据。综上所述,结合本设计对数据采样的各项要求和单片机引脚的具体情况,采用ti公司的8位串行a/d转换芯片tlc549.通过单片机at89s52产生满足时序要求的输入/输出时钟,以及对a/d芯片的片选控制,完成对整个a/d转换过程的控制。tlc549具有8位分辨率模数转换,最大转换时间为17us,每秒访问和转换最多可达40000次,功耗低,可以满足本设计要求。(5)显示方式的设计选择采用带字库的液晶模块lcd12864显示。可以显示字符、图片,利用单片机直接驱动液晶显示模块,设计简单,且显示界面宽大美观舒适,耗电小。本设计要显示的内容较多,所以选择采用lcd12864实时显示波形的型类、频率、占空比和幅度等功能。(6) 电源模块的设计选择采用环形变压器,与普通变压器相比激磁能量和铁心损耗将减少25%,电效率高达95%以上,漏磁小,电磁辐射小,振动噪声小,无需另加屏蔽层来屏蔽电磁干扰,适合用在高灵敏度和易受高频影响的电子设备上。加上三端固定稳压器获得5v电源,+5v用lm7805输出,-5v用lm7905输出,先在变压器的输出段用一个用整流二极管组成的整流桥整流,再用电容滤掉高频成分,这样就可以获得一个纹波系数小、稳定的电压。综上所述,采用环形变压器三端稳压器电路。2.2.3 系统组成 经过以上方案的比较和论证,最终确定的系统组成框图如图2所示。单片机4*4键 盘电 路lcd12864显示电路频段 电容选择 电路波形发生电 路d/a转换电路输出信号放大电 路ad采样电路图2 系统组成框图3 单元电路设计3.1 max038波形发生电路模块max038的外围电路如下图所示,引脚a0、a1接单片机i/o口,引脚cosc接电容选择电路的x引脚,引脚ref是输出正2.5v电压,用作控制占空比的d/a转换器的基准电压输入,in引脚是频率控制引脚,通过一个25k电阻与d/a转换器输出端相连。 图3 max038外围电路图若负载是容性较大的负载,则max038的输出端与一个50的电阻相连。由于max038的输出信号为恒定的2v(p-p),且输出电流不高,所以必须依靠输出级的放大电路来提供足够的输出电压和电流,由放大电路和a/d转换芯片组成数据采样系统则可以实现数据采样。所以设计应该满足以下要求:(1) 首先,要求放大电路具有很高的频宽。因为输出信号最大基频为20mhz,三角波和矩形波的高次谐波成分很高,只有高频宽才能得到不失真的输出波形。(2) 其次,高频大信号放大要求放大电路有足够的输出电压转换速率。(3) 另外,要带动低阻负载,放大电路的电流输出能力也是个重要参数。要在100的负载上输出6v信号,则放大器至少要有60ma的连续电流输出能力。3.2 cd4051模拟开关电路cd4051 开关电路见图4。cd4051相当于一个单刀八掷开关,开关接通哪一通道,由输入的3位地址码abc来决定。其真值表见表1。 “ en”是禁止端,当 “en”=1时,各通道均不接通。此外,cd4051还设有另外一个电源端vee,以作为电平位移时使用,从而使得通常在单组电源供电条件下工作的 cmos电路所提供的数字信号能直接控制这种多路开关,并使这种多路开关可传输峰峰值达15v的交流信号。图4 cd4051模拟开关电路表1 真值表输入状态接通通道encba0000“0”0001“1”0010“2”0011“3”0100“4”0101“5”0110“6”0111“7”1均不接通3.3 d/a转换电路模块d/a转换电路由2片max517及外围电路组成,分别与max038的in引脚和dadj引脚相连,如图5,其中与dadj相连的d/a转换器是双极性输出。为了保证d/a转换器总线在空余方式为高电平,所以接上拉电阻。另max517a为调节占空比输出,所以要用双极性接法,运算放大器采用的是max414是美信公司的4路输出精密运算放大器,。d/a模块转换选用2路用于双极性输出正负电压的转换。 图5 d/a转换电路模块图3.4 输出信号采样电路模块设计输出信号采样电路模块设计由一片max414和tlc549构成,分别与单片机p3.5、p3.6和 p3.7脚连接,如图6,其中max414将输出模拟信号放大,模拟输入信号(analog in)经过tlc549内部采样/保持器至8-bit逐次比较式a/d转换器。片选控制端(cs_,低有效)和输入/输出时钟端(i/o clock)与独立的内部系统时钟通过内部逻辑控制电路,实现外部接口与内部的数据传输,通过单片机从而实现波形幅度的控制。如图6 输出信号采样电路模块设计3.5 lcd12864显示电路设计采用带字库的点阵图形液晶模块lcd12864,可以显示汉字、字符和图形等。且功耗很低,显示效果美观。lcd12864的d0d7接单片机p0口,rs、rw和lcden分别接p2.0、p2.1和p2.2口。可调电阻rp21用来调节lcd显示屏的亮度。psb接高电平,表示这里采用的是并行数据控制方式。图7 lcd12864显示电路设计3.6 4*4矩阵键盘输入电路模块 输入电路模块采用4*4矩阵键盘输入,如图8,行列分别与单片机的p1口连接。按键设置在行、列线的交点上,行、列线分别连接到按键开关的两端。对键盘的工作过程可分两步:第一步是cpu首先检测键盘上是否有键按下;第二步是消抖;第三步是识别是哪一个键按下。检测键盘上有无键按下可采用查询工作方式、定时扫描工作方式和中断工作方式。 图8 4*4矩阵键盘输入电路 3.7 电源模块的设计电源电路是用环形变压器三端固定稳压器获得5v电源,+5v用7805输出,-5v用7905输出,环形变压器的电压经过三端固定稳压器,再经整流桥整流,用电容滤掉高频成分。如图9: 图9 5v稳压电源电路4 系统软件设计及分析4.1 系统流程分析4*4键盘输入全部用作功能键,键盘具体划分如下:第一行主要功能是占空比调节,有微调加1、粗调减5、粗调加5、占空比50%;第二行主要功能是频率的调节,有频段选择,微调加1,粗调加10,微调减1;第三行实现其他功能,有波形选择,幅度刷新。先输入功能键然后按照要求执行程序。其中d2是选择max038产生的波形,d1是计算和输出频率,d0是控制波形占空比,单片机通过cd4051控制频段范围,在选择的频段范围内通过设定的按键步进调节就可以得到需要的信号。频率数值设定在102.4mhz范围内直接送到lcd12864显示。表2 波形选择关系波形选择逻辑关系表数值a0a1输出波形000方波,脉冲波1x1正弦波211三角波,锯齿波表2 键盘界面键盘操作界面微调+粗调-粗调+占空比50%频段微调+粗调+微调-波形幅度刷新首先由=/,电流由0.5v5v通过电阻r12=25k,得到20200a的电流,抛开重叠的频段不计,表3 max038频率范围及电容关系图 在d/a转换部分和波形发生部分则根据以下公式计算:控制频率d/a转换器公式: 控制占空比d/a转换器公式: 电路的振荡频率为:=(1-0.2915)=(1-0.2915)/波形占空比为: 由于电路原因以及程序问题,设计的波形发生器产生的波形的占空比、频率、振幅等不可能如理论那么准确。 4.2 主体程序流程图开 始初 始 化功能 lcd显示 键盘 扫描频率调制波形选择占空比调制显示数值范围是否在10%90%max038的a0、a1选择波形计算d/a所需要数据d0选择8个频段之一计算d/a所需要数据d1单片机输入d0串行数据单片机输入d1串行数据采集a/d所需要数据d2单片机输入d2串行数据图 10 程序流程图4.3 部分程序4.3.1 d/a转换原理程序/*控制频率的串行max517的函数*/* 起始条件子函数 */void start0(void)sda0 = 1;scl0 = 1;_nop_();sda0 = 0;_nop_();/* 停止条件子函数 */void stop0(void)sda0 = 0;scl0 = 1;_nop_();sda0 = 1;_nop_();/* 应答子函数 */void ack0(void)sda0 = 0;_nop_();scl0 = 1;_nop_();scl0 = 0;/* 发送数据子程序,ch为要发送的数据 */void sendda0(uchar ch)uchar bitcounter = 8; /位数控制uchar tmp; /中间变量控制dotmp = ch;scl0 = 0;if (tmp&0x80)=0x80)/如果最高位是sda0 = 1;elsesda0 = 0;scl0 = 1;tmp = ch1;/左移ch = tmp;bitcounter-;while(bitcounter);scl0 = 0;/* 串行da转换子函数 */void dacout0(uchar ch)start0();/ 发送启动信号sendda0(0x58);/ 发送地址字节ack0();sendda0(0x00);/ 发送命令字节ack0();sendda0(ch);/ 发送数据字节ack0();stop0();/ 结束一次转换4.3.2 占空比调节程序/*控制占空比的串行max517的函数*/* 起始条件子函数 */void start1(void)sda1 = 1;scl1 = 1;_nop_();sda1 = 0;_nop_();/* 停止条件子函数 */void stop1(void)sda1 = 0;scl1 = 1;_nop_();sda1 = 1;_nop_();/* 应答子函数 */void ack1(void)sda1 = 0;_nop_();scl1 = 1;_nop_();scl1 = 0;/* 发送数据子程序,ch为要发送的数据 */void sendda1(uchar ch)uchar bitcounter = 8; /位数控制uchar tmp; /中间变量控制dotmp = ch;scl1 = 0;if (tmp&0x80)=0x80)/如果最高位是sda1 = 1;elsesda1 = 0;scl1 = 1;tmp = ch1;/左移ch = tmp;bitcounter-;while(bitcounter);scl1 = 0;/* 串行da转换子函数 */void dacout1(uchar ch)start1();/ 发送启动信号sendda1(0x58);/ 发送地址字节ack1();sendda1(0x00);/ 发送命令字节ack1();sendda1(ch);/ 发送数据字节ack1();stop1();/ 结束一次转换4.3.3 波形选择程序/*/void boxing(uchar boxing) /*波形选择*/ switch(boxing) case 0:a0=0;a1=1;send_str(0x93,name04,6);break; /正弦波 case 1:a0=0;a1=0;send_str(0x93,name05,6);break; /方波 case 2:a0=1;a1=0;send_str(0x93,name06,6);break; /三角波 case 3:a0=1;a1=0;send_str(0x93,name07,6);break; /矩齿波 case 4:a0=0;a1=0;send_str(0x93,name08,6);break; /脉冲 default:break; 4.3.4 频段选择程序/*/void pinduan(uchar pinduan) /*单位控制频段选择函数*/ switch(pinduan) case 0: y2 = 0;y1 = 0;y0 = 0;send_num(0x85,0,1); break; /*选择100uf电容*/ case 1: y2 = 0;y1 = 0;y0 = 1;send_num(0x85,1,1); break; /*选择10uf电容*/ case 2: y2 = 0;y1 = 1;y0 = 0;send_num(0x85,2,1); break; /*选择1uf电容*/ case 3: y2 = 0;y1 = 1;y0 = 1;send_num(0x85,3,1); break; /*选择0.1uf电容*/ case 4: y2 = 1;y1 = 0;y0 = 0;send_num(0x85,4,1); break; /*选择0.01uf电容*/case 5: y2 = 1;y1 = 0;y0 = 1;send_num(0x85,5,1); break; /*选择1000pf电容*/case 6: y2 = 1;y1 = 1;y0 = 0;send_num(0x85,6,1); break; /*选择100pf电容*/case 7: y2 = 1;y1 = 1;y0 = 1;send_num(0x85,7,1); break; /*选择20pf电容*/default:break;4.3.5 键盘扫描程序/*/键盘扫描uchar keyscan(void)uchar temp;p1=0xfe;temp=p1;/读p3temp=temp&0xf0;delay1ms(25);if(temp!=0xf0)delay1ms(100); /去抖if(temp!=0)switch(temp)case 0xe0:num=table0;flag=1;break;case 0xd0:num=table1;flag=1;break;case 0xb0:num=table2;flag=1;break;case 0x70:num=table3;flag=1;break;while(temp!=0xf0)temp=p1;temp=temp&0xf0;p1=0xfd;temp=p1;/读p3temp=temp&0xf0;if(temp!=0xf0)delay1ms(50); /去抖if(temp!=0)switch(temp)case 0xe0:num=table4;flag=1;break;case 0xd0:num=table5;flag=1;break;case 0xb0:num=table6;flag=1;break;case 0x70:num=table7;flag=1;break;while(temp!=0xf0)temp=p1;temp=temp&0xf0;p1=0xfb;temp=p1;/读p3temp=temp&0xf0;if(temp!=0xf0)delay1ms(50); /去抖if(temp!=0)switch(temp)case 0xe0:num=table8;flag=1;break;case 0xd0:num=table9;flag=1;break;case 0xb0:num=table10;flag=1;break;case 0x70:num=table11;flag=1;break;while(temp!=0xf0)temp=p1;temp=temp&0xf0;p1=0xf7;temp=p1;/读p3temp=temp&0xf0;if(temp!=0xf0)delay1ms(50); /去抖if(temp!=0)switch(temp)case 0xe0:num=table12;break;case 0xd0:num=table13;break;case 0xb0:num=table14;break;case 0x70:num=table15;break;while(temp!=0xf0)temp=p1;temp=temp&0xf0;return (num);4.3.6 频率显示部分程序/*频率显示*/void display_pinlv(void)ulong f1,f2;uint f3,f4;if(f=1000)f1=(ulong)f/1000;f2=(ulong)f%1000;send_n1(0x8b,f1,4);send_n1(0x8d,f2,3);send_str(0x8f,pinlv0,2);void dispaly(uchar key)switch(key)case 0x01:zhankb=zhankb+1;if(zhankb255) zhankb=128;dacout1(zhankb);send_n(0x9e,zhankb,3);flag=0;break;case 0x02:/占空比加5zhankb=zhankb+5;if(zhankb255) zhankb=128;dacout1(zhankb);send_n(0x9e,zhankb,3);flag=0;break;case 0x03:/占空比减5zhankb=zhankb-5;if(zhankb=0&pinlv256) pinlv-; /频率微减if(pinlv=0&boxing1=20)&(f=50)&(f=600)&(f=4000)&(f=20000)&(f0;i-) wr_data(0x20);wr_data(0);elseshujuchuli(dat);for(i=n;i0;i-)if(ai-1=0)&hz) wr_data(0x20);else wr_data(tabai-1);hz=0;void send_n(uint addr,unsigned int dat,uchar n)uchar i;wr_com(addr);shujuchuli(dat);for(i=n;i0;i-)wr_data(tabai-1);void send_n1(uint addr,ulong dat,uchar n)uchar i;wr_com(addr);shujuchuli(dat);for(i=n;i0;i-)wr_data(tabai-1);/显示一串数void send_str(uchar addr,uchar code *p,uchar count)uchar i=0;wr_com(addr);for(i=0;icount;i+)wr_data(*p+);4.3.8 数据采样部分程序 /*/ /*采样部分的程序*/*/tmp = 0;cs = 1;/ /cs置高,片选无效ioclk = 0;/ i/o clk置低cs = 0;/ 片选有效_nop_();/ 执行一步空指令起到延时至少1.4us的作用for (count=0;count8;count+)ioclk = 1;/ i/o clock置高if (dataout) tmp+;tmp = tmp1;/ 左移一位ioclk = 0;/ i/o clock置低cs = 1;/ /cs置高,片选无效dataresult = tmp;for(i=0;i3;i+)/ 适当延时超过17us _nop_();v=(float)(dataresult*5/256); 5 系统调试及数据处理5.1 电路的调试整个系统硬件的调试有以下:(1)电源电路采用环形变压器,减少电磁干扰,减少纹波系数获得较纯净和稳定的电源。(2)显示电路中,为了获得较好的亮度,加上了一个10k的精密可调电阻,这样可以调节液晶模块的亮度。(3)d/a转换电路中,为了保证d/a转换器总线在空余方式为高电平,两个da转换器的数据线和时钟线都接上拉电阻与电源相连,并加一个去耦电容。(4)max038的模拟电源和数字电源需要分开,供电时加上电容去耦,电源线相对长时要加上大电容滤波;同样模拟地和数字地的处理也要慎重,pcb板上要用低阻地平面分别将模拟地和数字地连接,再在某点连接两地。(5)信号线要尽量布在焊接面,这样可减少信号间的干扰,这一点对系统的性能尤为重要,因为系统性能受max038的in、fadj、cosc、dadj等引脚周围的分布电容及信号环境变化的影响特别敏感。此外这些引脚线的长度和面积应尽量短小。(6) 在信号采样电路的的运算放大器的1脚和2脚并接一个330p的钽电容c80,这样,在高频的时候消除自激现象,波形得到明显改善。(7)在高频线路中,电源去藕是一个关键问题。整个线路往往会由于电源引线而产生电路谐振,当有大的瞬时变化时,也会产生尖峰干扰信号。消除这2种现象的有效办法就是在片子的电源管脚与地之间加上适当的去耦电容。 5.2 系统软件调试系统软件调试是通过程序调节从而使电路系统更好的工作,以期得到更接近准确的数据,从而使电路工作输出更精确,更接近实际。本设计主要有以下软件调试:(1)在频率处理时,由于电路本身设计不足和外界的干扰,致使lcd12864显示的频率与用数字示波器观察得到的频率有一定的差别,但通过一组组的数据观察和比较,我们发现了其中的误差规律,一次次对数据进行记录、统计、分析、总结,进行了一次次的纠正,从而减小了误差。(2)在d/a转换控制占空比的过程中,由于要取得双极性输出,需要用到两个运算放大器,在这过程中会损耗部分电压,这就使得理论计算得到的电压在输入max038的dadj引脚时不准确。因此占空比的输出也会有误差,为了减少误差需要在软件调试中加上所测得的损耗的电压,这样达到输出的占空比误差减小到最低。(3)延时消除键抖动,就是说一旦发现有键按下,就延时25ms以后再测按键的状态。这样就避免按键发生抖动的那一段时间,使cpu能可靠的读按键的状态。键盘扫描中应防止误按按键的情况。这种情况的发生通常是由于键扫描速度和键处理速度较快,当某一个按下的键还未松开时,键扫描程序和键处理程序就执行了。为了防止发生这种情况,在键扫描程序中不仅要检测是否有按键按下,在有键按下的情况,作一次键处理,而且在键处理完毕后,还应检测按下的键是否松开,只有当按下的键松开以后,程序才往下执行。这样每按一个键,只作一个键处理,使两者达到同步,消除按一次按键有多次键值输入的错误情况。键稳定键按下前沿抖动前沿抖动图11 键合断时的电压抖动5.3 数据处理硬件电路完成后,对数据进行整理,用数字示波器显示的频率和振幅作为真实值(a0),波形发生器lcd12864显示的频率和振幅作为测量值(ax),对两者进行观察、记录、统计、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论