提問者:jhmii2013-12-29 00:00
基于VHDL語(yǔ)言的汽車尾燈控制電路的設(shè)計(jì) 摘要:本課題主要是基于可編程邏輯器件,使用硬件描述語(yǔ)言VHDL,采用“自頂向下”的設(shè)計(jì)方法編寫程序?qū)崿F(xiàn)汽車尾燈的控制,并對(duì)控制器進(jìn)行編程下載,它的體積小,功耗低,成本低,安全可靠,能實(shí)現(xiàn)控制器的在系統(tǒng)編程,其升級(jí)與改進(jìn)極為方便。 關(guān)鍵詞: VHDL 汽車尾燈控制 時(shí)鐘信號(hào) 1. 尾燈控制電路總框圖, 根據(jù)電路總框圖的描述,我們大概可以了解到整個(gè)汽車控制尾燈的工作原理,從中我們可以發(fā)現(xiàn)當(dāng)左右轉(zhuǎn)信號(hào)同時(shí)有效時(shí),6盞燈的閃爍是通過一個(gè)與非門實(shí)現(xiàn)的。并且可以獲知本次設(shè)計(jì)的汽車尾燈控制電路主要分為三個(gè)模塊,即控制模塊,左轉(zhuǎn)LFTA模塊和右轉(zhuǎn)RITA模塊。了解到這幾點(diǎn),就可以對(duì)本次設(shè)計(jì)作較為詳盡的解釋。 2.模塊KONG。 模塊KONG如圖所示,此為整個(gè)程序的控制模塊。程序如下: Library ieee; Use ieee.std_logic_1164.all; Entity kong is Port(left,right:in std_logic; Lft,rit,lr:out std_logic); End kong; Architecture kong_logic of kong is Begin Process(left,right) Variable a:std_logic_vector(1 downto 0); Begin A:=left & right; Case a is When”00”=>lft<=’0’; Rit<=’0’; Lr <=’0’; When”10”=>lft<=’1’; Rit<=’0’; Lr <=’0’; When”01”=>rit<=’1’; Lft<=’0’; Lr <=’0’; When other=>rit<=’1’; lft<=’1’; lr<=’1’; end case; end process; end kong_arc; 控制模塊首先使用了庫(kù)說明語(yǔ)句:library ieee; Use ieee.std_logic_1164.all 使用ieee庫(kù)中的std_logic_1164程序包的全部資源。此控制模塊定義的實(shí)體名為kong。在程序中要求實(shí)體名與存儲(chǔ)的文件名一致。實(shí)體名為kong,則存儲(chǔ)的文件名為kong.vhd。且此段程序包有5個(gè)端口,其名稱分別為left. Right. Lft. Rit. Lr 。left 和right的端口方式是輸入,lft, rit, lr 是輸出,他們的端口類型都是std_logic的數(shù)據(jù)類型。實(shí)體說明部分結(jié)束以后,就是結(jié)構(gòu)體的說明部分。結(jié)構(gòu)體是整個(gè)VHDL語(yǔ)言中至關(guān)重要的一個(gè)組成部分,這個(gè)部分給出模塊的具體說明,指定輸入與輸出之間的行為。結(jié)構(gòu)體對(duì)實(shí)體的輸入輸出關(guān)系可以用三種關(guān)進(jìn)行描述,即行為描述,寄存器傳輸描述和結(jié)構(gòu)描述。只不過結(jié)構(gòu)體的框架是完全一樣的。本結(jié)構(gòu)體中包含有一個(gè)進(jìn)程語(yǔ)句,進(jìn)程語(yǔ)句中又包含有兩個(gè)敏感量process(left ,right),從begin開始到end process結(jié)束是一組順序執(zhí)行語(yǔ)句,ieee標(biāo)準(zhǔn)數(shù)據(jù)類型“std_logic_vector”定義了兩位位矢量1downto 0,變量為a。程序往下把left和right的與賦值給a,下面便執(zhí)行case語(yǔ)句了 ,case語(yǔ)句是無(wú)序的,所以所有條件表達(dá)式的值都是并行處理的。當(dāng)條件表達(dá)式的值為”00”時(shí)則把lft ,rit ,lr,都變?yōu)?,所有信號(hào)都無(wú)效。當(dāng)條件表達(dá)式為”10”時(shí),左轉(zhuǎn)信號(hào)lft有效,其它信號(hào)都無(wú)效,當(dāng)條件表達(dá)式的值為”01”時(shí)右轉(zhuǎn)信號(hào)rit有效,其余的無(wú)效。若條件表達(dá)式為其它的情況的話,那么就將rit ,lft ,lr 全部置1,即全部有效。最后結(jié)束case語(yǔ)句 end case .結(jié)束進(jìn)程和結(jié)構(gòu)體語(yǔ)句。 3. 模塊LFTA 源程序: Library ieee; Use ieee.std_logic_1164.all; Entity lfta is Port(en,clk,lr:in std_logic; L2,l1,l0:out std_logic); End lfta; Architecture lft_arc of lfta is Begin Process(clk,en,lr) Variable tmp:std_logic_vector(2 downto 0); Begin If lr=’1’ then Tmp:=”111”; Elsif en=’0’ then Tmp:=”000”; Elsif clk’event and clk=’1’ then If tmp=”000” then Tmp:=”001”; Else Tmp:=tmp(1 downto 0) & ‘0’; End if ; End if; L2<=tmp(2); L1<=tmp(1); L0<=tmp(0); End process; End lft_arc; 模塊LFTA同樣使用了ieee庫(kù)語(yǔ)句,定義的實(shí)體名為lfta,其共分為六個(gè)端口即en,clk,lr,l2,l1,l0,其中en,clk,lr為輸入,l2,l1,l0的端口方式為輸出,而它的端口類型同樣也為std_logic數(shù)據(jù)類型。LFTA程序中結(jié)構(gòu)體名為lft_arc,實(shí)體名為lfta 。結(jié)構(gòu)體中包含有一個(gè)進(jìn)程,共定義了三個(gè)敏感量clk,en,lr,設(shè)變量名tmp為2 downto 0 的三位位矢量。當(dāng)左右開關(guān)同時(shí)接通時(shí)lr有效,即lr=1,此時(shí)tmp:=”111”右邊的三盞燈全亮起來(lái),當(dāng)tr=1時(shí)但en=0則左邊三盞燈全滅不亮。而如果這兩種情況都不是的話,那么lr=’0’時(shí)當(dāng)時(shí)鐘上升沿脈沖到來(lái)時(shí),如果tmp=”000”則左邊第一盞燈亮,否則就將tmp(1 downto 0)和’0’的與賦值給tmp,那么依次左邊的三盞燈就能實(shí)現(xiàn)從左到右按次序亮滅了。最后將tmp(2)送到l2,tmp(1)送到l1,tmp(0)送到lo,結(jié)束程序和結(jié)構(gòu)體。這就是在實(shí)現(xiàn)左轉(zhuǎn)彎的時(shí)候執(zhí)行的程序的全過程。通過對(duì)左轉(zhuǎn)的理解,右轉(zhuǎn)彎就很容易了,其執(zhí)行的過程和左轉(zhuǎn)彎的時(shí)候非常相似的 。我們也可發(fā)現(xiàn)LFTA模塊的功能是當(dāng)左轉(zhuǎn)時(shí)控制左邊的三盞燈,當(dāng)左右轉(zhuǎn)信號(hào)都有效時(shí),輸出為全’1’。下面來(lái)看一下右轉(zhuǎn)彎控制模塊。 4.模塊RITA 源程序: Library ieee; Use ieee.std_logic_1164.all; Entity rita is Port(en,clk,lr:in std_logic; R2,r1,r0:out std_logic); End rita; Architecture rit_arc of rita is Begin Process(clk,en,lr) Variable tmp:std_logic_vector(2 downto 0); Begin If lr=’1’ then Tmp:=”111”; Elsif en=’0’ then Tmp:=”000”; Elsif clk’event and clk=’1’ then If tmp=”000” then Tmp:=”100”; Else Tmp:=’0’ & tmp(2 downto 1); End if; End if ; R2<=tmp(2); R1<=tmp(1); R0<=tmp(0); End process; End rit_arc; 和左轉(zhuǎn)彎時(shí)候的相同,右轉(zhuǎn)彎時(shí)再次使用了ieee的庫(kù)說明,這樣我們可以很清楚的理解了右轉(zhuǎn)彎的原理,此時(shí)庫(kù)定義的實(shí)體名為rita,對(duì)于實(shí)體名前面已經(jīng)講過了不再重復(fù)了,同樣的程序包中還是使用了6個(gè)端口en ,clk,lr,r2,r1,r0. en ,clk, lr的端口方式是輸入,r2,r1,r0的端口方式是輸出。結(jié)構(gòu)體中和左轉(zhuǎn)時(shí)相同引入一個(gè)進(jìn)程同時(shí)和三個(gè)敏感量:clk,en,lr。變量tmp為2downto 0的三位位矢量。當(dāng)左右開關(guān)同時(shí)接通時(shí)lr=’1’,那么此時(shí)變量tmp=’111’,即右面的三盞燈都有信號(hào),三盞燈全亮。否則lr=’0’,當(dāng)en=’0’時(shí),tmp=’000’,即三盞燈全滅掉。Elsif clk’event and clk=‘1’即當(dāng)時(shí)鐘脈沖上升沿到來(lái)時(shí),en=’1’,如果tmp=”000”,就把”100”送到tmp 此時(shí)右邊的第一盞燈亮。否則就把’0’和tmp(2 downto 1)的與送到tmp,則依次為右邊第一盞燈,第二盞,第三盞亮。然后結(jié)束if語(yǔ)句。這個(gè)之后就和左轉(zhuǎn)的程序是一樣的了,將tmp(2)中的數(shù)值送到r2,將tmp(1)中的數(shù)值送到r1,將tmp(0)中的數(shù)據(jù)送到r0,然后結(jié)束進(jìn)程語(yǔ)句和整個(gè)結(jié)構(gòu)體語(yǔ)句。那么到這里整個(gè)汽車尾燈的VHDL程序控制就結(jié)束了。 5.結(jié)論: 本次設(shè)計(jì)用到了硬件描述語(yǔ)言VHDL實(shí)現(xiàn)了對(duì)汽車尾燈的控制,總結(jié)整個(gè)設(shè)計(jì)程序我們可以發(fā)現(xiàn)一些問題; 設(shè)計(jì)中的優(yōu)點(diǎn):基本實(shí)現(xiàn)了汽車在運(yùn)行時(shí)候尾燈點(diǎn)亮方式的各種情況。 設(shè)計(jì)中的不足:由于在行車的時(shí)候都是用開關(guān)控制的,所以每一個(gè)開關(guān)應(yīng)該有一個(gè)消除機(jī)械振動(dòng)的裝置,可以利用基本RS觸發(fā)器來(lái)實(shí)現(xiàn),所以在條件允許的情況下可以對(duì)整個(gè)設(shè)計(jì)進(jìn)行進(jìn)一步的改進(jìn)。 6.參考資料: 王振紅 《VHDL數(shù)字電路設(shè)計(jì)與應(yīng)用實(shí)踐教程》 機(jī)械工業(yè)出版社 2006年1月 彭容修 《數(shù)字電子技術(shù)基礎(chǔ)》 武漢理工大學(xué)出版社 2005年9月 潘松 黃繼業(yè) 《EDA技術(shù)與VHDL》 清華大學(xué)出版社 2006年11月 2009.12.27 library ieee; use ieee.std_logic_1164.all; entity ZHUKONG is Port(left,right:in std_logic; Lft,rit,lr:out std_logic); end; architecture kong_arc of ZHUKONG is begin Process(left,right) Variable a:std_logic_vector(1 downto 0); Begin A:=left & right; Case a is When"00"=>lft<='0'; Rit<='0'; Lr <='0'; When"10"=>lft<='1'; Rit<='0'; Lr <='0'; When"01"=>rit<='1'; Lft<='0'; Lr <='0'; When others=>rit<='1'; lft<='1'; lr<='1'; end case; end process; end kong_arc; library ieee; use ieee.std_logic_1164.all; entity LFTA is Port(en,clk,lr:in std_logic; L2,l1,l0:out std_logic); end; architecture lft_arc of LFTA is begin Process(clk,en,lr) Variable tmp:std_logic_vector(2 downto 0); Begin If lr='1' then Tmp:="111"; Elsif en='0' then Tmp:="000"; Elsif clk'event and clk='1' then If tmp="000" then Tmp:="001"; Else Tmp:=tmp(1 downto 0) & '0'; End if; End if; L2<=tmp(2); L1<=tmp(1); L0<=tmp(0); End process; end lft_arc; library ieee; use ieee.std_logic_1164.all; entity RITA is Port(en,clk,lr:in std_logic; R2,r1,r0:out std_logic); end; architecture rit_arc of RITA is begin Process(clk,en,lr) Variable tmp:std_logic_vector(2 downto 0); Begin If lr='1' then Tmp:="111"; Elsif en='0' then Tmp:="000"; Elsif clk'event and clk='1' then If tmp="000" then Tmp:="100"; Else Tmp:='0' & tmp(2 downto 1); End if; End if ; R2<=tmp(2); R1<=tmp(1); R0<=tmp(0); End process; end rit_arc;
回答者:hxp9204012016-12-29 00:00
我在家設(shè)計(jì)好了 只要些仿真分析了 還有要把圖在電腦上畫出來(lái) 我正在安裝protel2004 現(xiàn)在裝了 馬上可以畫了 嗎的誰(shuí)說要些60 70頁(yè)啊 一個(gè)分析和幾個(gè)報(bào)告要寫一本嗎 有1多頁(yè)一定搞定#28
提問者:jujkik95732014-06-24
汽車尾燈譯碼顯示電路設(shè)計(jì)….. 4.1 顯示驅(qū)動(dòng)電路設(shè)計(jì)…. 4.2 譯碼電路已經(jīng)發(fā)到你郵箱了。 你不是設(shè)計(jì)方案寫好了嘛。 最簡(jiǎn)單的嵌入式
提問者:wqwfeds2013-09-07
深度涉及電工知識(shí)。要有晶體振蕩器,很多感應(yīng)器,電容器,還有電阻之類,要詳細(xì)的電路圖才能解讀
提問者:vvvv302013-11-24
89s52汽車尾燈控制電路設(shè)計(jì)資料 附件:89s52汽車尾燈控制電路設(shè)計(jì)資料.rar
提問者:lu_犬犬2013-06-08
自己百度啊
提問者:afeng1552014-08-18
已發(fā)到郵箱,請(qǐng)查收。 也可以到這個(gè)地址獲得 向左轉(zhuǎn)|向右轉(zhuǎn)?t=1308918114109&t=1308918350703
提問者:limingtao42016-12-23