一、实验原理
1.模块介绍
HC-SR04超声波测距模块可提供 2cm-400cm的非接触式距离感测功能,测距精度可达高到 3mm;模块包括超声波发射器、接收器与控制电路。图1为HC-SR04外观,其基本工作原理为给予此超声波测距模块触发信号后模块发射超声波,当超声波投射到物体而反射回来时,模块输出回响信号,以触发信号和回响信号间的时间差,来判定物体的距离。
2.系统设计
图给出了系统软件设计的整体框架,实际上由于FPGA内的各个子进程都是并行执行的,且每个子进程都是是独立的模块,因此程序设计并不是按照顺序的方法设计的,而是分离成各个小的子模块进行设计综合的,需要严格控制时序。
超声波收发部分负责产生超声波驱动信号,要求频率为50MHz,占空比为50的方波信号以驱动超声波换能器,同时高速计数器开始计数,检测回波后,计数器停止计数,计算后控制显示输出。
3.硬件时序图
二,代码设计
- clk_div模块
/*================================================*\ Filename ﹕ Author ﹕ Description ﹕产生周期为1us的时钟信号 Called by ﹕ Revision History ﹕ mm/dd/202x Revision 1.0 Email﹕ Company﹕ \*================================================*/ module clk_div( input wire Clk , //system clock 50MHz input wire Rst_n , //reset ,low valid output wire clk_us // ); //Parameter Declarations parameter CNT_MAX = 19'd50;//1us的计数值为 50 * Tclk(20ns) //Interrnal wire/reg declarations reg [5:00] cnt ; //Counter wire add_cnt ; //Counter Enable wire end_cnt ; //Counter Reset //Logic Description always @(posedge Clk or negedge Rst_n)begin if(!Rst_n)begin cnt <= 'd0; end else if(add_cnt)begin if(end_cnt)begin cnt <= 'd0; end else begin cnt <= cnt + 1'b1; end end else begin cnt <= cnt; end end assign add_cnt = 1'b1; assign end_cnt = add_cnt && cnt >= CNT_MAX - 19'd1; assign clk_us = end_cnt; endmodule
- hc_sr_echo
/*================================================*\ Filename ﹕ Author ﹕ Description ﹕超声波检测距离模块 本模块理论测试距离 2cm~510cm 输出结果保留两位小数 Called by ﹕ Revision History ﹕ mm/dd/202x Revision 1.0 Email﹕ Company﹕ \*==========