ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:1.47MB ,
资源ID:5044198      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5044198.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字信号发生器设计.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数字信号发生器设计.docx

1、数字信号发生器设计数字信号发生器设计、调试报告吴穹 3008204227 08级电信2班孟岱 3008204220 08级电信3班谢学典 3008204228 08级电信3班设计目标陈述1. 基本要求:对所输入的频率及幅值,信号发生器根据频率值决定采样点数合成一个数字信号,然后通过一个数模转换器,将数字域向模拟信号转变,最后经过缓冲放大、滤波、保护电路对模拟信号进行修正,从输出端得出一个完整的正弦波形、方波或者锯齿波。2. 参数要求:幅值在0到5V可调。输出端频率最大为100Hz。3. 实现功能:可用键位控制频率,输出模式,占空比,并用数码管显示频率,可显示3种不同波形(方波,正弦波,锯齿波)

2、。完成情况简述1 对输入的频率,设计的数字信号发生器都能输出一个完整的正弦波;方波和锯齿波的输出在仿真中可以实现,但最后放弃,具体理由在下面详细陈述。2 数字信号发生器达到5V,最大输出频率可达75Hz.3 键位能够调节频率的变化,分别控制百位,十位和各位,可以实现1hz的步进,按键还可以控制输出模式的变换和占空比(但最后放弃);数码管显示仿真能够实现,但在连接中由于某种原因没能实现(很遗憾)。系统总体描述及系统框图1 系统总体描述:整个系统以微控制器(单片机AT89C51)为核心,包括DAC转换模块,滤波器模块,按键模块和数码管显示模块。2 系统框图:软件框图:NYYN硬件图:各模块说明1.

3、 单片机控制模块:主函数先开启定时器,然后在一个循环语句中不断执行jisuan函数,数码管显示函数,和按键扫描函数。一旦定时器产生中断,就转去执行中断服务程序,然后返回到循环中继续执行。其中jisuan函数主要完成的功能是计算显示数字,还有给根据频率给计数器赋初值。2. 数码管输出模块:主要用到了74LS138 3-8译码器,和16个反相器,以及8个数码管。8位数码管分别显示占空比,输出波形的类型,以及频率(包括万位,千位,百位,十位,个位)。3. 按键模块:按键模块没有采用中断,而是利用循环不断进行中断扫描。 系统键盘实现工作原理如下:(1)检测键盘上是否有键按下:将行线送入低电平,列线送入

4、高电平。读入P1口的状态来判别。其具体过程如下:P1口输出0FH,即所有行线置成高电平,所有列线置成低电平,然后将P1口状态读入与0FH比较。如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入状态不全为1。(2)识别键盘中哪一个键按下:确认有键按下后,保存行扫描时有键按下时的状态X 。P1口输出F0H,进行列扫描,保存列扫描状态Y,取出键值Z=X|Y.例如第一行第一列有键按下,那么行扫描读入的状态为00001110,列扫描读入的状态为11100000,最后键值Z=11101110=EEH,然后转去执行相应的服务程序。(3). 按键还需要考虑连击和去抖动的问题,为了去抖动,在按键扫描程序

5、中如果感知有键按下,先等待10ms,然后再进行一次判断。为了避免连击,在确认有键按下后,需要延时0.5s才响应。这样虽然不能完全避免连击,但是一般操作不会有连击现象。我们也考虑过利用按键抬起的边沿来触发,但是鉴于本按键的设计,这样做着实比较难,所以就用此方法代替。4.DAC转换模块:用到的是TLC7528芯片,此芯片利用如下原理可以直接在输出实现电流量向电压量的转变,从而省去了原本需要的基于运放的转换电路。5.数字滤波器:数字滤波器采用的是MAX7400芯片。按照如上连接即可,clock输入时钟是根据INPUT频率的变化而变化的,要求是必须大于INPUT信号100倍的截止频率。我们最后选定cl

6、ock信号的频率为INPUT信号频率的120倍。两个0.1uF的电容起到稳压的作用。调试流程1. 根据目标编写程序,使用Proteus设计原理图并进行仿真。在电路板上焊接基本元器件(单片机仿真器串口,DAC转换芯片,3-8译码器,滤波器芯2. 实验室以单片机仿真器为基础,将基础程序输入单片机,用示波器观察输出波形,调节内置频率,找到频率显示范围。3. 根据波形以及参数修改后的显示状况和频率范围,修改源程序,反复调试。4. 基本功能调试好后,在电路板上焊接数码管,按键以及三极管反相器器件,连接相应线路。5. 调试按键控制下示波器输出情况,根据与期望的差距修改源程序及检查电路连接,以测试及优化键控

7、及显示输出。6. 调试完成,等待验收。遇到的问题及解决方法问题1:在Proteus仿真过程中,没有TLC7528这个DAC元件,影响仿真。 解决:在Proteus中找到了一个不带锁存器的DAC芯片,在其输出端加上锁存器,就可以实现与TCL7528相同的功能。问题2:波形显示设计阶段,只能达到很低的输出频率,没有超过10Hz。 解决:经过检查,源程序中初次设计的采样点是256个,要多次调用中断,每次调用中断又占用一定机器周期,使得采样周期过长。将采样点设为10个后,频率最大值大大增加。牺牲的采样精度在经过滤波器后可以得到解决,依然是较漂亮的正弦波。问题3:80C51的剩余管脚数不能满足对8个数码

8、管的控制。 解决:在80C51的P3.0-P3.2口加上了3-8译码器74LS138,将输出扩展即可满足要求。问题4:74LS138输出为高电平有效,而实验提供的数码管是共阳极的,需要低电平输入才能控制。 解决:在数码管阴极加上由三极管组成的8组反相器,即可为数码管提供低电平。问题5:数码管显示的问题,最初设计数码管显示输出8位片选和8为位选信号,但发现如果这样设计管脚不够用,所以最后选择用一个3-8译码器来减少单片机管脚的使用,但是我们有发现实验室提供的3-8译码器输出是低电平有效,而数码管恰恰又是共阴极的,所以只能再次加入反相器已达到显示效果,最后由于在显示电路搭接的过程中可能出现了些小失

9、误,虽然在仿真中能够实现数码管的显示,但是在最后的电路中没能实现(很是遗憾)。问题6:在编写软件时,开始希望能够实现四种输出波型,所以中断服务程序很长,经过调试后发现如果这样,那么最后正弦波的频率收到很大限制,所以最后无奈将其他三种波形的输出放弃掉。问题7:在软件的编写中,为了使中断服务程序能尽量的短,从而达到更大的极限频率,想分别对clock和INPUT信号使用中断,中断的周期为24的关系,此处解释一下为什么是24倍的关系:因为想要得到的clock和INPUT信号的频率为120倍的关系,而INPUT信号每个正弦信号周期采样10个点,而clock 信号一个中期只需采样2个点,这里相差了5倍的关

10、系,120/5=24为了不影响INPUT信号的正常输出,将INPUT信号的中断优先级设为最高,但是经过仿真,并没能达到预期的效果,clock信号输出正常,但是INPUT信号输出反而不正常,并不符合优先级的设定,这个问题到最后也没能找出解决的方案,所以只能采用一个中断的方法,在中断函数中在用判断的方法实现24周期的关系。问题8:尽管程序再优化,中断服务程序再简短,正弦波的频率也很难再高,出现了瓶颈,出现这种问题的原因在芯片上,要解决这个问题只能更换更高速的芯片。原理图及实物照片原理图实物照片程序流程图和源代码(附注释)#include sbit P3_0=P30;sbit P3_1=P31;sb

11、it P3_2=P32;sbit P3_3=P33;#define uchar unsigned charuchar code tab10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/0-9数字共阴极uchar code tab18=0X73,0x73,0x73,0x76,0x79,0x38,0x38,0x3f;/ PPP. HELLO共阴极uchar code tosin11=0x80,0xca,0xf9,0xf8,0xc7,0x7c,0x30,0x04,0x09,0x3d ;/正弦波数据uchar count=0,b=0,c=0,d

12、=0,e=0,i,k,tl,th;int ww=0,qw=0,bw=0,sw=5,gw=0,zkgw=0,zksw=5;/ww为万位数字,qw为千位数字,bw为百位数字, /sw为十位数字,gw为个位数字,zkgw为占空比个位数字,zksw为占空比十位数字int f,m,choice=1,zk=50; /f为频率变量,choice为波形类型选择变量,zk为占空比变量,默认占空比为50%unsigned long t,ff; / t为时间变量void delay10ms() /延时10ms程序 unsigned char i,j; for(i=20;i0;i-) for(j=248;j0;j-)

13、; /*键选择发波类型,1为正弦波,2为三角波,3为方波*/void key1(void) if(choice4)choice=choice+1; elsechoice=1;/*个位频率调整*/void key2(void) if(gw9) gw=gw+1;elsegw=0; /*十位频率调整*/void key3(void) if(sw9)sw=sw+1;elsesw=0;/*百位频率调整*/void key4(void) if(bw9)bw=bw+1;elsebw=0; /*千位频率调整*/void key5(void) if(qw9)qw=qw+1;elseqw=0;/*万位频率调整*/

14、void key6(void) if(ww5)ww=ww+1;elseww=0;/*方波占空比加大*/void key7(void) if(zk=1)zk=zk-1;elsezk=0;/*计算显示数字*/void jisuan(void)f=1000*qw+100*bw+10*sw+gw;ff=120*f;t=65536-1000000/ff;th=t/256;tl=t%256;ww=f/10000;f=f%10000;qw=f/1000;f=f%1000;bw=f/100;f=f%100;sw=f/10;gw=f%10;zkgw=zk%10;zksw=zk/10;/*显示*/void dis

15、play (void) /*P3_0=0; /此处为略去的初始化 P3_1=1; P3_2=0;P2=tabchoice;for(i=0;i=60;i+); P2=0x80;/小数点显示for(i=0;i=60;i+); P3_0=1; P3_1=1; P3_2=0;P2=tabww;for(i=0;i=60;i+); P3_0=0; P3_1=0; P3_2=1;P2=tabqw;*/for(i=0;i=60;i+);P3_0=1;P3_1=0;P3_2=1;P2=tabbw;for(i=0;i=60;i+);P3_0=0;P3_1=1;P3_2=1;P2=tabsw;for(i=0;i=6

16、0;i+);P3_0=1;P3_1=1;P3_2=1;P2=tabgw;/*for(i=0;i=60;i+); /此处为使数码管显示连续,去掉显示占空比的两位if(choice=3) P3_0=1; P3_1=0; P3_2=0;P2=tabzkgw; for(i=0;i=60;i+); P3_0=0; P3_1=0; P3_2=0; P2=tabzksw; for(i=0;i=60;i+); P3_0=1; P3_1=0; P3_2=0; P2=0x80;/小数点显示 for(i=0;i0;i-) delay10ms(); TR0=1; void main(void)TMOD=0X01;TR

17、0=1;ET0=1;EA=1;P3_3=0;while(1) jisuan(); display(); judge(); void time0_int(void) interrupt 1 /中断服务程序/*TR0=0;*/*if(choice=1) */ P3_3=P3_31; count+; if(count=24) count=0; P0=tosinb; if(b=9) b=0; else b+; /正弦波 /* */*else if(choice=2) /三角波 之所以去掉是因为终端服务程序太长,导致频率不能到达很高 if(c=128)P0=c; else P0=255-c; c+; else if(choice=3) / 方波 k=zk*256/100; d+; if(d=k)P0=0x00; else P0=0xff;else if(choice=4) /锯齿波 if(e=255)P0=255-e; else P0=0; e+; */TH0=th;TL0=tl;/*TR0=1;*/感谢老师的耐心阅读,有不对的地方还请老师斧正!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1