基于FPGA的小型超声波定位系统
61010323
夏厚燃
1、申请题目:基于FPGA的小型超声波定位系统
本设计利用超声波传感器给FPGA提供足够精确的被检测物体位置信息,系统精确地将空间中的物体定位并将其位置信息实时地显示出来,实现较小空间内的高精度定位。
2、 课题背景:
n 存在问题、应用背景
随着数据业务和多媒体业务的快速增加,人们对定位与导航的需求日益增大,尤其在复杂的室内环境,如机场大厅、展厅、仓库、超市、图书馆、地下停车场、矿井等环境中,常常需要确定各种设施与物品在室内的位置信息。但是受定位时间、定位精度以及复杂室内环境等条件的限制,比较完善的定位技术目前还无法很好地利用。因此,专家学者提出了许多室内定位技术解决方案,如GPS技术、红外线技术、射频识别技术、超声波技术等等。
而其中超声波在对障碍物进行定位方面具有以下突出的优点:
(1)超声波对色彩、光照度不敏感,可用于识别透明及漫反射性差的物体(如玻璃、抛光体);
(2)对外界光线和电磁场不敏感,可用于黑暗、有灰尘或烟雾、电磁干扰强、有毒等恶劣环境中;
(3)超声波传感器结构简单,体积小,费用低,信息处理简单可靠,易于小型化和集成化。
目前,各种超声检测技术己越来越引起人们的重视,被广泛应用在液位测量、机械手控制、车辆自动导航、物体识别等方面。与其他定位技术相比,超声波能满足较高精度定位的要求,而且设备简单,成本低,在实验室实现容易。
FPGA器件高集成、高速度、低功耗、体积小,有丰富的查找表资源,在数字电路的设计中得到广泛的应用。本设计利用超声波传感器给FPGA提供足够精确的被检测物体位置信息,系统精确地将空间中的物体定位并将其位置信息实时地显示出来。
3、项目规划:
n 功能、指标、规模
功能:本系统通过将超声波发射器置于被检测的物体上,向周围按照一定的时间间隔发送超声波脉冲,在周围3个固定位置上分别接收超声波发射器发出来的脉冲信号,通过比较三个接收器收到信号的时间,可以算出超声波发生器的具体位置。当目标移动时,可以通过不问断测量,描出目标的运动轨迹。
指标:本系统工作时每0.5秒进行一次实时定位,系统定位精度精确达到厘米。规模:受外设和FPGA限制,定位空间范围在3米以内。
n 输入、输出接口
输入:通过ISP实验系统引脚采集来自外部硬件的模拟高低信号;
输出:输出信号通过VGA进行动态三维显示。
4、实现方案:
n 核心问题
1. 外部电路的实现;
2. 定时中断和计时功能的实现;
3. 定位算法在FPGA上的实现;
4. 利用VGA显示,电脑界面上动态描绘出被测物体所处的三维坐标;
解决方案
1. 外部电路的实现:
本次设计采用压电式超声波传感器。压电式超声波换能器是利用压电晶体的谐振来工作的。超声波换能器内部有两个压电晶片和一个换能板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极问未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器。
①超声波发射电路:
发射电路原理图如下图所示。发射电路主要由反相器74LS04和超声波发射换能器T构成,单片机P1.0端口输出的40kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。输出端采两个反向器并联,用以提高驱动能力。上位电阻R1O、R11一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡时间。
实际电路搭建:
②超声波接收电路:
集成电路CX20106A是一款红外线检波接收的专用芯片,也常用于超声波接收电路。
实际电路搭建:
2. 定时中断和计时功能的实现:
当超声波接收电路接收到超声波信号时会输入一个低电平,当第一个超声波脉冲发射的同时,FPGA中的计数器开始计数,在首波检测电路检测到第一个回波脉冲的瞬间,计数器停止计数。
if(received==1&&back1==0) //如果接收到received开始计时
begin
point1<=1; //定义的计时指针,为1时开始计时
count1 <= 0;
led1<=0; //LED指示灭,接收到信号时高
stop1<=0;
whole1<=0;
end
else
if(back1==1) //接收到中断信号
begin
stop1<=1; //如果back=1,那么stop=1,中断计时
point1<=0;
led1<=1;
end
else if(point1==1)
begin
count1 <= count1+ 8'd1; //根据时钟信号的周期数来计时
end
else if(stop1==1) //stop为1,中断计时
begin
n1<=count1; //在下次received来临时count清零
whole1<=1;
end
end
3. 定位算法在FPGA上的实现:
在本系统中,定位算法是重中之重。
三维算法实现:
为了讨论简单,设在一个固定的参考坐标系的原点o、x轴上X'点、y轴上Y'点,分别安装上3个超声波接收器,同时在被检测的物体上安装上1个超声波发射器,如图1所示:
设被检测物体在A点坐标为( x,y,z ),3个超声波接收器坐标为o(0,0,0)、 X’(a,0,0)、),Y' (O,b,0), 、、由(1)式及检测电路经过计算得出。则有:
………………(2)
………………(3)
………………(4)
联解式(3)~(5)得:
………………(5)
………………(6)
………………(7)
即测量出 、、,就可利用上式求出 x、y、z的值,即得到被检测物体在三维坐标中的位置,实现定位。
在算法中,需要经过复杂的运算才能准确求的被测物体的空间坐标值,这一过程包括乘、除、开方等复杂运算。而FPGA并行运算的优势,在如此复杂的数据处理中难以发挥。
但是FPGA提供了丰富的查找表资源,所以遇到的问题迎刃而解。但是FPGA的rom大小十分有限,在这里也限制了空间定位系统的定位广度,为了保证系统的正常工作,便将期限定在空间坐标(200cm,200 cm,100 cm)以内。
设n为计数器计数脉冲个数,查找表1电路将脉冲个数n转换为距离数 ,查找表电路采用参数化模块lpm—rom来实现。事先通过计算 的值,并按n的大小依次存人ROM中,用n作为地址访问ROM,即可输出,n对应的L值。
WIDTH=8;
DEPTH=256;
_RADIX=UNS;
DATA_RADIX=OCT;
CONTENT BEGIN
0 : 0;
1 : 3;
……
73 : 248;
74 : 252;
75 : 255; //左侧为n,右侧为对应的距离L,单位为厘米
[76..255] : 0;
END;
查找表2电路将L1、L2、a按式(5)转换为 x 值,事先通过计算得出x的值,依次存人ROM中,用L1、L2作为地址访问ROM,即可输出对应的x值。同理可的y的值。
坐标z的值需要额外通过一个ROM来求得:
4. 利用VGA显示,电脑界面上动态描绘出被测物体所处的三维坐标;
该显示部分有vgacontrol.v和zuobiao.v模块组成,vgacontrol.v模块实现将物体的空间坐标转化为对应于VGA显示的坐标,使改点能够在屏幕的空间坐标轴中正确显示出来。
zuobiao.v模块模块则在显示屏上显示出一个三维坐标轴,并且受vgacontrol.v控制动态显示定位得到的物体坐标。
二、系统结构:
n 系统结构框图
n 模块功能描述
VGA模块:实时在三维空间坐标轴上显示定位得到的物体位置。
射频收发模块:射频收发模块因难度较大,用每0.5s定时发送超声波信号取代。
超声波收发:用于发射和接收超声波信号
FPGA核心控制模块:控制系统的计时和中断,核心定位算法的计算。
n 模块接口标注(参数、协议)
EP1C6Q240C8实验箱的输入输出的实际连线与管脚表
6、状态流程图:
(注:无线射频模块最终用有线模块代替)
7、课程设计总结
n 预期的目标与当前实现功能的差异详细注释
- 模电部分与当初设想有很大的差别!
起初自己搜集资料涉及超声波收发电路,并且购买期间自己焊电路。在焊好以后进行检测时,发现难以判定整个电路是否工作。超声波接收电路总是难以得到预期的波形。在上面花了大量的时间进行调试也没有结果。
最后购买了网上做好的超声波收发模块,刚拿到手下午监测每个模块都能正常工作,但是到了晚上在检测所有超声波收发模块都不尽兴工作了,都接收不到超声波信号。这让人非常头疼,导致最后验收时,因为外设无法正常工作,从而整个系统也无法进行检验。
- 动态描绘出运动轨迹功能没能实现
预期目标是在VGA上显示物体的运动轨迹,但实际编程时发现,要实现要弄懂轨迹的保存需要占用FPGA很大的资源,而系统本身已经占用掉了绝大部分资源,故最后抛弃该功能。最终只在显示屏上物体每次定位所在的位置。
3. VGA显示时X轴坐标不准确
要实现在VGA上显示物体的三维位置,需要对定位得到的(x,y,z)坐标进行转换,并且可以通过代数计算得到。但是实际操作过程中在空间坐标轴的x轴上的位置十分不准确,并且变换很不稳定。究其原因是通过ROM时的全局时钟不同意,产生了很大的误差。因为时间关系,该问题并没有很好的解决。
n 可以进一步发挥提高的部分
1、通过数码管实时显示物体的平均移动速度。
2、在显示屏上保留物体的运动轨迹
n 课程设计体会
数字系统设计这门课是十分有趣的!
在学期初老师对这门课进行介绍后就开始想自己要做什么。首先就告诉自己,要做实用的东西。因此把许多看起来很有趣但实际应用价值不大的课题排除了。
通过不断搜集资料进行筛选,决定做这一个超声波定位系统,最初只是认为这个课题可能会比较难,但是没想到在后期实际进行起来是那么的困难。
第一,模电部分想得太简单了。最初一位只要设计好电路,并且焊接好就不会有太大的问题。但是现实却给我上了残酷的一课,自己拿着焊接好的超声波发射和接收电路,却不知道该如何调试。正常情况下应该是发射模块发射一组超声波脉冲信号,接收模块接收到信号后则输入一个低电平给FPGA。但是当进行硬件检测时,发现无论如何都得不到一个稳定的低电平,要么一直是高,要么就是在示波器上检测到为知信号。花了几天的时间来进行硬件调试,却没有任何有效进展。只能不甘的放弃,这种感觉真的很难受。
第二,因为受到硬件部分的影响,软件部分的调试则只能进行分模块进行调试。其中的痛苦更是许多,仿真和实际烧程序进行测试是有很大差距的,要么是测了半天发现板子是坏的,要么是发现整个定位算法纯在逻辑错误,一切都要重新开始。因为是分模块测试,所以当所有模块组合在一起后,难以进行有效测试。最担心的同步时钟问题虽然用了自认十分可行的方法,但是无法最总检验。
第三,时间过于紧张。整个课程设计,是前松后紧的,对时间的安排十分不合理。越是临近验收整个人越是紧张,为了赶进度一次又一次的通宵调试电路,修改程序,整天整天的蹲在实验室里。这是十分不科学的,在以后的课程学习和工作中绝对不能这样,一定要按照一定的计划来工作。
在学习过程中,老师提供的帮助对我的帮助也是很大的,对于一些困惑自己数日的问题,经过老师的点播,换一种思维,问题总是能够迎刃而解。刚开始自己还是比较木讷,好多问题埋头自己研究而不主动去问,现在想想真是不应该。
回头看看这学期的课程设计,虽然很累很辛苦,但自己内心是十分快乐的。看着自己用了那么多时间做出的成果,虽然有很多不足的地方,内心的成就之感是高的。而我的超声波定位系统并不会随着课程的结束而结束,我会继续研究下去,除了用FPGA以外试着用单片机来进行系统的开发,来弥补FPGA在复杂函数处理方面的不足。
9、参考文献
[1]王富东.超声波定位系统的原理与应用.自动化与仪表.1998年,第13卷,第3期.
[2]杨敏华,李利军,李朝晖.超声波三维空间定位在虚拟现实系统中的应用.计算机仿真.2004年11月,第21卷,第11期.
[3]苏州瑞宁电子有限公司.TCT40-16TR1压电陶瓷超声传感器规格书.