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