




免费预览已结束,剩余23页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 目录目录 一、 概述2 1.1 课题研究的内容和意义.2 1.2 达到的技术指标2 二、系统总体设计4 2.1 系统设计方案论证(几种方案选一).4 2.2 系统总体框图及简要说明实现了的主要功能.4 三、 硬件电路设计6 3.1 元器件的选择.6 3.2 单片机控制模块13 3.3 温度数据采集模块14 3.4 显示模块14 3.5 温度数据无线传输电路15 四、软件设计17 4.1 主程序流程图17 4.2 其他功能流程图19 五、系统调试23 5.1 测试环境和方法23 5.2 测试结果23 5.3 出现问题及解决方法23 六、展望26 一、一、 概述概述 1.1 课题研究的内容和意义课题研究的内容和意义 本课题采用本课题采用 51 单片机对两个单片机对两个 dac0832 进行控制来实现进行控制来实现 16 位位 da 输出。因为高精度输出。因为高精度 dac 转换芯片价格比较贵,而且有时不易转换芯片价格比较贵,而且有时不易 购买,通过对购买,通过对 2 个个 dac0832 进行控制,可以构成高精度的进行控制,可以构成高精度的 dac, 既降低了成本又解决了实际需要。既降低了成本又解决了实际需要。 2 1.2 技术指标技术指标 设计并制作一个基于单片机的设计并制作一个基于单片机的 16 位位 da 输出,能够输出方波、输出,能够输出方波、 锯齿波、三角波、梯形波、正弦波这锯齿波、三角波、梯形波、正弦波这 5 种波形,在输出波形的同时种波形,在输出波形的同时 能够实现波形的调频和调幅,波形在示波器上显示。能够实现波形的调频和调幅,波形在示波器上显示。 本设计可以通过按键控制实现波形调频,通过改变本设计可以通过按键控制实现波形调频,通过改变 da 的基的基 准电压输入来实现调幅。准电压输入来实现调幅。 二系统的总体设计二系统的总体设计 2.1 系统设计方案论证系统设计方案论证 第一种方案:直接采用第一种方案:直接采用 16 位位 da 转换芯片,让单片机对转换芯片,让单片机对 16 位位 da 芯片进行控制,从而输出波形。芯片进行控制,从而输出波形。 第二种方案:采用第二种方案:采用 2 个个 8 位位 da 转换芯片转换芯片 dac0832,两个,两个 da 芯片采用双缓冲数据输入方式,让单片机先后控制这两个芯片采用双缓冲数据输入方式,让单片机先后控制这两个 da 芯片芯片 的数据输入,最后再一起把数据经的数据输入,最后再一起把数据经 da 转换器转换输出,从而输出转换器转换输出,从而输出 波形。波形。 最终采用第二种方案。最终采用第二种方案。 2.2 系统总体框图及简要说明实现了的主要功能。系统总体框图及简要说明实现了的主要功能。 3 实现了波形输出和波形的调频调幅。实现了波形输出和波形的调频调幅。 三、硬件电路设计三、硬件电路设计 3.1 元器件的选择:硬件电路用了元器件的选择:硬件电路用了 stc89c51rc 单单 片机,片机,8 位位 da 转换芯片转换芯片 dac0832,运放,运放 lm358,还还 有有 max232. 3.2 单片机控制模块单片机控制模块 单片机 两个 dac0832 按键示波器 4 3.3da 输出模块:输出模块: 5 软件设计 1.主程序流程图: 2.子程序独立按键检测及波形显示程序流程图 开始 单片机端口 初始化 调用 独立键盘扫描 子程序 调用 显示波形 子程序 6 是 否 否 是 否 是 否 是 否 开始 判断键 1 是否被 按下,是则置标 志位 a+;a5 置 0 判断 标志位 a 是否等于 0 检测键 2 是否按下 波形调频延时函数 时间标志位加大 检测键 3 是否按下 结束 波形调频延时函数 时间标志位减小 7 是 否 是 否 是 否 是 否 是 否 开始 判断标志 位 a=1? 判断标志 位 a=2? 判断标志 位 a=3? 判断标志位 a=4? 判断标志位 a=5? 结束 产生锯齿波 产生方波 产生三角波 产生正弦波 产生梯形波 8 总程序: #include #include #include #define uchar unsigned char #define uint unsigned int sbit da1wr1=p10; sbit da1wr2=p11; sbit da2wr1=p12; sbit da2wr2=p11; sbit ile=p13; sbit cs=p12; sbit key1=p34; sbit key2=p35; sbit key3=p36; sbit key4=p37; uint i=0; uint ih=0; 9 uint il=0; /uchar numdis=0; uchar a=0; uchar d=0; uchar c=10; uchar k; uchar num=3; uchar code tab256= 0x80,0x82,0x85,0x88,0x8b,0x8e,0x91,0x94,0x97,0x9a,0x9d,0xa0,0x a3,0xa6, 0xa9,0xac,0xaf,0xb2,0xb6,0xb9,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0 xcf, 0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xe a,0xec, 0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0x fd, 0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0x f1, 0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0 xd6, 10 0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0 xb1, 0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x8 9,0x86, 0x83,0x80, 0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d, 0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x 38,0x35, 0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x 18,0x16, 0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x 05,0x04, 0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00, 0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x 0a,0x0b, 0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x 22,0x25, 0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x 45,0x48, 0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x 6f,0x72, 11 0x76,0x79,0x7c,0x80 ; code unsigned char table2=0,255; void delayms(uint xms) uint i,j; for(i=xms;i0;i-) for(j=110;j0;j-); /*void delay( ) uchar i; for(i=0;i=10)num=1; if(c=20)c=5; if(key3=0) delayms(10); if(key3=0) while(!key3); c-; num-; if(num=0)num=10; if(c3)c=20; void display(uchar a) 14 if(a=1)/锯齿波 i=i+5; ih=i/256; il=i%256; p0=il; da1wr1=0; da1wr1=1; p0=ih; da2wr1=0; da2wr1=1; da1wr2=0; da1wr2=1; for(k=0;kc;k+) _nop_(); if(a=2)/方波 15 /da1wr1=0; /da2wr1=0; /da1wr2=0; p0=0; da1wr1=0; da1wr1=1; da2wr1=0; da2wr1=1; da1wr2=0; da1wr2=1; for(k=0;kc-2;k+) _nop_(); p0=255; da1wr1=0; da1wr1=1; da2wr1=0; da2wr1=1; da1wr2=0; da1wr2=1; for(k=0;kc;k+) _nop_(); 16 if(a=3)/ 三角波 if(d=0) i=i+5; if(i=65535)d=1; ih=i/256; il=i%256; p0=il; da1wr1=0; da1wr1=1; p0=ih; da2wr1=0; da2wr1=1; da2wr2=0; da2wr2=1; for(k=0;kc;k+) _nop_(); else 17 i=i-5; if(i=5)d=0; if(i=65535)d=1; ih=i/256; il=i%256; p0=il; da1wr1=0; da1wr1=1; p0=ih; da2wr1=0; da2wr1=1; da2wr2=0; da2wr2=1; for(k=0;kc;k+) _nop_(); if(a=4)/正弦波 18 if(+i=256)i=0; p0=tabi; da1wr1=0; da1wr1=1; da2wr1=0; da2wr1=1; da1wr2=0; da1wr2=1; for(k=0;kc;k+) _nop_(); if(a=5)/梯形波 if(d=0) i=i+5; p0=i; da1wr1=0; da1wr1=1; da2wr1=0; da2wr1=1; 19 da1wr2=0; da1wr2=1; if(i=255) p0=255; da1wr1=0; da1wr1=1; da2wr1=0; da2wr1=1; da1wr2=0; da1wr2=1; delayms(num); d=1; else i=i-5; p0=i; if(i=0) d=0; 20 da1wr1=0; da1wr1=1; da2wr1=0; da2wr1=1; da1wr2=0; da1wr2=1; void main() ile=1; cs=0; da1wr1=1; da2wr1=1; da1wr2=1; while(1) keyscan(); display(a); 21 系统调试 1.测试环境和方法 (1)软件测试 软件测试的环境是在 proteus 软件。首先是搭建电路,总电路 如下图所示。然后通过电路中的单片机下载编写好的程序,打开 示波器查看是否产生了预料的波形。调试过程先是用一块 dac0832 搭建电路并进行测试,之后进行两块 dac0832 搭建电 路实现 16 位数模转换测试。 22 (2)硬件测试 硬件是在万能板上进行焊接,先是焊接出一个单片机小系统, 包括电源电路,晶振电路,复位电路,串口下载电路,独立键盘 电路等。为了测试小系统是否正常工作,又加上了 led 灯电路进 行测试。焊接好电路后接到示波器上进行测试。 2.测试结果 (1)软件测试 在 proteus 软件中测试一块 dac0832 产生波形时可以正常显 示。而两块 dac0832 一起工作时便出现了问题。其中锯齿波, 方波能够正常显示,但三角波,梯形波,正弦波就出现了问题, 三角波和梯形波在显示时只能先显示波形上升部分,也就是先显 示一个上升的锯齿波,隔段时间再显示波形下降部分,也就是一 个下降的锯齿波。两个总是不能同时显示。 (2)硬件测试 首先单片机小系统通过 led 灯测试通过,单片机正常工作。 之后进行一块 dac0832 数模转换产生波形测试,发现无法产生 波形,都是一些杂波,而且电压的峰值很小,只有几毫伏,完全 达不到 5 伏的电压要求。两块 dac08332 一起工作也是一样。 3.产生问题及解决方法 (1)软件 两块 dac0832 一起工作时 proteus 软件中测试出现了问题。 其中锯齿波,方波能够正常显示,但三角波,梯形波,正弦波就 23 出现了问题,三角波和梯形波在显示时只能先显示波形上升部分, 也就是先显示一个上升的锯齿波,隔段时间再显示波形下降部分, 也就是一个下降的锯齿波。两个总是不能同时显示。但是产生波 形的程序使用的思想是一样的,为什么会出现这样的结果呢?通 过修改多次程序循环的方式后以失败告终,后来采用改变数模转 换加数字的幅度,发现,当数字提高到 257 时,波形就可以正常 输出了,此时相当于每次两块 dac0832 都是输出同样的转换数 据。因为加数字的幅度过大,所以失去了 16 位数模转换的意义, 但尝试过多种方法仍然无法解决,最后只能通过牺牲精度换取波 形的正常显示。而正弦波在使用正弦函数后无法产生预料的波形, 总是出现杂波。我们通过 visual c+6.0 测试正弦函数发现函数 可以产生正常的正弦数组,证明我们产生数模转换的数据是没有 问题的,但是把数据送去转换后出来的波形就是一些杂波,同上 面一样,我们又尝试用精度来换取波形的正常显示,发现是可以 的,但这种方法缺陷大,它牺牲了精度,使 16 位数模转化的意 义无法很好地体现。 (2)硬件 一块 dac0832 数模转换产生波形测试,发现除了方波能显示 (但电压不够) ,其他都是一些杂波,而且电压的峰值很小,只 有几毫伏,完全达不到 5 伏的电压要求。两块 dac08332 一起工 作也是一样。起初我们测试是不是单片机发送数据出现问题,于 是采用串口通信进行测试,发现单片机发出的数据是对的,排除 24 了一个可能。之后又测试是否 da 芯片、运算放大器芯片 lm385 与单片机连接是否有问题,于是对电路板进行大加修改, 用万能表进行测试,线路的连接都是没有问题的,但发现还是无 法产生波形,且电压还是很小。冲着电压很小这一点,我们用实 验室的恒压源进行测试,发现我们电压再升高时,波形依然出不 来。最后我们把目光转向了运算放大器。查阅大量资料后,发现 max232 芯片 2、6 管脚的电压是在+10,-10 左右,于是我们想 到把这个电压加在运算放大器电源管脚,经过测试后波形终于出 来了,电压虽然有所提高,提到了 3 点多伏,但还是达不到要求。 我们想到我们这个电路所使用的运算放大器芯片总共有两块 lm385 双运放。所以我们猜测是因为两块运放把电压分走了, 所以我们又加上了一块 max232 上去,每个运放接电源的两管 脚都接上 max232 的 2、6 脚。此时电压终于提了上来,符合要 求了。最后一个问题是波形不够准,很粗糙。我们开始怀疑是软 件有问题,但转念一想,仿真测试是通过的,但我们还是报着试 试的心态进行程序修改。考虑到 dac0832 转换时间的问题,所 以在程序上进行延时处理,发现波形还是一样粗糙。后来经过多 种尝试未果,就否决了软件问题,转向硬件方面。我们最后使用 买来的单片机实验板来给 dac0832 提供数据,发现此时波形光 滑了。终于找出了原因,于是重新焊电路板,省略了原先的 led 电路。电路板焊出来后波形正常产生了。至此遇到的问题基本解 决。 25 展望 在做项目的期间,碰到了某些波形无法正常输出的问题,虽然已 经解决了,但解决的方法缺陷大,在接下来的时间里,将学习汇编 语言,尝试用汇编看能否解决此问题。也会尝试使用其他
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 围栏工厂转让合同范本
- 简明家装合同范本
- 窗帘买外合同范本
- 租别人场地合同范本
- 教育加盟合同范本
- 用工分成合同范本
- 场外活动合同范本
- 布置结婚酒店合同范本
- 餐饮供应酱料合同范本
- 餐馀兼职合同范本
- 施工期间交通导行方案
- 《森林疗养基地建设技术导则》(T-CSF 001-2019)
- 《酒店客户关系管理 》课件-项目三 酒店客户关系管理制度
- 2024年中考英语试题分类汇编
- 《中长跑课件》课件
- 2025版高考化学一轮复习第九章有机化合物1甲烷乙烯苯煤石油天然气的综合利用强化训练1含解析新人教版
- 《肿瘤溶解综合征》课件
- 电瓶车以租代购协议书范文范本
- 人教版(2024新版)七年级上册数学第四章 整式的加减 单元测试卷(含答案)
- 小数乘除法竖式计算专项练习题大全(每日一练共23份)
- 幼小衔接-认识人体-课件
评论
0/150
提交评论