网站大量收购闲置独家精品文档,联系QQ:2885784924

电子设计实验报告——“简易正弦波发生器”设计、调试报告.doc

电子设计实验报告——“简易正弦波发生器”设计、调试报告.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电子设计实验报告——“简易正弦波发生器”设计、调试报告

《“简易正弦波发生器”设计、调试报告》 第五组成员: 葛跃凯 3005204337 05级电信四 宋 怡 3005204349 05级电信四 韩 瑜 3005204308 05级电信三 一.设计目标 1.频率可调,分辨率为1Hz 2.频率由LED数码管显示并可按位置数 3.输出幅度:1Vp-p(1k ohm) 4.提高部分:即可能拓展频率范围(低端和高端),采用数字超取样技术,附带跟踪滤波器 二.所用元器件 1.微控制器:AT89C51 2.数模转换器:DAC0832 3.显示元件:LED数码管 4.输入元件:按键开关 5.开关电容滤波器:MAX293 三. 完成情况 1.软件自己独立完成,并用PROTEUS仿真成功,频率范围1HZ--2000HZ (可以得到设定频率的正弦波,通过控制按键,可以改变小数点的位置以及数值,从而改变频率的显示值). 2.硬件部分全部搭接完成,包括数码管内部构造的测试,印制板连线的关系,三极管类型的选择以及上拉电阻的阻值计算,熟悉各芯片引脚的功能并准确连接,整个电路的焊接。 3.调试部分还没有进行彻底,数码管有显示,但是按键按下后数值没有改变. 四.系统总体描述及系统框图 单片机产生时钟信号和数据信号,控制LED的位选和段选,单片机向D/A 输入数据,转换成模拟信号后有跟踪滤波器输出所需频率的正弦波,频率选择关系由时钟信号控制.频率可有按键置数并由LED 显示. 设置四个按键的功能分别是左移、右移、增加、减少。 系统框图如下:   Max293的截止频率 与输入时钟信号成正比例关系,如果使时钟信号与输出频率保持一定关系,就可以保证输出频率与时钟信号频率相同,达到跟踪滤波的效果。 六. 调试流程 软件部分调试过程如下: 1.常数及变量的设定 输出管脚设定: P0:8位正弦信号离散幅度值输出端,经上拉电阻后与dac0832连接。 P2:8为段选信号输出端,与4个led数码管相连。 P1:p1^0~p1^3为位选信号,分别控制四个led数码管,数码管从左向右看是个,十,百,千。P1^4是max293时钟信号输出端。 输入管脚设定: P3:p3^0~p3^4为按键信号输入端 其他:在程序中设定了数组uchar data datal[4],用来存储显示在数码管上的个,十,百,千位上的数字,而且使用十进制表示,所以每个元素的取值范围是0~9.认为这个数组是这个程序的关键。显示函数,键盘扫描函数都使用了这个数组,而且输出频率值也是由这个数组决定的。应该说正是这个数组决定了整个程序的设计方法。 改进过程: (1).define max_cl p1^4是错误的。p1^4不能使用define定义。正确的写法是使用sbit: sbit max_cl=P1^4; (2).开始时将数组datal[4]的类型定为code,但是程序总是出错。后来才发现code类型在程序中是不能被改变的,而datal在程序中是随着按键信号不断变化的,所以肯定是错误的。把它定义为data就可以了。 . 2延迟子函数的设计 延迟子函数是从参考资料1中找到的,延迟大约在1ms左右,不过并不准确。 3显示子函数设计 基本设计思想:利用单片机对四个led数码管同时控制其段选是不切实际的,没有4×8=32的管脚对其进行控制。最好的方法是将数码管的控制同一段的管脚相连,这样段选只需要8个管脚,再加入四个管脚输出位选信号,利用人的视觉暂留效应分时选通四个数码管,一共使用12个管脚。至于输出信号的过程如下:首先从datal[]取出某位应该显示的数字,然后用这个数字查段选表,从段选输出位输出的电平信号,位选是用循环逐次读取位选表的值。 最早的程序设计如下: void display(void) { uchar k; for(l=0;l500;l++) for(k=0;k4;k++) {disdata=seg[datal[k]]; /*disdata为数码管段选输出端*/ Bit=scan[k];/*bit为数码管位选输出端*/ if(k==flag) dp=1; delay(1); Bit=0xFF; /*一个都不选,防止显示混乱,不过还可以修改*/ } } 其中有两个错误 第一个错误是for(l=0;l500;l++) 这个语句是从参考资料1中看到的。在运行程序时发现在输出频率较高时程序对按键的反应很慢,长时间按键才能看见显示屏上数字的变化,

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档