关键词:CPLD 超声波测距 高精度 同步
Abstact:In this paper,by analyzing the problems and causes of the single-chip system in the ultrasonic ranging process,using specially the programmable logic device CPLD to rang is put forward.Time in ranging is through high-precision crystal oscillator as a clock signal Sources to count, carrying out high-precision and synchronous measurement.
Keywords:CPLD, the ultrasonic ranging, high-precision,synchronize
引言
超声波测距是一种非接触测量方法,超声波具有频率高、波长短、指向性强、能量消耗缓慢、传播距离较远、不受电磁干扰、回波表现稳定,测量精度高等优点,利用超声波检测往往比较迅速、方便、计算简单、易于实时控制, 所以通常采用超声波测距装置进行距离检测。
以往采用单片机系统进行超声波测距,由软件控制实现超声波信号的发射、接收及计数器的启动与停止。这就导致超声波信号的发射与计数器的启动不同步,超声波传感器接收到信号与单片机检测到信号之间不同步,又因为单片机的计数频率较低,所以单片机系统的测距误差一般为厘米级。这样就不能满足精确测量的要求了。
本文采用CPLD完成超声波的发射和接收,并精确记录回波时间,克服了单片机的速度限制,不但可以使记录回波的时间精确到nS级而且可以实现同步测量,这样就可以满足高精度工程测量的要求。
1 CPLD模块的原理框图及功能
CPLD模块主要由发射模块,16位计时计数器模块,接收模块,顺序执行计数器模块和六选一数据选择器模块五部分组成。其总体框图如图1所示。
CPLD模块主要完成超声波的发射、接收和时间的测量。超声波发射模块启动125KHz的超声波发射,当发射脉冲串达到设定值后,关闭超声波的发射,同时启动六路计时计数器模块开始计时;信号经过障碍物反射回来,接收电路接收到回波后,将其进行整形,作为接收模块的信号,当接收完回波脉冲信号后,接收模块输出端发出信号,关闭计时计数器停止工作;当所有的回波接收完毕后,顺序执行计数器输出端发出信号启动单片机开始接收数据,通过顺序执行计数器的计数值、数据选择器的选择端与计时计数器的控制端分别读取六路不同的计数值。所有的数据读取完后,清除计时计数器的计数值,准备下一次的循环计数。
图1 CPLD系统原理框图
2 CPLD系统各功能模块设计
2.1 发射模块设计
2.1.1端口说明:
CLK: 输入口,接晶振时钟。
CLR: 输入口,单片机读取所有的计时计数器计数值后清除CPLD内部所有计数器,使其恢复初态。
START:输入口,使模块开始输出125KHz的方波。
SEND:输出口,输出125KHz的方波。
SENDFINIS:输出口,输出一定数量的脉冲串之后,输出一高电平,用来启动计时计数器开始计数。
图2 超声波发射模块
2.1.2功能:
晶振经过分频器分频得到发射频率为125KHz的方波,当单片机发出控制信号START=1时,开启125KHz的方波开始发射。当发完脉冲串之后,SENDFINISH由低变为高电平,作为计时计数器的触发脉冲,用来启动计时计数器开始计数。
2.2 接收模块设计
2.2.1端口说明
REVCLK:输入口,接收回波信号输入端。
CLR:输入口,所有计时计数器数据送入单片机后,使CPU内部的所有计数器计数值清零。
REVCOUNT:输出口,接收完回波信号后,输出高电平,关闭计时计数器计时。
图3 超声波接收模块
2.2.2功能:
接收模块接收完回波信号后,判断其计数值与发射的脉冲串数值是否相同,若相同,RECOUNT关闭计时计数器,反之,则输出状态不变。
2.3 计时计数器模块设计
2.3.1端口说明:
A:输入口,数据选择端,A=0/1时,分别读计时计数器的高/低8位。
CONCLK:输入口,读取计时计数器值的控制端口;
CLK:输入口,接晶振时钟。
CLR:输入口,所有计时计数器数据送入单片机后,使CPU 内部的所有计数器计数值清零。
SEND:输入口,输入高电平,用来启动计时计数器开始计时。
REV:输入口,接收模块接收完回波信号后,输入高电平,关闭计时计数器。
CE:输入口,使能将六路计数值分别送到数据总线。
DB[0…7]:输出口,将计时计数器值送入单片机。
图4计时计数器模块
2.3.2功能:
晶振时钟通过分频得到计数频率,作为16位计时计数器的时钟脉冲。当SEND为高电平时,启动计时计数器开始计数,REV为高电平时,关闭计时计数器停止计数。由于其计数值为16位二进制数,将其送入8位单片机处理,通过控制端口A的高低电平,将16位计数值分为高、低8位,结合CE与CONCLK两个端口来依次将其16位计数值通过数据总线送入单片机。
2.4 顺序执行计数器模块设计
2.4.1端口说明
REVCOUNT A…F: 输入口,接收模块接收完信号后,输出高电平,使送数模块FINISH端口通知单片机开始接收数据。
RDCLK:输入口,单片机依次读取计时计数器的计数值的脉冲信号。
CE1-CE6:输出口,给相应的计时计数器模块使能。
FINISH :输出口,启动单片机准备接收数据。
图5 顺序执行计数器模块
2.4.2功能:
所有的接收模块接收完数据后,FINISH端口输出高电平,以触发单片机使单片机处于接收数据状态,单片机发出信号给送数模块RDCLK端口,使顺序执行计数器开始计数,计数值每次加1,输出端口便使能相应的计时计数器,单片机便从相应的计时计数器中读取计数值。选取计时计数器的顺序如表1所列。
表1 选取计时计数器的顺序
2.5 顺序执行计数器模块设计
2.5.1端口说明:
A2、A1、A0:输入口,各路计时计数器的选择端。
DB[7…0]:输出口,将计时计数器值送入单片机。
X0[7…0]-X5[7…0]:各路计时计数器的计数值。
图6 数据选择器模块
2.5.2功能:
通过数据选择器的选择端A2、A1、A0分别选择六路计时计数器,然后通过DB[7…0]将计数值送给单片机。选取计数值的顺序如表2所列。
表2 选取计数值的顺序
3.单片机读取数据
本系统模块主要是为了实现125KHz的超声波的发射与接收,以及六路超声波从发射到接收之间时间的测量,最后通过单片机控制信号将其计数值通过数据总线读出,送到单片机中。但是为了能准确的读取数据,其读取计数值的执行过程如下:
(1) 当顺序执行计数器模块的端口FINISH=1 时,通知单片机准备接受数据。
(2) 通过A2、A1、A0选择数据选择器要读取的计时计数器的计数值。
(3) 由RDCLK的脉冲输入来选通计时计数器。
(4) 通过A来选通所要输出计时计数器计数值的高低8位。
(5) 通过控制信号CONCLK来读取高低8位数值。
结 语
采用CPLD可编程逻辑器件来测距,系统反应时间在nS级,有效地提高了系统精度,满足了精确测距要求,另外6路超声波传感器同时工作,实现了数据的同步采集。为超声波在精密测量领域的应用和推广提供了一种可能。
参考文献:
[1]程铁栋 杨丽荣. CPLD和单片机的高精度超声测距系统[J].单片机与嵌入式系统应用,2005:17-19.
[2]葛健强. 基于CPLD的超声波测距仪研制[J].无锡商业职业技术学院学报,2004,4(3):8-10.
[3]边计年. 数字逻辑与VHDL设计[M].北京:清华大学出版社,2005.