超声波测距:
平台: CycloneIV FPGA
开发板
开发环境:quartusII 11.1sp2
实现目标:利用超声波检测障碍物距离,然后用数码管显示。
一:超声波原理与FPGA
设计
(1)超声波模块接线: +5V接VCC
触发信号输入(10us的TTL脉冲) Trig
回响信号输出(输出TTL电平信号,与射程成比例)
OUT不接(也有些超声波没有这个引脚)
GND接地
注意:不要带电连接。
(2)超声波模块时序图
需要提供一个短期的10us脉冲触发信号。该模块内部将发出8个40Khz周期电平并检测回波。一旦检测到有回波信号则输出回响信号,它是一个脉冲的宽度成正比的距离对象,为了保证发射信号对回响信号的影响,触发信号的周期最好60ms,太小了有影响,太大了测的不准。
即FPGA
提供一个trig
信号,周期为60ms
左右,高电平为10us
。
然后就是检测echo
信号了,设回响电平的宽度为某x us
,计算为x /58
,单位是cm
,即将测得的回响电平的宽度(us
单位),除以58
,就得到了障碍物的距离。这个公式很好理解,其实就是我们在初中物理的一个回声的公式s=ct/2
,
我这里用了一个distance_cnt
来保存echo
的高电平长度,echo
的高电平长度=distance_cnt*1000/48
(ns
,晶振为50m
),化为us
,为distance_cnt/48
,
然后计算距离就是s= distance_cnt/48/58= distance_cnt/2784
,这里我就用了一个除法器了。
然后就是得到了结果就保存到distance
里面了,这里超声波的测量距离只有几米,因为,distance
真正有效的就是【8
:0
】,分别分离出来:
然后数码管显示就可以了:
二:仿真
由于distance
不是output
,要在modelsim
中加入进行观察。。
验算:580/58=10cm
,当然这里只测试了一次。
三:上板验证:
无遮挡,检测的应该是距离天花板的。。。
故意用纸张遮挡:
我在程序中设置了<30
的时候,beep
就一直响。
工程文件如下:
——回复可见内容——