1、超声波测身高超声波身高测量仪,该测量仪是由单片机组成的单片机中央控制系统,超声波发 射电路由发射驱动电路和设于该驱动电路输出端的超声波换能器构成,超声波 接收 电路由超声波接收换能器、限位电路和超声波接收集成块电路构成。1 传感器超声波传感器是利用超声波的特性研制而成的传感器。以超声波作为检测手 段,必 须产生和接收超声波,完成这种功能的装置就是超声波传感器。超声波传感器主要 由压电晶片组成,既可以发射超声波,也可以接收超声波。超声波传感器的核心是其塑料外套或者金属外套中的一块压电晶片。超声波传感 器的主要性能指标是工作频率、工作温度、灵敏度。2.超声波发生器为了研究和利用超声波,人们已经设计
2、和制成了许多超声波发生器。超声波发生 器可以分为两类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。 电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋 笛等。目前较为常用的是压电式超声波发生器。压电式超声波发生器的原理:利用压电晶体的谐振来工作的。超声波发生器内部 结构由两个压电晶片和一个共振板构成。当它的两极外加脉冲信号,其频率等于压 电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生 超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,讲压迫压电晶 片做振动,讲机械能转换为电信号,这时它就成为超声波接收器了。3.超声波测量仪
3、原理本设计是以超声波作为检测手段,必须产生超声波和接收超声波。传感器通过声 波的波长和发射声波以及接收到返回声波的时间差就能确定人体的身高,在发送脉 冲的同时,接收器的计时器启动并计数,直至接收传感器接收反射回波后,计数停 止,该时间差相当于测量的距离,从而可测算出测量仪与头顶之间的距离,即人体 的身高。4.EDA设计思路该超声波测量仪有2个子模块:测距、显示数据。其中显示数据模块有3局部构 成:计数、显示、信号处理。测量主要由超声波传感器完成。将发射和接收的时间差转换为电信号,再有 A/D转换器得到数字信号,然后将数字信号送入到计数局部,再到显示。5.EDA设计(1)VHDL顶层设计顶层文件
4、就是用原件例化格式将显示模式、计时模块、分频模块组合在一起。其源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.stdogic_unsigned.all;entity clock isport(clk:in stdjogic;enable:in stdjogic;sekout stdogic_vector(2 downto 0);choose:out std_logic_vector(7 downto 0); segment:out std_logic_vector(6 downto o); -end clock;architect
5、ure rt1 of clock is component clk_div100 -分频器 port(clk:in stdjogic;clk_div:out stdjogic);end component;component time_counter -计数器(产生各分秒显示位)port(enable:in stdogic; clk0:in stdjogic;sec10:out stdogic_vector(2 downto 0); sec:out stdogic_vector(3 downto 0);seec10:out stdogic_vector(3 downto 0); seec:ou
6、t std_logic_vector(3 downto 0););-与数码管连接,显示分秒位在其上end component; component display port(clk:in stdogic; sec10:in stdogic_vector(2 downto 0);sec:in std_logic_vector(3 downto 0); seec10:in std_logic_vector(3 downto 0);seec:in std_logic_vector(3 downto 0);sekout stdogic_vector(2 downto 0);choose:out std
7、_logic_vector(7 downto 0); segment:out std_logic_vector(6 downto0); end component;signal sec10:stdogic_vector(2 downto 0); signal sec:stdogic_vector(3 downto 0);signal seec10:stdogic_vector(3 downto 0); signal seec:stdogic_vector(3 downto 0);signal clkO:stdI Jo gic;begin u0:clk_div100 port map(clk,c
8、lk0);u1:time counter port map(enable,clk0,sec10,sec,seed 0,seec); u2:display port map(clk,sec10,sec,seec,seec10,choose,segment); u2:display port map(clk,sec10,sec,seec10,seec,sel,segme nt);end rt1;(2) 传感器产生信号elk源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.stdogic_unsigned.all;entity clk_d
9、iv10 is port(clk:in stdjogic;clk_div:out stdjogic);end clk_div10; architecture rt1 of clk_div10 is signal q_tmp :integer range 0 to 9; begin process(clk) beginif(clk * eve nt and clk= 11 *)then if(q_tmp=9)the nq_tmp=0;elseq_tmp=q_tmp+1;end if;end if;end process; process(clk) begi n if(clk eve nt and
10、 clk= 11 )then if(q_tmp=9)then clk_div= 1 r ;elseclk_div= O;end if;end if;end process;end rt1;计时模块源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.stdogic_unsigned.all;entity countIO isport(enable :in std_Jogic; elk: in stdjogic; cout: out stdjogic; q:out stdogic_vector(3 downto 0);end count1
11、0; architecture rt1 of countIO is signal qmp:stdogic_vector(3 downto 0); begin process(clk)beginif(clk * event and clk= 11 *)thenif(enable= 1 1 f)then if(q_tmp= n 1001 )thenq_tmp 1 0 ); elseq_tmp=q_tmp+1;end if;end if;end if;q=q_tmp;end process;cout= 1 1 when q_tmp=M 1001 and enable= * 1 else O cout
12、 O);elsesei tmp=sel tmp+1;end if;end if;selqqqqqchoosechoosechoosechoosev=when end case; end process;end rt1;library ieee;-将要显示的数据译码成能点亮数码管的二进制码use ieee.stdo gic_1164.all;entity seg7 is port(q:in std_logic_vectoe(3 downto 0); segment:out stdJogic_vectoe(6 downto 0);end seg7; architecture rt1 of seg7
13、 is begin process(q) begincase q iswhen 0000=segme ntv=0111111 0对应的数码管码元为when 000T=segme ntv= 0000110n,一“when 0010=segme ntv=1011011,一when 001T=segme ntv=1001111,一“3,when 0100=segme ntv=1100110,一“4when 010T=segmentsegme ntv=11111015 一6when 0111=segme ntv=0100111M,一“7when 1 ooon=segmentsegme ntv=1101
14、1115 一“9,when others=segmentv= xxxxxxx end case; end process;end rt1;library ieee;use ieee.std_logic_1164.all;entity display isport(clk:in stdjogic; sec10:in stdogic_vector(2 downto 0); sec:in stdogic_vector(3 downto 0); seec10:in std_logic_vector(3 downto 0);seec:in std_logic_vector(3 downto 0); se
15、kout std_logic_vector(2 downto 0); choose:out std_logic_vector(7 downto 0); segment:out std_logic_vector(6 downto0);end display; architecture rt1 of display is comp on ent count8 -丿进制Ji十数器 port(clk:in stdjogic;sekout std_logic_vector(2 downto 0);end component;comp on ent choose_decoder -三丿睪码器 port(s
16、el:in std_logic_vector(2 dow nto 0); choose:out std_logic_vector(7 downto 0); end component;component time choose port(sel: in std_logic_vector(2 downto 0);sec10: in stdjogic_vector(2 downto 0); sec: in stdogic_vector(3 downto 0); seec10: in stdogic_vector(3 downto 0);seec: in std_logic_vector(3 dow
17、nto 0); q: out std_logic_vector(3 downto 0);end component; comp orient seg7 port(q: in std_logic_vector(3 downto 0);segment:out std_logic_vector(6 downto 0);end component;signal sel_tmp: stdogic_vector(2 downto 0);signal q: stdogic_vector(3 downto 0);signal choose_tmp: stdogic_vector(7 downto 0); signal segment_tmp:stdogic_vector(6 downto 0);begin u0:count8 port map(clk,sel_tmp);u1:choose_decoder port map(sel,choose_tmp); u2:time_choose port map(sel_tmp,sec10,sec,seed0,seec,q); u3:seg7 port map(q,segment_tmp); sel=sel_tmp; choose=choose_tmp;segment=segme nt_tmp;end rt1;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1