DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2448|回复: 1
打印 上一主题 下一主题

[待整理] 超声测距模块HCSR04的超声波测距仪设计

[复制链接]
跳转到指定楼层
楼主
发表于 2015-5-1 19:09:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
引言
  随着国民经济的迅速发展,超声波在机械制造、石油化工、航空航天等领域发挥着越来越重要的作用。
  超声波测距作为一种非接触式距离测量方法,具有不受外界光及电磁场等因素影响的优点,实现电路简单,成本低;同时,还具有易于定向发射、方向性好、对人体伤害小等特点。上述优势使得与超声波测距领域相关的仪器设备在数据处理、检测性能和工程设计系统化等方面有了更大的发展空间。
1 总体设计
  本系统利用三星公司的S3C2410及超声波测距模块HCSR04构造了一个嵌入式系统平台。整个系统由3部分组成:底层硬件平台、系统软件层和应用软件层。系统硬件结构如图1所示。


图1 系统硬件结构图
  超声波测距仪的软件层由驱动及应用程序组成。其中,应用程序包括数据采集程序及图形用户界面;而驱动程序的设计是本系统的重点。
2 硬件设计
2.1 S3C2410处理器
  S3C2410处理器是三星公司的一款基于ARM920T内核的16/32位RISC嵌入式微处理器。ARM920T由ARM9TDMI、存储管理单元(MMU)和高速缓存3部分组成,主频可达200 MHz;外围硬件资源包括64 MB SDRAM、64 MB NAND Flash、2个五线异步串行口、1个10M网口及用户扩展口等。本系统利用开发板提供的GPIO扩展资源,实现对超声波测距模块HCSR04的数据采集及控制,同时在LCD屏上显示精确的距离数值。
2.2 超声波测距模块
  超声波测距是借助于超声脉冲回波渡越时间法来实现的。设超声波脉冲由传感器发出到接收所经历的时间为t,超声波在空气中的传播速度为c,则从传感器到目标物体的距离D可用下式求出:
D=c?t/2
  超声波测距模块HCSR04可提供2~400 cm的非接触式距离感测功能,测距精度可高达3 mm。 模块包括超声波发器、接收器与控制电路。图2为HCSR04的引脚图。


图2 HCSR04引脚图
  各引脚功能如下:
① VCC是5 V电源,GND为地。
② TRIG是触发测距引脚,给至少10 μs的高电平信号。
③ ECHO是信号接收引脚。有信号返回时,通过I/O口ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
3 软件设计
  在软件开发之前,首先要完成软件开发环境的搭建,接下来最重要的工作就是设备驱动程序的开发。当软件系统底层的程序完成之后,就可以着手上层的与设备无关的应用程序。最后就是系统的图形界面的设计,并将应用程序烧写到S3C2410开发板上。
3.1 系统开发环境的建立
(1) 交叉编译环境的建立
  交叉编译是嵌入式开发过程中的一项重要技术,是编译技术发展过程中的一个重要分支。本系统采用的交叉编译器是cross3.3.2.tar.bz2。安装此编译器只需要在/usr/local目录下建一个arm的目录,将cross3.3.2.tar.bz2 拷贝到arm目录下,然后进入该目录进行解压,并设置相应的环境变量。
(2) Qt/Embedded和Qtopia开发环境的建立
  建立Qt/Embedded和Qtopia开发环境的具体步骤如下:首先,下载tmake、Qt/Embedded、Qtopia的源码包,注意版本之间的向后兼容性;其次,把这3个源码包分别解压到不同的目录下;最后,编辑/etc/bashrc文件,设置环境变量,并利用交叉编译器编译Qt/Embedded。
3.2 超声波测距模块程序设计
  超声波测距模块程序由驱动及应用程序组成。应用程序传送给超声波测距模块驱动控制参数,具体测距由驱动程序完成。在用户态应用程序中读取超声波设备,可获得所需的信息。
  Linux 系统访问设备就像访问文件一样。字符设备使用struct file_ operation 结构来定义设备的各种操作集合,结构中的各个函数分别响应同名或类似名称的系统调用。它是操作外设的函数接口,又称设备驱动程序接口。编写字符设备驱动程序,主要实现struct file_operation 结构中的各个函数。当然,驱动程序并不是要实现所有的这些函数,可以根据实际设备需要实现必要的函数。超声波传感器设备驱动中定义的数据结构为:
static struct file_operations gpio_ fops={
  .owner = THIS_MODULE,
  .open = gpio_open,
  .read = gpio_read,
  .release = gpio_release,
}


图3 测距程序流程
  函数gpio_init用于初始化GPIO设备。函数gpio_setup_cdev创建并注册字符设备,动态分配设备号。函数gpio_open用于打开并配置为输入口。函数gpio_read用于读取超声波测距模块输出的距离数据。函数gpio_release用于关闭GPIO设备。
  超声波测距系统的应用程序主要由测距程序、超声波发生子程序、超声波接收程序及显示子程序组成。测距程序流程如图3所示。
3.3 图形界面设计及应用程序烧写
  图形用户界面(GUI)是系统的一个至关重要的方面,用户通过GUI与系统进行交互,所以GUI应该易于使用并且可靠。本系统图形界面的主要功能有:调用相应驱动程序,显示距离,处理触摸屏点击事件等。
  将应用程序烧写到S3C2410开发板。首先将驱动程序的可执行文件复制到根文件系统的/usr目录下;其次把Qt\\Embedded二进制库和应用程序的二进制代码复制到某个目录下;然后把这个目录制成某种类型的根文件系统;最后把这个根文件系统烧写到S3C2410 的Flash 存储器上。这个过程可能需要一些制作根文件系统的工具, 如mkcramfs。
4 超声波测距仪数据测量结果
  在系统设计并实现后,为了验证测距仪的准确性与稳定性,测试了12组数据,并对测距结果与实际距离进行了比较。距离测试结果如表1所列。
表1 距离测试结果cm


  由实验数据可知,该超声波测距器的盲区(超声波传感器检测到墙壁的最近距离)为2 cm;而最远测量距离为400 cm。电路程序设计时,为了避免超声波从发射器直接传送到接收器引起的直射波触发,延时约为0.1 ms,所以超声波测距器会有一个最小可测距离。而由于超声波在传播过程中会产生衰减且发射功率有限,导致远距离回波很难检测到, 所以会有一个最远测量距离。另外,通过温度补偿可以提高测量精度。
5 结论
  利用超声波测距原理,系统在S3C2410+Linux的平台上,实现了自动测距和实时显示功能。该系统所有运算、处理、显示都实现数字化;操作简单,使用方便,测量速度快、准确,结果显示直观;体积小,携带方便,适用于各种水文液位测量、障碍物的识别以及车辆自动导航等领域,具有良好的应用前景。
参考文献
[1] 石秀民.嵌入式系统原理与应用[M].北京:北京航空航天大学出版社,2007.
[2] 王宜怀.嵌入式技术基础与实践[M].北京:清华大学出版社,2009.
[3] 优龙科技发展公司.YLP2410使用手册,2007.
[4] 宋宝华.Linux设备驱动开发详解[M].北京:人民邮电出版社,2008.
[5] 欧文盛.ARM嵌入式Linux应用实例开发[M].北京:中国电力出版社,2008.
[6] Xteam(中国)软件技术有限公司.Qt程序设计[M].北京:清华大学出版社,2002.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-24 04:08 , 耗时 0.236943 秒, 20 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表