版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 電子技術(shù)</b></p><p><b> 課程設(shè)計報告</b></p><p> 第一部分 設(shè)計題目及要求</p><p> 本次課程設(shè)計的題目及要求如下:</p><p><b> 一、設(shè)計題目</b></p><
2、p><b> 紅外線遙控接收器</b></p><p><b> 二、設(shè)計步驟</b></p><p> 1、EDA實驗板組裝調(diào)試</p><p> 參照提供的EDA實驗板電路原理圖、PCB圖以及元器件清單進(jìn)行電路板的組裝。電路板組裝完成后,編寫三個小程序進(jìn)行電路板測試。</p><p&g
3、t; 2、紅外遙控系統(tǒng)的設(shè)計</p><p><b> ?。?)發(fā)射編碼部分</b></p><p> 使用指定的元器件在萬用板上完成紅外遙控器的制作。</p><p><b> ?。?)接收解碼部分</b></p><p> 接收解碼用VHDL語言編寫程序,在EDA實驗板上實現(xiàn)解碼。<
4、/p><p><b> 二、功能要求</b></p><p> 1、將一體化紅外接收解調(diào)器的輸出信號解碼(12個單擊鍵、6個連續(xù)鍵,單擊鍵編號為7-18,連續(xù)鍵編碼為1-6),在EDA實驗板上用七段數(shù)碼管顯示出來。</p><p> 2、當(dāng)按下遙控器1—6號連續(xù)鍵時,在EDA實驗板上用發(fā)光二極管點亮作為連續(xù)鍵按下的指示,要求遙控器上連續(xù)鍵接下
5、時指示燈點亮,直到松開按鍵時才熄滅,用于區(qū)別單擊鍵。</p><p> 3、EDA實驗板上設(shè)置四個按鍵,其功能等同于遙控器上的1—4號按鍵,當(dāng)按下此四個按鍵時七段數(shù)碼管分別對應(yīng)顯示“1”、“2”、“3”、“4”。</p><p> 4、每當(dāng)接收到有效按鍵時,蜂鳴器會發(fā)出提示音。</p><p> 第二部分 設(shè)計分析</p><p>
6、 本次課程設(shè)計包括兩大部分,一是電路設(shè)計及電路焊接,二是程序的設(shè)計及編寫。</p><p> 電路部分,根據(jù)題目要求,要做到紅外發(fā)送,顯然整個電路系統(tǒng)要分為紅外發(fā)射和紅外接收兩個電路,分別做到紅外的編碼發(fā)射和譯碼接受,再在接收板上顯示接受到的紅外信號。另外還包括一個從電腦下載程序到芯片上的下載線電路。</p><p><b> 紅外發(fā)射電路</b></p&
7、gt;<p> 本次課程設(shè)計的紅外遙控器由紅外遙控專用芯片PT2248作為編碼及發(fā)送部分,PT2248最大可用作18路紅外遙控系統(tǒng)的編碼,其內(nèi)部己集成了38kHz的紅外載波振蕩及相應(yīng)的數(shù)字脈碼調(diào)制電路,只需外接3×6的矩陣式按鍵、紅外發(fā)光二極管及其驅(qū)動電路等少量元器件便可完成編碼發(fā)送的功能。</p><p> 由PT2248和少量外圍元件組成的紅外遙控發(fā)射電路如下圖所示</p&g
8、t;<p> 芯片的發(fā)送指令由12位碼組成,其中C1~C3是用戶碼,可用來確定不同的模式。用戶碼設(shè)定是以列線內(nèi)接入二極管為界線,當(dāng)T1~T3與CODE之間分別接入二極管時,用戶碼(C1~C3)為“1”;當(dāng)T1~T3引腳不接二極管時,用戶碼為“0”。如果該芯片與BL9150相結(jié)合,則C3引腳必須接入二極管;如果該芯片與BL9149相結(jié)合,則C2必須接二極管,H、S1和S2是代表連續(xù)發(fā)送或單次發(fā)送的碼,且分別與T1、T2和T
9、3列的鍵對應(yīng)。D4~D6是發(fā)送的數(shù)據(jù)碼(也是鍵輸入碼)</p><p> 上圖中3V電源電壓一方面為芯片提供推薦工作電壓并加到引腳16,另一方面作為信號輸出指示復(fù)合管的工作電壓。為了使振蕩頻率為455kHz,特采用外接晶振,并外接兩個電容120pF旁路到地。圖7中三列T1、T2、T3和CODE分別接一個二極管,目的是為了使用戶碼(C1、C2、C3)為“1”。</p><p><b&
10、gt; 紅外接受部分 </b></p><p> 本次課程設(shè)計的紅外接受部分采用EDA實驗板,EDA實驗板的頂層PCB圖如下:</p><p><b> . </b></p><p><b> 硬件部分的設(shè)計:</b></p><p> 板的中心部件采用的是max7000系列C
11、PLD,另外采用4M晶振以及紅外接收管(38K接收頭)直接在邏輯箱制作紅外接收解碼電路。紅外接收管有3個管腳,自左至右分別是信號輸出端,地端,電源端,分別接到邏輯箱的相應(yīng)管腳上;同時,為了得到更加穩(wěn)定的信號,在信號輸出端與地端加入一濾波電容。</p><p><b> 三,下載線電路</b></p><p> 本次課程設(shè)計采用的下載線把電腦的打印機(jī)口和實驗板的數(shù)據(jù)
12、口連接起來,從而把程序從電腦下載到實驗板的芯片里,</p><p> 第三部分 系統(tǒng)模塊的劃分以及各模塊的功能描述</p><p> 在這一部分,我將對系統(tǒng)功能進(jìn)行模塊化劃分,對各模塊功能作詳細(xì)闡述。</p><p><b> 發(fā)射板部分</b></p><p> 發(fā)射板主要由紅外線編碼芯片PT2248 構(gòu)成紅
13、外編碼這個模塊。</p><p> PT2248的管腳圖如下圖所示:</p><p> 其各個管腳的功能如下表:</p><p> PT2248組成的十八路遙控發(fā)送器其編碼規(guī)則如下:</p><p> ?。?)設(shè)a為一個時間單位,時間長度是38kHz的16個時鐘周期,即</p><p> a=1÷38
14、kHz×16=0.421ms</p><p> 編碼是以串行形式發(fā)送的,在接收端(38kHz一體化紅外接收解調(diào)器)接收到如下形式的1位的編碼時分別表示“0”和“1”:</p><p> 1個a的低電平,3個a的高電平表示編碼“0”</p><p> 3個a的低電平,1個a的高電平表示編碼“1”</p><p> 編碼以串行形
15、式發(fā)送,接收端的一體化紅外接收解調(diào)器輸出波形如下圖所示:</p><p> 此外,由于發(fā)射器發(fā)送的時候,有兩個信號,一種是表示單擊的,一種則是表示連續(xù)的,這兩種不同的信號,其自身都有自己的特點:</p><p> ?。?)遙控器的每個按鍵編碼由12位按以上編碼規(guī)則所代表的“0”、“1”組成,時間長度為48a,當(dāng)按下遙控器的7到18號單擊按鍵,則以12位為一組(48a)發(fā)送兩次編碼,<
16、;/p><p> 60a為自按下按鍵到發(fā)送編碼的等待時間,80a是前后兩次發(fā)送12位48a編碼的高電平時間間隔。7到18號單擊按鍵無論發(fā)送端按鍵時間持續(xù)多長只發(fā)送一次這樣形式的兩組相同的12位編碼。</p><p> (3)當(dāng)按下1到6號連續(xù)按鍵時,編碼按如下格式連續(xù)發(fā)送:</p><p> ,兩種信號的巨大差別,可是在程序的編寫過程中,這種差別卻沒有什么很大的作
17、用,因為兩種信號在譯碼上的區(qū)別也是相當(dāng)明顯的,故為了簡化程序,直接由譯碼來區(qū)別連續(xù)單擊比利用上圖的效果更好,具體見程序。</p><p> ?。?)芯片的發(fā)送指令由12位碼組成,如下所列。其中C1~C3是用戶碼,可用來確定不同的模式。用戶碼設(shè)定是以列線內(nèi)接入二極管為界線,當(dāng)T1~T3與CODE之間分別接入二極管時,用戶碼(C1~C3)為“1”;當(dāng)T1~T3引腳不接二極管時,用戶碼為“0”。</p>
18、<p> 具體每個12位的串行編碼規(guī)則如下:</p><p> C1、C2、C3為用戶可通過在遙控器發(fā)射電路中是否接入IN4148二極管決定其為“0”或“1”,這里取“111”,H、S1、S2為單擊連續(xù)按鍵的標(biāo)志位,相當(dāng)于列坐標(biāo),D1至D6為按鍵輸入碼,相當(dāng)于行坐標(biāo),低9位的按鍵編碼如下表所示:</p><p><b> 續(xù)上表:</b></p&
19、gt;<p><b> 二,接收部分</b></p><p> 接收部分電路主要可分為紅外接受模塊,譯碼電路模塊,小鍵盤模塊和數(shù)碼管顯示模塊幾個部分,紅外信號的編碼從發(fā)射板發(fā)射到接收板上的紅外信號接收頭后 ,譯碼電路把紅外編碼翻譯后送到數(shù)碼管顯示,小鍵盤輸入的代碼也經(jīng)譯碼電路在數(shù)碼管上顯示對應(yīng)的按鍵信息。</p><p> (一).紅外信號接受&l
20、t;/p><p> 本課程設(shè)計的紅外接受頭采用一體化紅外接收解調(diào)器,如下圖:</p><p><b> 其引腳圖如下:</b></p><p> 一體化紅外接收解調(diào)器的內(nèi)部電路如下圖:</p><p> 上面詳述的紅外信號發(fā)射電路把發(fā)射板上的按鍵信息編成編碼以紅外信號的形式發(fā)射到接收板,該一體化紅外接收解調(diào)器接收到紅
21、外信息后,把其包含的編碼信息傳到下一級譯碼電路,從而完成紅外信號的接收。</p><p> 當(dāng)紅外接收頭接收到遙控器發(fā)出的信號時,邏輯箱上的蜂鳴器需發(fā)出提示聲。因設(shè)計時只考慮譯碼器具有最簡單的譯碼功能,這樣就要求前面的編碼電路在每發(fā)出一串12位編碼的同時發(fā)出一個脈沖給計數(shù)器,使計數(shù)器輸出為高電平,同時開始計數(shù),直至計數(shù)到規(guī)定值后又回到低電平,完成響鈴提示。(二)紅外編碼譯碼電路</p><
22、p> 根據(jù)芯片介紹可知,紅外接收頭接收到的編碼,每一幀完整的串行數(shù)據(jù)有十二位,而每一位的BIT‘0’、BIT‘1’是占空比不同的矩形方波,要完成以后的功能,就需要一個編碼器將其編成邏輯器件能識別的普通邏輯電平‘0’、‘1’。</p><p> 紅外接收頭接收負(fù)責(zé)接收38k載波的紅外光,解調(diào)得到脈沖,輸出至譯碼電路。接收頭接收到的脈沖如圖(與發(fā)射波形剛好互為反碼): (a為38kHz時鐘的16個周期)&l
23、t;/p><p> 每個按鍵的值由12bit組成:</p><p><b> 按鍵編碼格式:</b></p><p> 譯碼電路有把對應(yīng)的譯碼程序下載后的CPLD構(gòu)成,CPLD的外圍電路如下圖:</p><p> 一體化紅外接收解調(diào)器接收到紅外信息后,將紅外編碼通過73HC4040傳到CPLD進(jìn)行譯碼。</p&
24、gt;<p> ?。ㄈ┘t外編碼顯示電路</p><p> 這部分電路將譯碼后得到的十二位普通高低電平‘0、’‘1’編碼譯成相應(yīng)的壓縮BCD碼1~18,應(yīng)十位僅有0、1兩種可能,將譯得的BCD碼直接接芯片4511的輸入引腳,4511的譯碼輸出并接到4位LED數(shù)碼顯示管,再在程序中寫入十位和個位選擇的進(jìn)程,即可得到相應(yīng)1~18數(shù)字顯示輸出。</p><p> 顯示部分電路由
25、芯片CD4511BC構(gòu)成,譯碼后的高低電平從CPLD的44,45,46,48,49管腳傳輸?shù)紺D4511BC,進(jìn)行譯碼,這部份電路如下:</p><p> CPLD的33——41角分別接到三級管(8050)Q2——Q9,通過段路線,選擇兩個四位LED數(shù)碼顯示管里的共八位顯示中的哪一位或哪幾位顯示,沒有接段路線的那些位的顯示管將不亮</p><p> 其真值表及對應(yīng)的LED數(shù)碼顯示管顯示
26、如下:</p><p><b> ?。ㄋ模┬℃I盤電路</b></p><p> EDA實驗板上有個4*4 的按鍵矩陣,當(dāng)按鍵被按下時,其輸出引腳為低電平,而其余時間內(nèi)均為高電平。當(dāng)按下每一行的四個鍵時,七段碼顯示管應(yīng)顯示1—4,必須將四個按鍵并行輸入的按鍵編碼轉(zhuǎn)換成1—4的BCD碼才能輸出顯示。按鍵輸入與遙控輸入應(yīng)共用兩個七段碼顯示管輸出,這樣就需要在程序中將輸入的
27、遙控信號與按鍵信號先進(jìn)行選擇再輸出。</p><p> 這部分電路如下圖所示:</p><p> 第四部分 程序設(shè)計及帶注釋源程序</p><p> 一、本次課程設(shè)計的程序設(shè)計的ASM圖如下:</p><p> 二、程序設(shè)計時的主要部分以及遇到的問題及解決方案:</p><p> 1、頻率的同步問題:<
28、;/p><p> 這是本程序的一個關(guān)卡,由于信號的載波是16k,而晶振的頻率采用了4M,就是說無論怎么分頻,邏輯箱出來的頻率都不可能得到載波信號的頻率,所以有可能經(jīng)過幾次解碼之后便出現(xiàn)誤碼。</p><p> 本設(shè)計具體采用的處理措施如下:4M的2的7次方分頻(沒有安裝word的公式,請見諒哦),所得到一個信號(即4個a)為14倍clk,這里用到一個cnt1,每個時鐘上升沿計數(shù)一次,計數(shù)到
29、第7個時鐘上升沿時,便進(jìn)行讀數(shù),根據(jù)0和1波形的特點,可知在此時輸入信號infared_in與其真正表示的值相反,故有:</p><p> if cnt1=7 then reg2<=reg2(7 downto 0) & not txout;</p><p><b> end if;</b></p><p> 在第14個clk
30、后,剩下的0.2個clk將產(chǎn)生誤碼,故采取以下措施:</p><p> when T1=> </p><p> if cnt1=50 then</p><p><b> cnt1<=0;</b></p><p> state<=T0;</p><p><b>
31、 else</b></p><p> cnt1<=cnt1+1;</p><p><b> end if; </b></p><p> 計到第14個clk時(由于其中經(jīng)過兩個狀態(tài),所以計數(shù)只計到12),又回到T0,重新檢測infared_in=‘0’后回到T1狀態(tài),從而取出那0.2個clk的影響。</p>
32、<p> 2)如何判斷接收到一串完整的12位數(shù)據(jù)問題:</p><p> 如果采用cnt1計數(shù)來控制的話,會導(dǎo)致cnt1的取值過大,而且會出現(xiàn)誤差時間的積累,故本程序用到的第二個計數(shù)器cnt2,其作用也不容小視,在每一次cnt1=7時,都會將cnt2自加,如下:</p><p> If cnt1=7 then </p><p> cnt2<
33、=cnt2+1; </p><p> reg<=reg (7 downto 0) & not infared_in; </p><p> end if; </p><p> if cnt2=12 then </p><p><b> cnt2
34、<=0;</b></p><p> speaker<='1';</p><p><b> end if; </b></p><p> 這是用來記錄移入寄存器reg的次數(shù),計到12時,說明已經(jīng)接收了1個完整的信號了,此時把cnt2清零,以便下一次接收信號時使用。</p><p>
35、; 3) 指示燈跟蜂鳴器的問題:</p><p> 當(dāng)接收一個完整的信號之后,當(dāng)讓就是對這存在reg中的一串01代碼進(jìn)行譯碼了,同時根據(jù)題目要求,蜂鳴器要相應(yīng)的響一聲。故當(dāng)cnt2=12時sound賦為高電平,并啟用第三個計數(shù)器cnt3,cnt3在下一個時鐘上升沿開始自加,加至16000,即延時16000/16k=1秒后停止,后將sound從新賦0。具體實現(xiàn)如下:</p><p>
36、if cnt2=12 then</p><p><b> cnt2<=0;</b></p><p> speaker<='1';</p><p><b> end if;</b></p><p> if speaker='1' then </
37、p><p> cnt3<=cnt3+1;</p><p> if cnt3=16000 then</p><p><b> cnt3<=0;</b></p><p> speaker<='0';</p><p><b> end if;</b
38、></p><p><b> end if;</b></p><p> 4、EDA板上的按鍵問題:EDA試驗板的按鍵的每一行的四個按鍵分別對應(yīng)B1 ,B2,B3,B4,具體實現(xiàn)只是在時鐘上升沿下加入一下程序段即可。</p><p> if B1='0' then </p><p> reg&
39、lt;="100100000";</p><p><b> end if;</b></p><p> if B2='0' then </p><p> reg<="100010000";</p><p><b> end if;</b&
40、gt;</p><p> if B3='0' then</p><p> reg<="100001000";</p><p><b> end if;</b></p><p> if B4='0' then </p><p> r
41、eg<="100000100";</p><p><b> end if;</b></p><p><b> 源程序</b></p><p> 綜合上面所討論的幾點,可的得到本次課程設(shè)計的源程序(帶注釋)</p><p> library ieee;</p&g
42、t;<p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity infared is</p><p> port (clk,infared_in,B1,B2,B3,B4,reset:in std_logic; </p
43、><p> --B1.B2.B3.B4為實驗版上4*4鍵盤每一行對應(yīng)的4個按鍵</p><p> --infared_in為紅外接收頭接收并解碼輸出的信號</p><p> BCD_out : out std_logic_vector(3 downto 0); </p><p> --芯片輸出到4511的經(jīng)紅外編碼后的12位按鍵碼
44、對應(yīng)的4位代碼</p><p> selet: out std_logic_vector(1 downto 0); </p><p> --數(shù)碼顯示管十位和個位的選擇信號</p><p> led,speaker : buffer std_logic); </p><p> --連續(xù)鍵的
45、指示燈信號,按鍵按下即蜂鳴器信號</p><p> end infared;</p><p> architecture behav of infared is</p><p> type state_type is (s0,s1,s2);</p><p> signal state : state_type;</p>
46、<p> signal reg : std_logic_vector(8 downto 0);</p><p> signal cnt1 : integer range 0 to 14;</p><p> --0, 1解碼計數(shù)器。對0的個數(shù)的計數(shù),遇到0則開始計數(shù),遇到1就停止,以區(qū)別0和1的編碼</p><p> signal cnt2 : in
47、teger range 0 to 12;</p><p> --輸入的編碼位數(shù)計數(shù)器,計數(shù)到到12就把編碼輸出到infared_in</p><p> signal cnt3 : integer range 0 to 16000;</p><p> --蜂鳴器延時計數(shù)器</p><p> signal cnt4 : integer r
48、ange 0 to 1;</p><p> --個位十位選擇計數(shù)器,為0時數(shù)碼管顯示個位,為1顯示十位</p><p><b> begin</b></p><p> judge:process (clk,infared_in,cnt1) </p><p> --進(jìn)程1,判斷是否接受到低電平,紅外接受低電平有
49、效,infared_in=0時表示有編碼輸入</p><p> begin </p><p> if clk'event and clk='1' then</p><p> case state is</p><p> when s0=> if infared_in='0'
50、 then </p><p> state<=s1;</p><p><b> else </b></p><p> state<=s0; </p><p> --檢測輸入信號,如果是高電平則繼續(xù)檢測;如果為低電平則進(jìn)入狀態(tài)s1</p><p>
51、<b> end if; </b></p><p> when s1=> if cnt1=12 then </p><p><b> cnt1<=0;</b></p><p> state<=s2;</p><p> else cnt1<=cnt1+1;
52、 </p><p> --計數(shù)到12時,跳到s2狀態(tài),繼續(xù)檢測低電平</p><p><b> end if;</b></p><p> when s2=> </p><p> if infared_in='1' then </p><
53、p> --若出現(xiàn)高電平則跳回s0狀態(tài) </p><p> state<=s0;</p><p><b> else </b></p><p> state<=s2;</p><p><b> end if;</b></p><p><b>
54、; end case;</b></p><p> end if; </p><p> --當(dāng)計數(shù)到7時,自動跳到進(jìn)程com2,每接收完一個完整的0或1信號后,自動接收下一個信號,自身不停地在兩個狀態(tài)中輪換。</p><p> end process judge;<
55、;/p><p> coding:process(clk,cnt1,cnt2,cnt3,B1,B2,B3,B4) </p><p><b> --編碼譯碼進(jìn)程</b></p><p><b> begin</b></p><p> if clk'event and clk=
56、39;1' then</p><p> if B1='0' then </p><p> reg<="100100000"; </p><p> --B1按下,寄存器儲存表示00000001的代碼。</p><p><b> end if; </b&g
57、t;</p><p> if B2='0' then </p><p> reg<="100010000"; </p><p> --B2按下,寄存器儲存表示00000010的代碼。</p><p><b> end if;</b></p>
58、<p> if B3='0' then </p><p> reg<="100001000"; </p><p> --B3按下,寄存器儲存表示00000011的代碼。</p><p><b> end if;</b></p><p>
59、 if B4='0' then </p><p> reg<="100000100"; </p><p> --B4按下,寄存器儲存表示00000100的代碼。</p><p><b> end if;</b></p><p> if cnt1=7 t
60、hen </p><p> cnt2<=cnt2+1; </p><p> --cnt2加1,表示移入一位數(shù)據(jù)</p><p> reg<=reg (7 downto 0) & not infared_in; </p>
61、<p> end if; </p><p> --當(dāng)計數(shù)到7時,將接收到的infared_in的相反值移入寄存器。</p><p> if cnt2=12 then </p><p> --當(dāng)cnt2計數(shù)到12時,表示接收到了完整
62、的一串?dāng)?shù)據(jù),自身清零并開啟蜂鳴器</p><p><b> cnt2<=0;</b></p><p> speaker<='1';</p><p><b> end if;</b></p><p> if speaker='1' then <
63、/p><p> cnt3<=cnt3+1;</p><p> if cnt3=16000 then</p><p><b> cnt3<=0;</b></p><p> speaker<='0'; </p><p&
64、gt; --計數(shù)cnt3計到16000時賦0,蜂鳴器停止,即蜂鳴器鳴響時間持續(xù)16000/16k=1秒后停止</p><p><b> end if;</b></p><p><b> end if; </b></p><p><b> end if;</b></p><p
65、> end process coding;</p><p> display:process(clk,reg,reset) </p><p> --顯示進(jìn)程。低9位編碼轉(zhuǎn)換成對應(yīng)的BCD輸出,1-6連續(xù)按鍵燈亮,7-18單擊鍵燈滅, </p><p><b> begin</b>
66、</p><p> if(reset='1') then --高電平復(fù)位</p><p> BCD_out<="0000";</p><p> selet<="11";</p><p> led<
67、='1'; </p><p> --若按下復(fù)位鍵,十位個位同時顯示0,指示燈亮</p><p> elsif (clk'event and clk='1') then</p><p> led<='1';
68、 </p><p> case reg is</p><p> when "100100000" => BCD_out<="0001"; --顯示1</p><p> selet<="01";</p>
69、<p><b> led<='0';</b></p><p> when "100010000" =>BCD_out<="0010"; --顯示2</p><p> selet<="01";</p><p&
70、gt;<b> led<='0';</b></p><p> when "100001000" => BCD_out<="0011"; --顯示3</p><p> selet<="01";</p><p><
71、;b> led<='0';</b></p><p> when "100000100" => BCD_out<="0100"; --顯示4</p><p> selet<="01";</p><p><b>
72、 led<='0';</b></p><p> when "100000010" => BCD_out<="0101"; --顯示5</p><p> selet<="01";</p><p><b> led&
73、lt;='0';</b></p><p> when "100000001" => BCD_out<="0110"; --顯示6</p><p> selet<="01"; </p><p><b> led<
74、;='0';</b></p><p> when "010100000" => BCD_out<="0111"; --顯示7</p><p> selet<="01"; </p><p><b> led<=
75、9;1';</b></p><p> when "010010000" => BCD_out<="1000"; --顯示8</p><p> selet<="01";</p><p><b> led<='1
76、9;;</b></p><p> when "010001000" => BCD_out<="1001"; --顯示9</p><p> selet<="01";</p><p> led<='1';
77、 </p><p> --連續(xù)鍵時led賦為高電平,燈亮;sel賦值''01''表示采用個位顯示</p><p> when "010000100" =>if (cnt4=0) then</p><p> cnt4<=cnt4+1;</p><p>
78、BCD_out<="0000"; --個位顯示0</p><p> selet<="01";</p><p> else cnt4<=0;</p><p> BCD_out<="0001"; --十位顯示1</p>
79、<p> selet<="10";</p><p> end if; </p><p> --兩位數(shù)利用計數(shù)器cnt4實現(xiàn)個、十位輪流顯示。</p><p> when "010000010" =>if (cnt4=0) then</p>
80、<p> cnt4<=cnt4+1;</p><p> BCD_out<="0001"; --個位顯示1</p><p> selet<="01"; </p><p> else cnt4<=0;</p><p> BCD_out&
81、lt;="0001"; --十位顯示1</p><p> selet<="10"; </p><p> end if; </p><p> when "010000001" => if (cnt4=0) then</p><p>
82、; cnt4<=cnt4+1;</p><p> BCD_out<="0010"; --個位顯示2</p><p> selet<="01";</p><p> else cnt4<=0;</p><p> BCD_out<="000
83、1"; --十位顯示1</p><p> selet<="10";</p><p><b> end if;</b></p><p> when "001100000" => if (cnt4=0) then</p><p> cn
84、t4<=cnt4+1;</p><p> BCD_out<="0011"; --個位顯示3</p><p> selet<="01";</p><p> else cnt4<=0;</p><p> BCD_out<="0001&quo
85、t;; --十位顯示1</p><p> selet<="10";</p><p><b> end if; </b></p><p> when "001010000" => if (cnt4=0) then</p><p> cnt4&l
86、t;=cnt4+1;</p><p> BCD_out<="0100"; --個位顯示4</p><p> selet<="01";</p><p> else cnt4<=0;</p><p> BCD_out<="0001";
87、 --十位顯示1</p><p> selet<="10";</p><p><b> end if;</b></p><p> when "001001000" =>if (cnt4=0) then</p><p> cnt4<=
88、cnt4+1;</p><p> BCD_out<="0101"; --個位顯示5</p><p> selet<="01";</p><p> else cnt4<=0;</p><p> BCD_out<="0001";
89、 --十位顯示1</p><p> selet<="10";</p><p><b> end if;</b></p><p> when "001000100" => if (cnt4=0) then</p><p> cnt4<=c
90、nt4+1;</p><p> BCD_out<="0110"; --個位顯示6</p><p> selet<="01";</p><p> else cnt4<=0;</p><p> BCD_out<="0001";
91、 --十位顯示1</p><p> selet<="10";</p><p><b> end if;</b></p><p><b> led<='1';</b></p><p> when "001000010&
92、quot; => if (cnt4=0) then</p><p> cnt4<=cnt4+1;</p><p> BCD_out<="0111"; --個位顯示7</p><p> selet<="01";</p><p> else cnt4&
93、lt;=0;</p><p> BCD_out<="0001"; --十位顯示1</p><p> selet<="10";</p><p><b> end if;</b></p><p> when "001000001&q
94、uot; =>if (cnt4=0) then</p><p> cnt4<=cnt4+1;</p><p> BCD_out<="1000"; --個位顯示8</p><p> selet<="01";</p><p> else cnt4<
95、;=0;</p><p> BCD_out<="0001"; --十位顯示1</p><p> selet<="10";</p><p><b> end if;</b></p><p> when others => led<
96、;='1';</p><p> selet<="00"; </p><p> --其他數(shù)碼無顯示,指示燈亮</p><p><b> end case;</b></p><p><b> end if;<
97、;/b></p><p> end process display;</p><p> end behav;</p><p> 第五部分 程序仿真</p><p> 該波形圖可分為兩部分,第一部分是EDA板對紅外發(fā)射所發(fā)射的信號進(jìn)行譯碼 ,并輸出BCD碼,即其他輸出的部分,第二部分是對EDA試驗板的鍵盤矩陣輸入信號的譯碼BCD
98、碼輸出。</p><p><b> 一、紅外譯碼部分</b></p><p> 在B2的低電平脈沖輸入前的部分屬于剛才講的第一部分,即紅外譯碼部分,此時EDA試驗板上的按鍵均沒有按下,所也B1,B2,B3,B4都把保持高電平。</p><p> 這部分波形圖示仿真紅外發(fā)射器的按鍵1按下是的情況。根據(jù)紅外編碼芯片PT2248的編碼規(guī)則,按鍵
99、1按下是的編碼應(yīng)該是“100100000”,上面也提到,每個代碼‘0’或‘1’的波形包括4個時鐘周期:‘0’是1個時鐘周期的低電平加3個時鐘周期的高電平;‘1’是3個時鐘周期的低電平加1個時鐘周期的高電平。所以“100100000”的波形應(yīng)該如下圖所示:</p><p> 當(dāng)9位編碼“100100000”全部接收完后,CPLD的BCD碼輸出為“0001”,即數(shù)碼管顯示1,</p><p>
100、; 二 、EDA板上的按鍵編碼及BCD碼輸出</p><p> EDA板上的按鍵按下時,紅外發(fā)射板的信號不能被EDA板接收,故CPLD是對EDA板上的按鍵信號進(jìn)行譯碼的。</p><p> 這部分波形從B2低電平脈沖,即B2按下開始,B1,B2,B3,B4分別是4*4鍵盤的右數(shù)第一,二,三,四列的任何一個按鍵,隨后是B3,B1,B4的低電平脈沖,如下圖:</p><
101、;p> 先后輸出的BCD碼為“0010”,“0011”,“0001”,“0100”,</p><p> 即B2按下時數(shù)碼管顯示2,B3按下時數(shù)碼管顯示3,B1按下時數(shù)碼管顯示1,B4按下時數(shù)碼管顯示4,仿真無誤。</p><p> 第六部分 設(shè)計體會及心得</p><p> 一、設(shè)計過程中遇到的問題及解決方法</p><p>
102、 上面已經(jīng)提過,本次課程設(shè)計的設(shè)計分為兩個方面:電路板和程序。</p><p> 程序設(shè)計遇到的問題的解決方案及解決方法幾經(jīng)在第四部分闡述,這部分主要討論電路板設(shè)計,焊接及調(diào)試遇到的問題和解決方法。</p><p> EDA試驗板和數(shù)據(jù)線電路板</p><p> 這兩塊板發(fā)下來時電路已經(jīng)設(shè)計好,主要出現(xiàn)的問題在焊接上。</p><p>
103、; 在焊接前先觀察這兩塊板,看清哪面是元件面,哪面是焊接面,畫有元件圖案的那面是元件面,焊接是要把元放在這一面上。</p><p> 在焊接過程中最容易犯的錯誤就是把IC,晶振,三級管,穩(wěn)壓器,紅外接收器,排阻,二極管等元件的管腳焊錯。</p><p> IC中管角最多的就是CPLD的IC座了,要是焊錯了,這個83個腳的元件拆下來的困難程度將是很難想象的。其實把它含對不難,在IC座內(nèi)
104、部的IC槽有一個是缺腳的,而實驗板元件面上畫圖案也是有一個缺角的,只要把位置對好,先把IC座的兩個對角的管腳焊好,再焊其他腳就可以順利焊好它了。其他IC都有一個缺口,只要把缺口和板上畫的缺口對齊,同樣把對角的兩個管腳焊好再焊其他腳,就行了,IC上有一個管腳的旁邊有一個圓形的凹陷,板上和這個角對應(yīng)的焊盤是方行的,根據(jù)這個規(guī)則也可以可方便的把IC焊好。</p><p> 焊晶振,三級管,穩(wěn)壓器,紅外接收器時,只要把
105、元件和板上畫的圖案對齊,就可以焊好。比如:晶振的四個角只有一個角是直角,其他三個角都是圓角,板上畫的圖案也是這樣,只要把直角對齊,就可以焊好了。</p><p> 普通二極管有一頭印有一個黑色的環(huán),試驗板上普通二級管的圖案也是有一頭是有黑色(或白色)的,對其再焊就可以把二極管的正負(fù)極焊對。發(fā)光二級管的兩個管腳是一長一短的,長的那根是正極,試驗板已經(jīng)把發(fā)光二極管的正負(fù)極標(biāo)上去,真樣也很容易就把放光二極管焊好。&l
106、t;/p><p> 在焊接過程中遇到的另一個問題就是焊電阻等比較矮的元件時,焊好后發(fā)現(xiàn)元件沒有緊貼在板上,這是就要把焊錫熔調(diào),調(diào)整元件的位置,有時候在熔焊錫時,會把焊盤弄調(diào),這時可以在元件面上焊,應(yīng)為試驗板元件面和焊接面都有焊盤的。另外,焊接元件時一定要記住先焊矮的元件,再焊高的,這樣就方便把元件緊貼在板上。</p><p> 焊接結(jié)束后,把測數(shù)碼管的程序下載到CPLD里,發(fā)現(xiàn)有一個數(shù)碼管
107、的亮得不正常,程序?qū)懙氖?為數(shù)碼管從右向左依次顯示0——9,發(fā)現(xiàn)左數(shù)第四位的二級管是在其他管亮過一編后再閃一下,懷疑是于這為數(shù)碼管連接的三極管壞了,根據(jù)電路圖,找到和這為數(shù)碼管相連的三級管是Q6,把這個三極管換掉后,數(shù)碼管就正常顯示了。</p><p><b> 2.發(fā)射板部分</b></p><p> 發(fā)射板是采用面包板,根據(jù)PT2248和少量外圍元件組成的紅外
108、遙控發(fā)射電路設(shè)計成的,焊接部分遇到的問題和EDA板焊接遇到的問題類似,只不過,發(fā)射板的電路顯得比較擁擠,焊盤挨得比較緊,很容易造成短路,焊接時要十分小心,發(fā)現(xiàn)兩個焊盤有可能短路時馬上用萬用表的歐姆檔檢測。</p><p> 發(fā)射板焊接電路最復(fù)雜的就是3*6鍵盤矩陣的焊接電路??紤]到按鍵的四個管角中,在同一測的兩個角是不導(dǎo)通的,而不再同一側(cè)的相對的兩隊管腳是內(nèi)部導(dǎo)通的,當(dāng)按鍵按下時,四個管角全部連通,開關(guān)就相當(dāng)于
109、一個節(jié)點,把18個按鍵豎著排列在板上,同一側(cè)的管角處于上下位置,把每個同側(cè)管角的右邊那個和它正上方(或下方)的按鍵的管腳焊在一起,這樣6根豎線就形成了。在三行按鍵之間和最下面那行按鍵的下方固定一條導(dǎo)線,把三行按鍵下方同測管腳的左邊那個通過導(dǎo)線連起來,這樣三條橫線也形成了。到此,3*6的鍵盤矩陣電路就焊接完畢,再把這3根橫線和6根豎線根據(jù)電路圖接到芯片上,再焊其他元件,發(fā)射板電路就完成了。</p><p> 在設(shè)
110、計發(fā)射板電路時,我在紅外發(fā)射二極管的旁邊串連了一個發(fā)光二級管,這樣有按鍵按下時,發(fā)光二級光就會亮。這樣就能檢測發(fā)射板是否有信號發(fā)出,也可以檢測發(fā)射板是工作正常。</p><p><b> 二、心得體會</b></p><p> 歷經(jīng)快學(xué)期的兩周的數(shù)字系統(tǒng)設(shè)計在我把我親手做的EDA試驗板和紅外發(fā)射板,還有CPLD里面的程序交到老師手中并通過驗收的那一克結(jié)束了??吹阶?/p>
111、己的作品,雖然不管從外表還是實現(xiàn)的功能都和其他同學(xué)的相差無幾,但心里有一股很強(qiáng)的成就感,也有如釋重負(fù)的輕快。</p><p> 短短兩周的時間很可能是我走向社會,走向工作的一個縮影,遇到難題,積極求證,分析問題,解決問題…一系列的過程不僅讓我體會到了面對問題無從下手的尷尬,也讓我體味到問題迎刃而解的喜悅。這次課程設(shè)計使我學(xué)到了許多東西,不僅理論知識,實踐能力得到了很大的提高,也鍛煉了自己的意志。</p&g
112、t;<p> 無可非議,數(shù)字系統(tǒng)設(shè)計時四門課程設(shè)計中設(shè)計面最廣,科技含量最大,難度最大,立時最久的一門課程設(shè)計。程序方面,設(shè)計的程序比微機(jī)課程設(shè)計的復(fù)雜;焊板方面,工作量比高頻課程設(shè)計的大;實現(xiàn)的功能方面,比模電課程設(shè)計的更前衛(wèi),這些因素時使這次課程設(shè)計給我留下了及其極其深刻的印象,也使我學(xué)到許多課堂上,課本里根本就學(xué)不到的東西。</p><p> 數(shù)字系統(tǒng)是現(xiàn)在社會上的熱門話題,這方面的人才的
113、社會需求量也是相當(dāng)大的。這方面的知識也是很有趣的,特別是程序下載,通過編程可以使實驗板有自己想要的功能,這是一件很有趣的事情。</p><p> 這次課程設(shè)計加深了我對FPGA/CPLD的認(rèn)識,也是我鞏固可VHDL語言的知識,還鍛煉了動手能力,可以說是受益匪淺。我在這方面的知識還是比較薄弱的,但我對這方面的知識很感興趣,這次課程設(shè)計給了我一個很好的機(jī)會學(xué)習(xí)數(shù)字系統(tǒng)的實踐知識的機(jī)會。</p><
114、;p> 這次課程設(shè)計也是我學(xué)會了不輕言放棄,不怕困難,不怕麻煩,在做實驗的過程中,會重復(fù)不斷的遇到一些相同的問題,特別是程序和電路的調(diào)試時,往往要經(jīng)過很多次反復(fù)的檢查、測量才能找到問題的所在,要使不能靜下心來,仔細(xì)研究,完成課程設(shè)計時不可能的。</p><p> 這次的課程設(shè)計給了我又一次認(rèn)識自我的機(jī)會,讓我學(xué)會了從更多角度分析解決問題,設(shè)計的過程中也積攢了一些相關(guān)的項目經(jīng)驗,我想對我以后的實際操作肯定
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 紅外遙控汽車設(shè)計畢業(yè)論文
- 紅外遙控系統(tǒng)畢業(yè)論文外文翻譯
- 畢業(yè)論文——單片機(jī)紅外遙控系統(tǒng)設(shè)計
- 紅外遙控電路設(shè)計畢業(yè)論文
- 紅外遙控電路設(shè)計畢業(yè)論文
- 紅外遙控裝置的設(shè)計畢業(yè)論文
- 紅外遙控開關(guān)的硬件設(shè)計畢業(yè)論文
- 紅外遙控節(jié)能智能插座設(shè)計畢業(yè)論文
- 紅外遙控賽車軟件算法設(shè)計畢業(yè)論文
- 紅外遙控賽車軟件算法設(shè)計畢業(yè)論文
- 畢業(yè)論文范文——單片機(jī)紅外遙控系統(tǒng)設(shè)計
- 基于fpga的紅外遙控器設(shè)計【畢業(yè)論文】
- 畢業(yè)設(shè)計(論文)紅外遙控開關(guān)
- 基于單片機(jī)的紅外遙控密碼鎖設(shè)計-紅外遙控密碼鎖畢業(yè)論文
- 機(jī)械電子工程畢業(yè)論文-智能紅外電風(fēng)扇遙控系統(tǒng)設(shè)計
- 基于51單片機(jī)的紅外遙控電機(jī)系統(tǒng)設(shè)計畢業(yè)論文
- 智能遙控窗簾系統(tǒng)設(shè)計【畢業(yè)論文】
- 基于單片機(jī)的紅外遙控器設(shè)計【畢業(yè)論文】
- 測控技術(shù)與儀器 畢業(yè)論文范文——紅外遙控溫度監(jiān)測系統(tǒng)的設(shè)計
- 遠(yuǎn)紅外遙控電子密碼鎖畢業(yè)論文
評論
0/150
提交評論