【正文】
鐘為100KHZ,則觸發(fā)周期可以計(jì)算為:其中, 為觸發(fā)計(jì)數(shù)上升沿?cái)?shù); 為測(cè)距往返最大值的上升沿計(jì)數(shù)。25MHZ為1KHZ的25000倍,因而從0到12499計(jì)數(shù)。 用FPGA產(chǎn)生一滿足超聲波模塊的觸發(fā)信號(hào),使之開始工作,等待接受回聲信號(hào)。 感應(yīng)角度不大于15度;但此次課設(shè)使用FPGA用硬件描述語言來構(gòu)建此電路是對(duì)FPGA本身功能和各模塊使用的學(xué)習(xí)和提升。可編程邏輯器件及EDA技術(shù)課程設(shè)計(jì) ——基于FPGA的超聲波測(cè)距電路和其擴(kuò)展應(yīng)用摘要本課設(shè)使用FPGA和其他模塊為硬件基礎(chǔ),以VHDL為硬件描述語言進(jìn)行超聲波測(cè)距電路的搭建,完成數(shù)碼管精度為2厘米的實(shí)時(shí)顯示,并且在基本電路的基礎(chǔ)上使用蜂鳴器擴(kuò)展出“倒車?yán)走_(dá)”功能,在距離不同的區(qū)間內(nèi)蜂鳴器會(huì)響出不同的頻率的聲音,總體是距離越小,頻率越高。二、功能描述:使在數(shù)碼管上實(shí)時(shí)顯示障礙物與測(cè)試模塊的距離,要求顯示米、分米和厘米位,數(shù)碼管精度為2厘米,實(shí)時(shí)顯示,并且在基本電路的基礎(chǔ)上使用蜂鳴器擴(kuò)展出“倒車?yán)走_(dá)”功能,在距離不同的區(qū)間內(nèi)蜂鳴器會(huì)響出不同的頻率的聲音,總體是距離越小,頻率越高?;芈曇_接受到回聲信號(hào)后,開始記錄整個(gè)高電平所持續(xù)時(shí)間,再根據(jù)脈沖周期計(jì)算的超聲波往返的總時(shí)間,用公式S=340*T/2來計(jì)算相對(duì)距離(340為默認(rèn)聲速,可調(diào))。 以分頻模塊提供的100KHZ為時(shí)鐘,周期為10微秒,其中高電平為5微秒。(為滿足發(fā)射和返回信號(hào)的實(shí)時(shí)性,應(yīng)滿足兩倍的)。數(shù)據(jù)寬度根據(jù)最大測(cè)距距離可確定為12位。高位在2號(hào)位,中位在1號(hào)位,低位在0號(hào)位。五、編程下載編程: 編程采用模塊化設(shè)計(jì)的方法。不能不驗(yàn)證就連接到整體系統(tǒng)中,一旦出現(xiàn)問題就會(huì)不知道從哪里檢查問題,也很浪費(fèi)時(shí)間! ,這樣能節(jié)省很多設(shè)計(jì)時(shí)間,直接調(diào)用即可。use 。end system。end ponent。 TRIG:OUT STD_LOGIC )。 TIM:OUT UNSIGNED(11 DOWNTO 0))。u3:LAUNCH port map(CLK_100KHz,TRIG_N)。use 。139。end case。ENTITY LAUNCH ISPORT(CLK_10U:IN STD_LOGIC。 THEN IF COUNT=12000 THEN COUNT=0。039。entity freq_div is port(clk_in_25MHz:in std_logic。event and clk_in_25MHz=39。end process。 end if。use 。 when0001=led_dig=10000110。 when1001=led_dig=11101111。 when0101=led_dig=01101101。 when0001=led_dig=00000110。 when1001=led_dig=01101111。USE 。 N=X*17/100。 LIBRARY IEEE。SIGNAL TIM_COU:SUB_IN:=0。 END IF 。END ARCHITECTURE。 END ENTITY。 5k ELSIF T=1 AND T88 THEN COUNT_SUM=4。)then if(t25000)then t:=t+1。039。 END IF。 BUZZ=B AND (NOT SWITCH) and clk_out。EVENT AND CLK_100K=39。 temp_counter=not temp_counter。 END IF。SIGNAL COUNT:integer range 0 to 49。use 。 IF ECHO39。EVENT AND CLK_10U=39。USE 。 M=(NH*100)/10。USE 。 end case。 when0011=led_dig=01001111。 when0111=led_dig=00000111。 end case。 when0011=led_dig=11001111。 H_4,M_4,L_4:in std_logic_vector(3 downto 0)。 clk_out_100KHz=temp_counter_100KHz。beginif(clk_in_25MHz39。)then if(t12499)then t:=t+1。 clk_out_1KHz:out std_logic)。 END PROCESS。 END IF。END LAUNCH。end process。i:=1。entity scanner is port(clk_in:in std_logic。U5:MEASURE port map(T,m1,m2,m3)。COMPONENT switch1 ISPORT(CLK_100K,SWITCH:IN STD_LOGIC。ponent display isport(led_sel_in:in std_logic_vector(3 downto 0