超声波测距原理:

超声波测距原理是在超声波发射装置发出超声波,它的根据是接收器接到超声波时的时间差,与雷达测距原理相似。 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。

(超声波在空气中的传播速度为340m/s,根据计时器记录的时间t(秒),就可以计算出发射点距障碍物的距离(s),即:s=340t/2)

计算公式可近似为:s=340t/2(精确的情况稍微不同)

实验所用超声波测距实物为:

超声波测距时序图:

触发信号是一个持续10us的高电平脉冲,检测到触发信号后,超声波测距模块将发出8个40KHz的脉冲并检测回波信号,一旦检测到回波信号则此模块输出回响信号,回响信号的脉冲长度与测试距离成正比。

计算公式近似为:s=340t/2

下面是FPGA实现的功能框图:

如上图,回波信号echo作为输入信号输入到FPGA的Chipscope进行采集,来查看echo信号的长度,由此来得出测量距离。

引用特权的程序吧,虽然有的部分不太喜欢,但总体还是能提供一个思路:

/
//工程硬件平台: Xilinx Spartan 6 FPGA
//每10us产生一个持续时间为40ns的高脉冲
/
module clkdiv_generation(input clk,     //外部输入25MHz时钟信号input rst_n, //外部输入复位信号,低电平有效output clk_100khz_en //100KHz频率的一个时钟使能信号,即每10us产生一个时钟脉冲);                                                         //-------------------------------------------------
//时钟分频产生
reg[7:0] cnt;   //时钟分频计数器,0-249//1s定时计数
always @(posedge clk or negedge rst_n)if(!rst_n) cnt <= 8'd0;else if(cnt < 8'd249) cnt <= cnt+1'b1;else cnt <= 8'd0;assign clk_100khz_en = (cnt == 8'd249) ? 1'b1:1'b0;      //每10us产生一个40ns的高脉冲             endmodule
/
//工程硬件平台: Xilinx Spartan 6 FPGA
/
module ultrasound_controller(input clk,     //外部输入25MHz时钟信号input rst_n, //外部输入复位信号,低电平有效input clk_100khz_en, //100KHz频率的一个时钟使能信号,即每10us产生一个时钟脉冲output ultrasound_trig,    //超声波测距模块脉冲激励信号,10us的高脉冲input ultrasound_echo        //超声波测距模块回响信号);                                                         //-------------------------------------------------
//1s定时产生逻辑
reg[16:0] timer_cnt;    //1s计数器,以100KHz(10us)为单位进行计数,计数1s需要的计数范围是0~99999//1s定时计数
always @(posedge clk or negedge rst_n)if(!rst_n) timer_cnt <= 17'd0;else if(clk_100khz_en) beginif(timer_cnt < 17'd99_999) timer_cnt <= timer_cnt+1'b1;else timer_cnt <= 17'd0;endelse ;assign ultrasound_trig = (timer_cnt == 17'd1) ? 1'b1:1'b0;       //10us高脉冲生成                     endmodule

下面是主模块,调用上面的两个模块:

/
//工程硬件平台: Xilinx Spartan 6 FPGA
/
//每秒产生1个超声波测距模块所需的10us高脉冲激励,并用chipscope pro查看回响信号
module sp6(input ext_clk_25m,   //外部输入25MHz时钟信号input ext_rst_n, //外部输入复位信号,低电平有效output ultrasound_trig,  //超声波测距模块脉冲激励信号,10us的高脉冲input ultrasound_echo,       //超声波测距模块回响信号output[0:0] led        //D2指示灯);                                                   //-------------------------------------
//PLL例化
wire clk_12m5;  //PLL输出12.5MHz时钟
wire clk_25m;   //PLL输出25MHz时钟
wire clk_50m;   //PLL输出50MHz时钟
wire clk_100m;  //PLL输出100MHz时钟
wire sys_rst_n; //PLL输出的locked信号,作为FPGA内部的复位信号,低电平复位,高电平正常工作pll_controller uut_pll_controller(// Clock in ports.CLK_IN1(ext_clk_25m),      // IN// Clock out ports.CLK_OUT1(clk_12m5),     // OUT.CLK_OUT2(clk_25m),     // OUT.CLK_OUT3(clk_50m),     // OUT.CLK_OUT4(clk_100m),     // OUT// Status and control signals.RESET(~ext_rst_n),// IN.LOCKED(sys_rst_n));      // OUT      //-------------------------------------
//25MHz时钟进行分频,产生一个100KHz频率的时钟使能信号
wire clk_100khz_en; //100KHz频率的一个时钟使能信号,即每10us产生一个时钟脉冲clkdiv_generation  uut_clkdiv_generation(.clk(clk_25m),        //时钟信号.rst_n(sys_rst_n),    //复位信号,低电平有效.clk_100khz_en(clk_100khz_en)    //100KHz频率的一个时钟使能信号,即每10us产生一个时钟脉冲);         //-------------------------------------
//每秒产生一个10us的高脉冲作为超声波测距模块的激励ultrasound_controller   uut_ultrasound_controller(.clk(clk_25m),        //时钟信号.rst_n(sys_rst_n),    //复位信号,低电平有效.clk_100khz_en(clk_100khz_en),   //100KHz频率的一个时钟使能信号,即每10us产生一个时钟脉冲.ultrasound_trig(ultrasound_trig), //超声波测距模块脉冲激励信号,10us的高脉冲.ultrasound_echo(ultrasound_echo)        //超声波测距模块回响信号); //-------------------------------------
//input信号必须经过IBUF后,才能作为chipscope中查看
wire ultrasound_echo_r;IBUF #(.IOSTANDARD("DEFAULT")    // Specify the input I/O standard)IBUF_inst (.O(ultrasound_echo_r),     // Buffer output.I(ultrasound_echo)      // Buffer input (connect directly to top-level port));assign led[0] = ultrasound_echo_r;endmodule

可以用Chipscope来查看回响信号的长度,这里省略,下篇博文,添加一个数码管动态扫描显示模块,将回响信号在数码管上显示出来。

超声波测距小实验(二):数码管显示回响信号脉冲宽度

【 FPGA 】超声波测距小实验(一)相关推荐

  1. 【 FPGA 】超声波测距小实验(四):数码管显示测距结果

    上篇博文:测了回响脉冲的宽度为多少个10us,这篇博文要算出距离,且用数码管显示距离的十进制结果. 功能框图如下: . 距离计算: 还是先给出程序之后在简单解释吧. 顶层模块: / //工程硬件平台: ...

  2. 实验24:超声波测距仪小实验

    --超声波测距小实验 --液晶显示距离 OK,简单分享一个小实验,超声波测距实验 01 硬件电路 超声波传感器 液晶 总体电路连接 接口: 第1步:建立电路 超声波传感器与 Arduino Uno 板 ...

  3. arduino UNO 与 超声波测距模块 实验详情

    US-015 超声波测距模块 超声波传感器 US-020升级版 送全套资料 资料下载地址:http://pan.baidu.com/s/1c0AfkIG US-015超声波测距模块 1. 概述 US- ...

  4. 树莓派基础实验24:超声波测距传感器实验

    一.介绍    超声波传感器使用超声波来准确检测物体并测量距离.他发出超声波并将它们转换成电信号,主要应用于汽车的倒车雷达.机器人自动避障行走.建筑施工工地以及一些工业现场. 二.组件 ★Raspbe ...

  5. 【Arduino实验13 超声波测距】

    目录 一.实验目的 二.实验设备与环境 三.实验重点 四.实验难点 五.实验内容 5.1实验任务 5.2实验原理 5.3实验内容 5.4实验结果 5.5思考题 一.实验目的 1熟悉超声波传感器基本性能 ...

  6. 【 FPGA 】按键消抖与LED灯流动小实验

    记录一个小实验吧,实验的目的是仅仅是塞塞牙缝而已,没其他意思,很简单. 功能:拨码开关控制led灯工作与否,拨码开关为on,led灯工作,否则不工作:导航按键up和down,也就是独立按键而已,控制l ...

  7. STM32F103ZET6超声波测距(hcsr04模块)实验

    STM32F103ZET6超声波测距(hcsr04模块)实验 一.硬件连线图 接线描述: 1.供电采+5V,我试了下+3V也是可以的 2. 注意Trig引脚跟Echo引脚不要接错: 二.hcrs04模 ...

  8. Arduino Uno 实验8——HC-SR04 超声波测距模块

    HC-SR04 超声波测距模块简介   由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现.   HC-SR04超声波 ...

  9. 利用STM32CubeMX配置基于STMF32F407的FREERTOS操作系统控制直流电机速度和超声波测距实验

    前两周做基于STM32F407芯片的嵌入式系统设计的实验,主要完成利用超声波测距(电脑上用串口显示超声波所测距离,障碍物近于20cm时,使LED灯闪烁,并且可以通过串口更改报警距离)和利用编码器读取电 ...

最新文章

  1. vb编写脚本能让计算机屏幕黑屏,,win7上设置颜色黑屏
  2. Windows 2000本地路由表
  3. 【莫队】【P3901】 数列找不同
  4. 为程序员准备的英语学习资料
  5. 【问题解决】 请点击工具-Internet选项-高级,关闭“启用集成WINDOWS验证”选项。然后关闭浏览器,重新登录系统。
  6. System.getProperty()方法大全
  7. 【FPGA基础】DDR的基本原理介绍,DDR快速上手使用
  8. sketch和zeplin
  9. 大二上,计组原理笔记(2)2.2 机器数的定浮点表示
  10. app测试移动应用测试 (功能测试)适合0基础学习
  11. 分子内电荷转移有哪些最新发表的毕业论文呢?
  12. 关于springmvc项目一加入validation-api包就报错的解决方法
  13. 基于SVG的鼠标动态绘制矩形和动态放置图片
  14. Canvas粒子旋涡特效
  15. 智汀智能家居知识普及篇——家居智能控制方式及控制系统的特点,你知道几个?
  16. Direct3D 11编程总结
  17. ArcGIS API for JavaScript 4.0尝鲜——WebGIS前端开发大杀器
  18. ENVI_基于环境小卫星的草原荒漠化监测
  19. [C#][原创]aspose.word删除文档空行
  20. 实验10 超市订单管理系统综合实验

热门文章

  1. narray删除列 python_Python数据分析入门教程(四):数值操作
  2. wincc报表步骤实例_Wincc 如何连接SQL Server 数据库
  3. python里面的类和对象_Python中类和对象在内存中是如何保存?
  4. 大学java专业核心课程_计算机应用技术专业核心课程有哪些?
  5. 虚拟机服务器编号怎么查看,查看虚拟机的服务器地址
  6. Android判断CPU是否为x86,如何判断. NET 程序集是否编译为 x86,x64或者任何 CPU_visual-studio_开发99编程知识库...
  7. java类接口的区别_【Java基础】java接口和类的区别-瑶瑶吖的回答
  8. java 调用父级方法_java子类调用父类的方法中包含子类重写的实例方法
  9. python数据笔记分析_利用 Python 进行数据分析学习笔记(一)
  10. 2fsk基于matlab的仿真,基于matlab的2ask、2psk、2fsk的仿真