检测系统综合课程设计--液位测控系统的设计(编辑修改稿)内容摘要:

键盘设计 键盘有两种最基本的组成形式:独立式键盘和矩阵式键盘。 矩阵式键盘的工作过程要比独立式键盘复杂得多,适用的场合也比较广。 由于本次课程设计不需要复杂的按键设置,故在设计中我采用的是独立式键盘。 如下图所示: 图 键盘设计 16 如图所示,设计中采用四个按键来控制液位。 它们分别与单片机 AT89C51 的 、 、 口连接。 因为是实时液位显示,“设置”可以用来设置 时间,“ +”、“ — ”用来调节时间,一旦时间调整完毕按下“确认”即可。 它不仅可以显示当前液位高度,还可以查看历史水位,只需调节时间即可。 时钟信号设计 由于要涉及到实时显示,所以需要设计一个时钟信号输出模块用以显示。 其电路图如下所示: 图 时钟信号图 DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗的实时时钟芯片,附加 31字节静态 RAM,采用 SPI 三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和 RAM 数据。 实时时钟可提供秒、分、时、日、 星期、月和年,一个月小与 31 天可以自动调整,具有闰年补偿功能。 在本次设计中时钟信号用来显示具体时间,以方便查询历史数据和记录实时数据。 ( 1)确定算法或算法思想。 算法是指解决问题的方法和步骤。 ( 2)根据算法画出程序流程图。 有了流程图后可以从图上检验算法的正确性,减少出错的可能,同时也可以是编程时思路更加清晰。 本次设计的程序框图如下: 17 否 是 图 程序流程图 ( 3)根据流程图编写程序。 这是本次设计的最重要的一步。 首先要进行定义,程序开始后得进行初始化,编写主程序以及子程序,知道程序结束。 ( 4)上机调试运行程序。 在本次设计中所用的是 keil 软件进行程序调试的。 通过 keil编译通过后会生成一个 hex 文件,将该文件写进单片机 AT89C51 中就可进行仿真了。 但是通过编译的程序并不能说明它是 正确的,只能说它没有语法错误,之余是否能达到预期效果,还得通过进一步的实验才能完成。 在本次课程设计中,我采用的是 Keil 软件仿真,具体介绍如下: 开 始 LCD 初始化 清 屏 ADC0808 初始化 液位采集 LCD 显示 液位 最大值 电机保持 返回 电机启动 液位采集显示18 ( 1) 建立一个新工程。 ( 2) 然后选择要保存的路径,输入工程名字,比如保存到桌面新建文件夹里,工程名字为 text,然后保存。 ( 3) 选择所用的单片机 AT89C51。 ( 4) 单击文件菜单,在下拉菜单中单击“新建”选项。 其中文件的扩展名应该为“ .c”,然后再保存。 ( 5) 在编辑菜单界面,单击“ Target1”前面的“ +”号,然后在“ Source Group1”单击右键即可。 ( 6) 写入源程序,单击“ P 工程”菜单,再在下拉菜单中单击“ B 构造目标”,开始编译源程序,构造目标。 ( 7) 编译成功后,开始对程序进行调试。 ( 8) 单击“ P 工程”菜单,在下拉菜单中单击“目标 Target1 属性”,对所需属性进行相应的修改后即可对程序进行编译。 任何系统都存在误差,所谓的“真值”只是一个理想值,在实际中并不存在,我们只能无限的接近它,而并不能达到。 因此,对一个测控系统而言,精度是一个主要指标。 在本次课程设计中,影响液位测控 系统的精度的因素除了干扰和噪声外,最重要的因素就是相应电子器件的处理位数精度的不足,如 ADC0808 的分辨率只有 8 位。 一下则是本次液位测控系统的各种误差来源的分析和相应的解决方法: ( 1) 被测 液体的密度产生的误差:因为系统中高度的控制是和所测量液体的密度具有一定的比例关系的,当液体的密度不均匀时或者出现误差时,通过标度变换后误差就会直接影响到液位的高度上,所以测量时应该对所测液体的密度进行多次的实验验证。 ( 2)传感器误差:在本次课程设计中我选用的传感器是 FYC— 3 型浮子式液位传感器。 它的测量精度 有限,为 % 量程  1cm。 这样就不可避免的会产生误差。 要克服或者减少误差,就得选用精度更高的传感器,如在本次实验中由于水箱不是很高,量程也不需要太大,所以可以选择量程小的,这样就在一定程度上提高了精度。 ( 3)工业现场的电场和磁场的干扰:因为本次液位测控系统是应用到工业当中去的,所以工业当中存在电场和磁场的会对系统产生一定的干扰(如交变磁场会产生感应电动势),为了抑制器两种干扰都系统的影响,可以采用 如下的方法:屏蔽或去除干扰源,采19 用屏蔽电缆技术,采用光电隔离耦合器隔离技术等。 ( 4) A/D 转化器和单片机位数产生的误差:当传感器信号经过放大处理后进入到 AD转换器时,因为本次采用 8 位的 AD 转换器,它的分辨率为 1/ 82。 所以其转换精度会对系统产生一定的影响,同时单片机在处理数据时,在标度变换中进行计算时因为对数据进行了取整,约去了余数部分,所以也会对系统带来一定的误差。 这次为期四周的课程设计终于要落下帷幕了。 在这说长不长,说短不短的四周时间里 ,我学到了很多。 这次课程设计是监测系统综合课程设计,在没有做以前,觉得这个课程设计只是对四年来所学的知识做一个单纯总结 ,但是通过这次做课程设计我发现自己的看法有点太片面。 通过 这次 监测系统综合课程设计 使我明白了自己原来知识还比较欠缺。 自己要学习的东西还太多,以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。 通过这次课程 设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。 在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方 式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。 在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。 而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。 也许 这个 课程 设计做的也不太好,但是在设计过程中所学到的东西是这次 课程 设计 中 最大 的 收获和财富,使我终身受益。 在此要感谢 黎水平老师 对我 的悉心 指导, 黎老师在我选择设计方案时给我指明了方向。 有了方向,以后的路就好走多了。 同时 也使我们的同学关系更进一步 得到了提升, 同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法 ,这样使我们对一些知识点的理解更透彻, 所以在这里 也要 感谢帮助我的同学。 总之, 在这次课程设计中遇到了很多困难,同时也克服了很多困难,在解决困难的过程中我们享受了很多、学到了很多。 通过这次课程设计我对“纸上得来终觉浅,绝知此事要躬行。 这句古训体会更深了。 实践出真知。 20 【 1】汪德彪 .CS51 单片机原理及接口技术 .北京:电子工业出版社, 【 2】赵燕 .传感器原理及其应用 .北京:北京大学出版社, 2020 年 2 月 【 3】 康华光 .模拟电子技术基础 .北京:高等教育出版社, 2020 年 4 月 【 4】何桥 .单片机原理及应用 .北京:中国铁道出版社, 2020 年 【 5】何小艇 .电子系统设计(第三版) .浙江:浙江大学出版社, 2020 年 8 月 【 6】张朝辉 .检测技术及应用 .北京:中国计量出版社, 2020 年 10 月 【 7】李朝青 .单片机原理与接口技术 .北京:北京航空航天大学出版社, 1999 年 【 8】李刚 .林凌 .现代测控电路 .北京:高等教育出版社, 2020 年 1 月 【 9】谭浩强 .C 语言程序设计 .北京:清华大学出版社, 2020 年 7 月 【 10】 杨龙麟 .电子 测量技术 .北京:人民邮电出版社 2020 年 7 月 【 11】张国雄 .测控电路 .北京:机械工业出版社 .2020 年 【 12】陈守仁 .自动检测技术及仪表 .北京:机械工业出版社 .1998. 21 附录 1 液位测控系统完整程序 /* 文件 DS1302 的一些命 令定义 */ ifndef _DS1302_H define _DS1302_H define uchar unsigned char /* register address */ define DS1302_sec_add 0x80 //秒寄存器地址 define DS1302_min_add 0x82 //分寄存器地址 define DS1302_hr_add 0x84 //时寄存器地址 define DS1302_date_add 0x86 //日寄存器地址 define DS1302_month_add 0x88 //月寄存器地址 define DS1302_day_add 0x8A //星期寄存器地址 define DS1302_year_add 0x8C //年寄存器地址 define DS1302_control_add 0x8E //控制寄存器地址 define DS1302_charger_add 0x90 //涓细充电管理寄存器地址 define DS1302_clkburst_add 0xBE //时钟突发模式寄存器地址 /* 函数声明 */ void delay_DS1302(uchar)。 //延时函数 void DS1302_write_data(uchar ,uchar)。 //写一个字节到 DS1302 uchar DS1302_read_data(uchar)。 //从 DS1302 读一个字节 void DS1302_write_time(void)。 //写入当前时间到 DS1302 void DS1302_read_time(void)。 //从 DS1302 读取当前时间 22 void DS1302_initial(void)。 //DS1302 初始化 void Time_to_Str(void)。 //实时时间转换为液晶字符 endif include include define uchar unsigned char uchar Time_Buffer1[3]={12,00,00}。 //时、分、秒 uchar Time_Buffer2[3]。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。