-
1 # yangjiang
-
2 # 17047267834
1 設計簡介
1。1初始條件:
本課程設計,要求用中、小規模積體電路晶片7400、7404、74138、7476、7486和其它器件實現對汽車尾燈顯示的控制功能。工作電源Vcc為12V。電路組成框圖。如圖1所示:
圖1 電路方框圖
1。
2要求完成的主要任務:
1。2。1設計任務
根據已知條件,設計、製作一個汽車尾燈顯示的控制電路。
1。2。2設計要求
設汽車尾部左右兩側各有3個指示燈(用發光管模擬),。要求是:
① 汽車正常行駛時,尾燈全部熄滅。
② 當汽車右轉彎時,右側3個指示燈按右循順序點亮。
④ 臨時剎車時,所有指示燈同時閃爍。
⑤ 選擇電路方案,完成對確定方案電路的設計。計算電路元件引數與元件選擇、並畫出總體電路原理圖,闡述基本原理。
製作實際執行裝置。(選做:用EWB軟體完成模擬),並按規定格式寫出設計報告書。
目錄
1設計簡介……………………………………………………………………………1
1。1設計要求………………………………………………………………………1
1。
2要求完成的主要任務…………………………………………………………1
2設計原理……………………………………………………………………………2
2。1汽車尾燈顯示狀態與汽車執行的狀態的關係……………………………… 2
2。2汽車尾燈控制器功能………………………………………………………… 2
2。
3系統框圖……………………………………………………………………… 3
3單元電路設計與分析………………………………………………………………4
3。1開關控制電路………………………………………………………………… 4
3。2三進位制計數器………………………………………………………………… 6
3。
3譯碼與顯示驅動電路………………………………………………………… 8
3。4尾燈狀態顯示電路……………………………………………………………11
4 設計總體電路圖………………………………………………………………… 12
5 電路的模擬與模擬……………………………………………………………… 13
6 總結……………………………………………………………………………… 14
7 體會……………………………………………………………………………… 15
8 致謝……………………………………………………………………………… 16
9 參考文獻…………………………………………………………………………。
17
附錄1 整體電路圖……………………………………………………………。。 18
附錄2 元件清單…………………………………………………………………19
參考: 。
回覆列表
基於VHDL語言的汽車尾燈控制電路的設計 摘要:本課題主要是基於可程式設計邏輯器件,使用硬體描述語言VHDL,採用“自頂向下”的設計方法編寫程式實現汽車尾燈的控制,並對控制器進行程式設計下載,它的體積小,功耗低,成本低,安全可靠,能實現控制器的在系統程式設計,其升級與改進極為方便。 關鍵詞: VHDL 汽車尾燈控制 時鐘訊號 1. 尾燈控制電路總框圖, 根據電路總框圖的描述,我們大概可以瞭解到整個汽車控制尾燈的工作原理,從中我們可以發現當左右轉訊號同時有效時,6盞燈的閃爍是透過一個與非門實現的。並且可以獲知本次設計的汽車尾燈控制電路主要分為三個模組,即控制模組,左轉LFTA模組和右轉RITA模組。瞭解到這幾點,就可以對本次設計作較為詳盡的解釋。 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程式包的全部資源。此控制模組定義的實體名為kong。在程式中要求實體名與儲存的檔名一致。實體名為kong,則儲存的檔名為kong.vhd。且此段程式包有5個埠,其名稱分別為left. Right. Lft. Rit. Lr 。left 和right的埠方式是輸入,lft, rit, lr 是輸出,他們的埠型別都是std_logic的資料型別。實體說明部分結束以後,就是結構體的說明部分。結構體是整個VHDL語言中至關重要的一個組成部分,這個部分給出模組的具體說明,指定輸入與輸出之間的行為。結構體對實體的輸入輸出關係可以用三種關進行描述,即行為描述,暫存器傳輸描述和結構描述。只不過結構體的框架是完全一樣的。本結構體中包含有一個程序語句,程序語句中又包含有兩個敏感量process(left ,right),從begin開始到end process結束是一組順序執行語句,ieee標準資料型別“std_logic_vector”定義了兩位位向量1downto 0,變數為a。程式往下把left和right的與賦值給a,下面便執行case語句了 ,case語句是無序的,所以所有條件表示式的值都是並行處理的。當條件表示式的值為”00”時則把lft ,rit ,lr,都變為0,所有訊號都無效。當條件表示式為”10”時,左轉訊號lft有效,其它訊號都無效,當條件表示式的值為”01”時右轉訊號rit有效,其餘的無效。若條件表示式為其它的情況的話,那麼就將rit ,lft ,lr 全部置1,即全部有效。最後結束case語句 end case .結束程序和結構體語句。 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庫語句,定義的實體名為lfta,其共分為六個埠即en,clk,lr,l2,l1,l0,其中en,clk,lr為輸入,l2,l1,l0的埠方式為輸出,而它的埠型別同樣也為std_logic資料型別。LFTA程式中結構體名為lft_arc,實體名為lfta 。結構體中包含有一個程序,共定義了三個敏感量clk,en,lr,設變數名tmp為2 downto 0 的三位位向量。當左右開關同時接通時lr有效,即lr=1,此時tmp:=”111”右邊的三盞燈全亮起來,當tr=1時但en=0則左邊三盞燈全滅不亮。而如果這兩種情況都不是的話,那麼lr=’0’時當時鐘上升沿脈衝到來時,如果tmp=”000”則左邊第一盞燈亮,否則就將tmp(1 downto 0)和’0’的與賦值給tmp,那麼依次左邊的三盞燈就能實現從左到右按次序亮滅了。最後將tmp(2)送到l2,tmp(1)送到l1,tmp(0)送到lo,結束程式和結構體。這就是在實現左轉彎的時候執行的程式的全過程。透過對左轉的理解,右轉彎就很容易了,其執行的過程和左轉彎的時候非常相似的 。我們也可發現LFTA模組的功能是當左轉時控制左邊的三盞燈,當左右轉訊號都有效時,輸出為全’1’。下面來看一下右轉彎控制模組。 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; 和左轉彎時候的相同,右轉彎時再次使用了ieee的庫說明,這樣我們可以很清楚的理解了右轉彎的原理,此時庫定義的實體名為rita,對於實體名前面已經講過了不再重複了,同樣的程式包中還是使用了6個埠en ,clk,lr,r2,r1,r0. en ,clk, lr的埠方式是輸入,r2,r1,r0的埠方式是輸出。結構體中和左轉時相同引入一個程序同時和三個敏感量:clk,en,lr。變數tmp為2downto 0的三位位向量。當左右開關同時接通時lr=’1’,那麼此時變數tmp=’111’,即右面的三盞燈都有訊號,三盞燈全亮。否則lr=’0’,當en=’0’時,tmp=’000’,即三盞燈全滅掉。Elsif clk’event and clk=‘1’即當時鍾脈衝上升沿到來時,en=’1’,如果tmp=”000”,就把”100”送到tmp 此時右邊的第一盞燈亮。否則就把’0’和tmp(2 downto 1)的與送到tmp,則依次為右邊第一盞燈,第二盞,第三盞亮。然後結束if語句。這個之後就和左轉的程式是一樣的了,將tmp(2)中的數值送到r2,將tmp(1)中的數值送到r1,將tmp(0)中的資料送到r0,然後結束程序語句和整個結構體語句。那麼到這裡整個汽車尾燈的VHDL程式控制就結束了。 5.結論: 本次設計用到了硬體描述語言VHDL實現了對汽車尾燈的控制,總結整個設計程式我們可以發現一些問題; 設計中的優點:基本實現了汽車在執行時候尾燈點亮方式的各種情況。 設計中的不足:由於在行車的時候都是用開關控制的,所以每一個開關應該有一個消除機械振動的裝置,可以利用基本RS觸發器來實現,所以在條件允許的情況下可以對整個設計進行進一步的改進。 6.參考資料: 王振紅 《VHDL數位電路設計與應用實踐教程》 機械工業出版社 2006年1月 彭容修 《數位電子技術基礎》 武漢理工大學出版社 2005年9月 潘松 黃繼業 《EDA技術與VHDL》 清華大學出版社 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;