课程设计(论文)-基于单片机的超声波测距仪.doc_第1页
课程设计(论文)-基于单片机的超声波测距仪.doc_第2页
免费预览已结束,剩余19页可下载查看

下载本文档

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

文档简介

目 录 第一章 绪论1 1.1 嵌入式系统简介1 1.2 研究背景及意义1 第二章 超声波测距仪简介 2 第三章 原理图设计3 第四章 pcb 设计.6 第五章 程序设计及作品展示. .7 5.1 程序设计框图7 5.2 作品展示8 5.3 源代码9 总结.19 1 第一章 绪论 1.1 嵌入式系统简介 随着电子技术的快速发展,特别是大规模集成电路的产生而出现的微型机,使现 代科学研究得到了质的飞跃,而嵌入式微控制器技术的出现则给现代工业控制领域带 来了一次新的技术革命。由嵌入式微控制器组成的系统,最明显的优势就是可以嵌入 到任何微型或小型仪器、设备中。 嵌入式系统被定义为:以应用为中心、以计算机技 术为基础、软件硬件可裁剪、适应应用系统,对功能、可靠性、成本、体积、功耗严 格要求的专用计算机系统1。嵌入式系统是将先进的计算机技术、半导体技术、电子 技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、 资金密集、高度分散、不断创新的知识集成系统。 嵌入式系统是以嵌入式计算机为技 术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、 成本、体积、功耗等综合性严格要求的专用计算机系统2。和通用计算机不同,嵌入 式系统是针对具体应用的专用系统,目的就是要把一切变得更简单、更方便、更普遍、 更适用;它的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的 硅片面积上实现更高的性能。嵌入式系统通常由嵌入式处理器、外围设备、嵌入式操 作系统和应用软件等极大部分组成 1.2 研究背景及意义 超声波是一种在弹性介质中的机械振荡,它是由与介质相接触的振所引起的,其 频率在 20khz 以上,是人耳听不到的一种声波,传播速度仅为光波的百万分之一, 纵向分辨率较高。 近年来,随着国民经济科学技术及工业自动化的发展,特别是移动机器人的自动 避障导航系统和视觉识别系统的需要,出现了许多识别方法和原理根据其信息载体 的不同可归纳为光学方法和超声波方法,但光学方法在某些领域有其局限性,相比 之下,超声波方法在这些方面具有突出的优点:愁啊黄色光波对色彩光照度不敏感, 可用于识别透明及漫反射差的物体(如玻璃抛光体);对外界光线和电磁场不敏感, 可用于黑暗有灰尘或烟雾电磁干扰性强等有毒的恶劣环境中;超声波传感器结构简 单体积小费用低信息处理简单可靠,易于小型化和集成化。因此,超声检测法已越 来越引起人们的重视,被广泛应用在液位测量机械手控制车辆自动导航物体识别等 方面特别是在空气测距中,由于空气中波速较慢,其回波信号中包含的沿传播方向 2 上的结构信息很容易检测出来,具有很高的分辨力,因此其准确度也较其他方法高。 第二章 超声波测距仪简介 在日常生产生活中,很多场合如汽车倒车、机器人避障、工业测井、水库液位测量 等需要自动进行非接触测距。而超声波是指频率大于 20khz 的在弹性介质中产生的机 械震荡波,其具有指向性强、能量消耗缓慢、传播距离相对较远等特点,因此常被用 于非接触测距。由于超声波对光线、色彩和电磁场不敏感,因此超声波测距对环境有 较好的适应能力,此外超声波测量在实时、精度、价格也能得到很好地折衷。发展方 向:由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经 常用于距离的测量,如测距仪和物位仪等都可以通过超声波来实现。利用超声波检测 往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工 业实用的要求,因此在移动机器人研制上也得到了广泛的应用。 超声波测距原理:超声波发射器向某一方向发射超声波,在发射时刻的同时开始计 时,超声波在空气中传播,途中遇到障碍物就立即返回来,超声波接收器收到反射波 就立即停止计时。超声波在空气中的传播速度为 340m/s,根据计时器记录的时间,就 可以计算出发射点距离障碍物的距离(s),即:s=340*t/2。这就是所谓的时间差测距 法。超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后 遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际 距离。由此可见,超声波测距原理与雷达原理是一样的。 由于超声波易于定向发射、方向性好、强度易于控制,且与被测物体不需要直接接 触的优点,是作为液体高度测量的理想手段。 3 figure1 测量原理 4 第三章第三章 原理图设计原理图设计 本设计采用 protel 99se 进行原理图设计,设计的原理图共一张,如下: 电源模块:采用 usb 供电的方式,对整个电路进行供电。 数码管显示电路:采用四位一体共阳数码管,实时显示距离,单位是厘米。 数码管驱动电路:驱动数码管实时显示测到的距离。 单片机:采用 stc89c52 单片机作为主控芯片,hc-sr04 超声波模块采集数据, 采集到的数据经处理器 stc89c52 处理之后通过数码管显示出来。stc89c52 是 stc 公司生产的一种低功耗、高性能 cmos8 位微控制器,具有 8k 在系统可编程 flash 存储器。stc89c52 使用经典的 mcs-51 内核,但做了很多的改进使得芯片 具有传统 51 单片机不具备的功能。在单芯上,拥有灵巧的 8 位 cpu 和在系统可 编程 flash,使得 stc89c52 为众多嵌入式控制应用系统提供高灵活、超有效的 解决方案。 5 figure2 stc89c52 引脚图 figure3 stc89c52 实物 超声波测距模块:在这个板子中采用的是 hc-sr04 超声波模块。 1:这个模块性能稳定,测度距离精确。但和国外的 srf05,srf02 等超声波 测距模块还是有一定的差距的。 2:主要的技术参数: 1)使用电压 : dc 5v 2)静态电流 : 小于 2ma 3) 电平输出 : 高 5v 4)感应角度 : 不大于 15 度 5)探测距离 : 2cm-450cm 6)高精度 : 可达 0.2cm 7)输入触发信号 : 10us 的 ttl 脉冲 8)输出回响信号 : 输出 ttl 电平信号,与射程成比例 3:hc-sr04 实物图: figure4 hc-sr04 模块实物图 6 4:接口定义 这个模块共有四个引脚(vcc,trigger,echo,gnd)。vcc 端接电源,trigger 端接触 发信号输入,echo 端接回响信号输出,gnd 接地。 5: 模块工作原理 1)采用 io 触发测距,给至少 10us 的高电平信号; 2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回; 3)有信号返回,通过 io 输出一高电平,高电平持续的时间就是超声波从发射 到返回的时间。测试距离=(高电平时间*声速)/2; 原理如下图所示: figure5figure5 模块工作原理模块工作原理 7 第四章 pcb 设计 原理图设计完毕后,采用 protel 99se 进行 pcb 板设计。pcb 设计主要按照以 下步骤实现: 1.根据元件资料、手册完成所需元器件的 pcb 封装。注意完成后,要以 1 比 1 的比 例打印进行核对。 2.确定 pcb 尺寸。 3.综合考虑按照使用习惯、走线难度,为原理图中的不同模块摆放元器件。元器件 分布尽量平均、有序。 4.连接走线。走线时,为了增加系统的稳定性,遵守以下原则:电源地线要隔离, 走线尽量以短、粗、少转角为准则。 5.铺地,并且铺数字地。 6.丝印调整,增强 pcb 可识性。 完成后的 pcb 为单层板如下图所示: figure6 pcb 图 8 第五章 程序设计及作品展示 5.1 程序设计框图 开开始始 初初始始化化定定时时器器0 0 复复位位超超声声波波模模块块 回回波波是是低低电电平平? ? 是是 否否 启启动动定定时时器器0 0 回回波波是是高高电电平平? ? 是是 否否 关关闭闭定定时时器器0 0 置置测测量量成成功功标标志志 默默认认成成功功 测测量量成成功功? ? 成成功功 失失败败 计计算算距距离离 显显示示距距离离 初初始始化化数数码码管管 超超声声波波测测距距主主流流程程图图 9 5.2 作品展示作品展示 10 5.3 源代码 头文件 coon_def.h,定义了一些延时函数。 #ifndef _coon_def_h_ #define _coon_def_h_ /当前主板类型 /#define _tianxiang_mcu_ 1 /#define _hxz_mcu_ 2 /#define _coon_mcu_ 3 /数据类型 #define uchar unsigned char /无符号字符型 #define uint unsigned int /无符号整型 /设备数据交互模式 #define parallel_mode 1 /并行模式 #define serial_mode 2 /串行模式 #define mcu_frequency_12 (12) /12m 处理器主频 /#define mcu_frequency_110592 (11.0592) /11.0592m 处理器主 频 #define need_ms_sleep 1 /需要毫秒级延时函数 #define need_us_sleep 1 /需要微秒级延时函数 #endif /_coon_def_h_ 头文件 coon_reg.h,是 51 微控制器的通用头文件,包含了一些定义和命 令。 /*- reg51.h header file for generic 80c51 and 80c31 microcontroller. copyright (c) 1988-2002 keil elektronik gmbh and keil software, inc. all rights reserved. -*/ #ifndef _coon_reg_h_ #define _coon_reg_h_ 11 /* byte register */ sfr p0 = 0x80; /p0 寄存器(可位寻址) sfr p1 = 0x90; /p1 寄存器(可位寻址) sfr p2 = 0xa0; /p2 寄存器(可位寻址) sfr p3 = 0xb0; /p3 寄存器(可位寻址) sfr psw = 0xd0; /程序状态字(可位寻址) sfr acc = 0xe0; /累加器(可位寻址) sfr b = 0xf0; /乘法寄存器(可位寻址) sfr sp = 0x81; /堆栈指针 sfr dpl = 0x82; /数据存储器指针 dptr 低 8 位 sfr dph = 0x83; /数据存储器指针 dptr 高 8 位 sfr pcon = 0x87; /电源控制及波特率选择 sfr tcon = 0x88; /定时器控制(可位寻址) sfr tmod = 0x89; /定时器方式选择 sfr tl0 = 0x8a; /定时器 0 低 8 位 sfr tl1 = 0x8b; /定时器 1 低 8 位 sfr th0 = 0x8c; /定时器 0 高 8 位 sfr th1 = 0x8d; /定时器 1 高 8 位 sfr ie = 0xa8; /中断允许寄存器(可位寻址) sfr ip = 0xb8; /中断优先级寄存器(可位寻址) sfr scon = 0x98; /串行口控制器(可位寻址) sfr sbuf = 0x99; /串行数据缓冲 /* bit register */ /* psw 程序状态寄存器 */ sbit cy = 0xd7; /进位/借位标志.表示是否有向高位的进位/借位 sbit ac = 0xd6; /辅助进位/借位标志.表示是否有向高 4 位进位/借 位 sbit f0 = 0xd5; /用户定义标志位 sbit rs1 = 0xd4; sbit rs0 = 0xd3; sbit ov = 0xd2; /溢出标志位 sbit f1 = 0xd1; /用户定义标志位 sbit p = 0xd0; /奇偶标志位.累加器 a 中 1 的个数,p 为 1 表示奇 数个 1 /* tcon 中断控制寄存器 */ sbit tf1 = 0x8f; /当计数器 t1 溢出时,由硬件将 tf1 置 0,当 cpu 响 应该中断后,由硬件将该位置 0 sbit tr1 = 0x8e; sbit tf0 = 0x8d; /当计数器 t0 溢出时,由硬件将 tf0 置 0,当 cpu 响应该中断后,由硬件将该位置 0 sbit tr0 = 0x8c; 12 sbit ie1 = 0x8b; /标示是否有外部中断 1 发生.如有外部中断发生则, 由硬件将该位置为 1,当 cpu 处理该中断后,由硬件将该位置 0 sbit it1 = 0x8a; /设置外部中断 1 的触发方式.1:表示负跳变触发, 0:表示的电平触发 sbit ie0 = 0x89; /标示是否有外部中断 0 发生.如有外部中断发生则, 由硬件将该位置为 1,当 cpu 处理该中断后,由硬件将该位置 0 sbit it0 = 0x88; /设置外部中断 0 的触发方式.1:表示负跳变触发, 0:表示的电平触发 /* ie 中断允许寄存器 */ sbit ea = 0xaf; /全局中断允许标志位:ea. ea0 所有中断不 允许, ea1 所有中断均允许 sbit es = 0xac; /串行中断是否允许. 1 表示允许 sbit et1 = 0xab; /定时器/计数器中断 1 是否允许. 1 表示允许 sbit ex1 = 0xaa; /外部中断 1 是否允许. 1 表示允许 sbit et0 = 0xa9; /定时器/计数器中断 0 是否允许. 1 表示允许 sbit ex0 = 0xa8; /外部中断 1 是否允许. 1 表示允许 /* ip 中断优先级寄存器 */ sbit ps = 0xbc; /串行口中断优先级. 1:表示高优先级 sbit pt1 = 0xbb; /定时器/计数器 1 中断优先级 sbit px1 = 0xba; /外部中断 1 优先级 sbit pt0 = 0xb9; /定时器/计数器 1 中断优先级 sbit px0 = 0xb8; /外部中断 0 优先级 /* p3 */ sbit rd = 0xb7; /读 sbit wr = 0xb6; /写 sbit t1 = 0xb5; /t/c1 sbit t0 = 0xb4; /t/c0 sbit int1 = 0xb3; /外中断 1 sbit int0 = 0xb2; /外中断 0 sbit txd = 0xb1; /串行发送 sbit rxd = 0xb0; /串行接收 /* scon */ sbit sm0 = 0x9f; / sbit sm1 = 0x9e; /串口工作方式 sbit sm2 = 0x9d; /什么鬼特征位,要用查书,或者等我以后解释,啊 哈 sbit ren = 0x9c; /串行接收允许 sbit tb8 = 0x9b; /收到的第九位 sbit rb8 = 0x9a; /要发的第九位 sbit ti = 0x99; /发送完成中断标志 13 sbit ri = 0x98; /接收完成中断标志 #endif /_coon_reg_h_ coon.h 头文件定义了一些延时函数 #ifndef _coon_h_ #define _coon_h_ #include “coon_def.h“ #ifdef need_us_sleep void delay_20us(); /延时 20us #endif #ifdef need_ms_sleep void delay_ms(uint pms); /延时指定毫秒时间 pms #endif #endif /_coon_h_ coon.c 文件实现了两个延时函数。 #include “coon.h“ #include #ifdef need_us_sleep /* * 原型: void delay_20us() 功能: 延时 20us * */ void delay_20us() #ifdef mcu_frequency_12 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); 14 _nop_();_nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); #endif #ifdef mcu_frequency_110592 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); #endif #endif #ifdef need_ms_sleep /* * 原型: void delay_ms(uint pms) 功能: 延时指定的毫秒时间 pms, 延时误差小于 1% 参数: pms 延时的毫秒数 * */ void delay_ms(uint pms) uchar i=0, j=0; #ifdef mcu_frequency_12 if( pms #include #include float distance=0; float distances10=0; /* * 原型: void get_distance() 功能: 将 10 次测量结果排序,取中间 4 次的平均值, 保存到 distance 变量中 * / void get_distance() int i=0, j=0, m=0; for(i=0; i9; i+) for(j=i; j10; j+) if( distancesj distancesi ) m = distancesi; distancesi = distancesj; distancesj = m; distance = distances3 + distances4 + distances5 + distances6; distance = distance / 2; 19 /* * 原型: void display_distance() 功能: 显示测试的距离 * / void display_distance() display_digitaltube(3, (int)distance / 100, 0); delay

温馨提示

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

评论

0/150

提交评论