前编:
学习verilog也快半年了,期间一直没有怎么做过总结或者笔记。好不容易中途写了好厚一本笔记,记录了关于fpga控制液晶显示的很多心得,结果一不小心搞丢了,很是郁闷。不过想想,做做笔记,做做总结总还是比纯凭记忆的好。EDN是个很不错的平台,氛围也很好,索性就借这个平台来记录自己的成长吧,也可以和坛子里的朋友们分享,以后回头来看必定颇有感慨。
这次用的超声波模块型号是HC-SR04,根据datasheet,一共有四个管脚
基本工作原理:
(1)采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。
(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
(3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声
波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
时序图如下
我的基本思想是设置一个100ms的计数器(datasheet中建议测量周期最好大于60ms)为测量周期提供时序控制。以pll产生的1MHz时钟信号,在最开始的20us内获取上一次echo的脉冲宽度寄存器的值,在20us-40us时发送一个trig信号,同时清零脉冲宽度寄存器的值。随后,模块应该连续发出8个40KHz的脉冲,可以开始等待echo信号,在脉冲持续期间,以1us为单位计数,直到脉冲完成,这样便可得到脉冲宽度,并且可以保持到下一个trig脉冲到来之前。其它的就简单了,得到的脉冲宽度可以通过换算公式的到距离,再转换成对应的ascii码便可以显示在lcd1602液晶上。下面是具体代码:
/*************************************************************************************************
*This module is used to measure the distance between the ultrasonic module and the target. *
*1 clk 1 us
*************************************************************************************************/
module ultrasonic(clk,fpga_rst,trig,echo,t,s);
input clk;
input fpga_rst;
input echo;
output trig;
output [16:0] t;
output [16:0] s;
reg [19:0] cnt;
always@(posedge clk)//this 100ms period signal is used to control the time_sequence
begin
if(!fpga_rst)
cnt<=20'd0;
else if(cnt>=20'd1000_00)
cnt<=20'd0;
else
cnt<=cnt+20'd1;
end
reg trig;
always@(posedge clk)//generate a >10us pulse,it will be tranformed into 8 continue 40KHz ultrasonic wave by the module
begin
if(!fpga_rst)
trig<=1'b0;
else if((cnt>=20'd20)&&(cnt<=20'd40))
trig<=1'b1;
else
trig<=1'b0;
end
reg [16:0] t;
always@(posedge clk)//get the time from the sonic wave send and the echo receive,the t will be clear when the trig pulse gen
begin
if(!fpga_rst)
t<=17'd0;
else if((cnt>=20'd20)&&(cnt<=20'd40))
t<=17'd0;
else if(echo)
t<=t+17'd1;
end
reg [16:0] s;
always@(posedge clk)
begin
if(!fpga_rst)
s<=17'd0;
else if(cnt<20'd10)
s<=t/58;
end
endmodule
用户377235 2015-4-13 20:39
用户377235 2015-4-13 20:37
用户1721644 2014-10-28 22:02
用户1371937 2014-10-13 11:25
用户401004 2014-10-2 09:44
hot.summer_2010_438634915 2014-9-6 13:23
用户1443740 2014-9-1 11:28