版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p> 1.設(shè)計的任務(wù)與要求</p><p><b> 2.方案論證與選擇</b></p><p> 3.簡易邏輯分析儀方案實現(xiàn)</p><p><b> ?。?)結(jié)構(gòu)組成</b></p><p
2、> ?。?)數(shù)據(jù)采集和存儲部分</p><p> (3)邏輯狀態(tài)與波形顯示部分</p><p> ?。?)簡易邏輯分析儀的軟件流程:</p><p> 5)實時波形存儲與上下翻頁</p><p> 4. 測試及結(jié)果分析</p><p><b> 5.附錄</b></p>
3、<p> 簡易邏輯分析儀的設(shè)計</p><p> 1. 設(shè)計的任務(wù)與要求</p><p> 設(shè)計并制作一個 8 路數(shù)字信號發(fā)生器與簡易邏輯分析儀,其結(jié)構(gòu)框圖如圖 1 所示:</p><p> 圖12.1. 簡易邏輯分析儀系統(tǒng)結(jié)構(gòu)框圖 </p><p> 1.1設(shè)計基本要求 </p><p>&
4、lt;b> 基本要求 :</b></p><p> ?。?)制作數(shù)字信號發(fā)生器能產(chǎn)生8路可預(yù)置的循環(huán)移位邏輯信號序列,輸出信號為TTL 電平,序列時鐘頻率為100Hz,并能夠重復(fù)輸出。邏輯信號序列示例如圖2所示。 </p><p> (2)制作簡易邏輯分析儀 </p><p> a.具有采集8路邏輯信號的功能,并可設(shè)置單級觸發(fā)字。信號
5、采集的觸發(fā)條件為各路被測信號電平與觸發(fā)字所設(shè)定的邏輯狀態(tài)相同。在滿足觸發(fā)條件時,能對被測信號進行一次采集、存儲。</p><p> b .能利用模擬示波器清晰穩(wěn)定地顯示所采集到的8路信號波形,并顯示觸發(fā)點位置。 </p><p> c.8位輸入電路的輸入阻抗大于50k Ω,其邏輯信號門限電壓可在0.25~4V范圍內(nèi)按16級變化,以適應(yīng)各種輸入信號的邏輯電平。 </p>
6、;<p> d.每通道的存儲深度為20bit。 </p><p> 圖12.2 重復(fù)輸出循環(huán)移位邏輯序列00000101</p><p> 1.2 設(shè)計發(fā)揮部分</p><p> (1)能在示波器上顯示可移動的時間標(biāo)志線,并采用LED或其它方式顯示時間標(biāo)志線所對應(yīng)時刻的8路輸入信號邏輯狀態(tài)。 </p><p>
7、(2)簡易邏輯分析儀應(yīng)具備3級邏輯狀態(tài)分析觸發(fā)功能,即當(dāng)連續(xù)依次捕捉到設(shè)定的3 個觸發(fā)字時,開始對被測信號進行一次采集、存儲與顯示,并顯示觸發(fā)點位置。3級觸發(fā)字可任意設(shè)定(例如:在8路信號中指定連續(xù)依次捕捉到兩路信號11、01、00作為三級觸發(fā)狀態(tài)字)。 </p><p> ?。?)觸發(fā)位置可調(diào)(即可選擇顯示觸發(fā)前、后所保存的邏輯狀態(tài)字?jǐn)?shù))。 </p><p> ?。?)其它(如增
8、加存儲深度后分頁顯示等)。</p><p> 2. 方案論證與選擇</p><p> 2.1 數(shù)字信號發(fā)生器方案</p><p> 利用單片機內(nèi)的定時器,產(chǎn)生計數(shù)溢出中斷,從而實現(xiàn)信號頻率要達到100Hz的要求。</p><p> 當(dāng)改變撥段開關(guān)的預(yù)設(shè)值后,按下數(shù)字開關(guān),單片機會重新讀入8位數(shù)據(jù),并對改變后的數(shù)據(jù)進行讀取和輸出。<
9、;/p><p> 在中斷程序中對信號實現(xiàn)循環(huán)右移和輸出,每次中斷到來的時候,單片機便對輸出端口輸送一組信號。</p><p> 圖1 數(shù)字信號發(fā)生器</p><p> 2.2 邏輯分析儀的設(shè)計</p><p> 方案一:采用高性能單CPU系統(tǒng)實現(xiàn),比如32位的ARM芯片作為控制系統(tǒng)核心。如果采用此方案,可以很好的解決同時采樣和控制顯示的功
10、能,但是ARM系統(tǒng)設(shè)計調(diào)試復(fù)雜,在短時間內(nèi)難以很好的完成設(shè)計,所以不宜采用此方案。</p><p> 方案二:針對分析中提出的問題,我們也可以采用兩片普通51單片機來實現(xiàn)系統(tǒng)設(shè)計,一片51實現(xiàn)數(shù)據(jù)采集,存儲;另一片51實現(xiàn)控制示波器實時顯示功能,兩片51之間采用串行通信來解決數(shù)據(jù)通信問題,這樣的方案可以滿足題目提出的設(shè)計要求。</p><p> 方案三:采用大規(guī)模FPGA來實現(xiàn)系統(tǒng),
11、</p><p> 采用FPGA來實現(xiàn)相應(yīng)功能,一般是使用狀態(tài)機方式來實現(xiàn),即所解決的問題都是規(guī)則的有限狀態(tài)轉(zhuǎn)換問題。分析本題目的要求,可以看出,其中的邏輯控制靈活多變,適合于采用程序控制的cpu執(zhí)行方式,如使用FPGA來實現(xiàn),大部分的資源會消耗用來控制鍵盤和顯示等輔助功能,用在主邏輯控制方面的資源相對比較少。另外,考慮到邏輯復(fù)雜程度和實現(xiàn)規(guī)模,可采用芯片大概要到Alter EPF11C50、Alter E
12、P1C6等級別的芯片來實現(xiàn),但此種規(guī)模PLD系統(tǒng)受實驗室條件限制,無法順利開發(fā),而且其所需元器件和EPC配置芯片在本地?zé)o法買到,因而綜合比較后我們淘汰掉本方案。</p><p> 綜合分析上述各方案,比較其優(yōu)缺點,包括靈活性、可靠性、可擴展性和易操作性,所以選用方案二。</p><p> 3. 簡易邏輯分析儀方案實現(xiàn)</p><p><b> (1)
13、結(jié)構(gòu)組成:</b></p><p> 本分析儀由數(shù)據(jù)采集存儲和控制顯示兩部分構(gòu)成:數(shù)據(jù)采集存儲模塊由信號輸入電路、89C52單片機、小鍵盤和液晶顯示模塊組成;邏輯狀態(tài)與波形顯示模塊由D/A變換器(TLC7226)和89C52構(gòu)成。兩模塊之間采用串行通信方式。</p><p><b> 結(jié)構(gòu)框圖如下:</b></p><p>
14、(2)數(shù)據(jù)采集和存儲部分</p><p> 此部分對應(yīng)框圖中的MCU1、電壓比較器、鍵盤和LCD液晶顯示</p><p><b> 輸入電路:</b></p><p> 八路輸入信號通過電壓比較器LM339和D/A轉(zhuǎn)換器TLC7226提供的基準(zhǔn)電壓作比較后,作為存儲單片的輸入,8路信號接入LM339同相輸入端,可以獲得較大阻抗。</
15、p><p><b> 觸發(fā)和存儲原理:</b></p><p> 本部分功能主要依靠51單片機來實現(xiàn)。</p><p> 根據(jù)題目要求,對邏輯信號的采集是要依靠觸發(fā)字來觸發(fā)的。觸發(fā)字又分單級觸發(fā)字和三級觸發(fā)字兩種,單級觸發(fā)字的預(yù)置依靠小鍵盤輸入實現(xiàn)。當(dāng)單片機采集到的狀態(tài)字和用戶所提供的觸發(fā)字8位邏輯狀態(tài)完全一致時,開始一次數(shù)據(jù)采集,連續(xù)采集2
16、4位,然后存儲到顯示緩沖區(qū)中,這樣每個顯示通道的存儲深度為 24bit;</p><p> 對于三級觸發(fā)字方式,設(shè)定從外部采兩位的狀態(tài),連續(xù)取三次,都和我們設(shè)定的兩位邏輯狀態(tài)一樣的情況下,將進入3級觸發(fā)采集狀態(tài),開始采集。</p><p> 采集完24位數(shù)據(jù)后,存儲起來。為了同時顯示8路信號,所以數(shù)據(jù)送去顯示前要把采集到的數(shù)據(jù)進行拼裝處理,把采集到的24個字節(jié)排列成適合顯示的8通道數(shù)據(jù)
17、組合,每一通道存放從同一輸入端口采集到的24BIT信息即組合形成8個存儲深度為24BIT的數(shù)據(jù)顯示通道,這樣就可以把數(shù)據(jù)依次送到示波器上按行掃描顯示。</p><p> ?。?)邏輯狀態(tài)與波形顯示部分</p><p> 此部分對應(yīng)框圖中的MCU2、D/A轉(zhuǎn)換器和示波器。本部分的主要難點集中在示波器顯示控制上,我們先對示波器的顯示方法進行分析討論:</p><p>
18、<b> 1、顯示方法分析:</b></p><p> 要能同時在示波器上看到8路信號波形,模擬示波器需要用外接掃描信號方式工作示波器上顯示數(shù)字信號發(fā)生器的8路信號和1路觸發(fā)點位置標(biāo)識,共需9個通道。同時顯示這9個通道的信號,需要采用動態(tài)掃描的方法:借助9個不同的基準(zhǔn)電壓,使顯示的9路波形分別處在不同的位置上,即把要在示波器上顯示的信號電平Qi+Vi偏置電平(i=0~7)加與示波器Y軸輸
19、入端。X軸輸入則是由TLC7226提供的線性鋸齒波。</p><p> 顯示的信號電平Qi+Vi其疊加效果如下圖的Y++所示:</p><p> 具體掃描方式有三種方案可供選擇:</p><p> ?。?)、按行掃描方式,X用外觸發(fā)方式,掃描10次掃完一屏。X要外接線性的鋸齒波信號,Y和上述說明中沒有變化。按行掃描送的數(shù)據(jù)是把數(shù)據(jù)采集存儲24BIT深度后,把Q0
20、--Q7的數(shù)據(jù)串行送到示波器,即先送Q0的24BIT,再依次送Q1--Q7的24BIT,掃完一屏要送9次(還有時標(biāo)數(shù)據(jù))。</p><p> 時標(biāo)的掃描方法:掃描光標(biāo)是單獨進行的一行掃描。我們在掃描光標(biāo)亮點的時候,給X提供一個小平臺電壓,這樣掃描光點在平臺電壓的持續(xù)時間內(nèi)水平方向不移動,而與此同一時間,Y方向上快速掃描,形成一豎直的時標(biāo)線。這樣X軸的電壓是帶一個小平臺的鋸齒波。</p><p
21、> ?。?)、按行掃描方式,X用外觸發(fā)方式,掃描9次掃完一屏,X、Y接法和方案一一樣。此掃描方法沒有單獨去實現(xiàn)時標(biāo)的顯示掃描,時標(biāo)的掃描顯示通過將時標(biāo)分成9次顯示分別在各頻道的掃描顯示中打點顯示,由于一屏的掃描時間為(1/25)S,眼睛是覺察不到時標(biāo)的分段顯示過程的。這樣也可減少一次掃描時間,提高顯示質(zhì)量,且同樣可以實現(xiàn)方案二中的豎直時標(biāo)線,也不至于造成產(chǎn)生小平臺鋸齒波的問題。此方法較簡單,且效果也不錯。</p>&
22、lt;p> (3)、按列掃描方式,X采用外觸發(fā)方式,故X、Y接法同方案2。</p><p> 具體掃描過程是:按列掃描時送數(shù)據(jù)的順序是8位為一組,即單片機采集一次的Q0--Q7共8BIT數(shù)據(jù),掃完一屏需送24次。掃描第一個通道的10點(即1BIT)結(jié)束后,X輸入的電平立刻變?yōu)榇薆IT的起始處的電平值,Y方向同時變化一臺階,再掃描第二個頻道的10點,重復(fù)第一頻道的操作,一直掃描到存儲深度24(第0頁),則
23、掃完一屏。</p><p> 此方案中X端的不規(guī)則鋸齒輸入的提供也是一個問題,這種方案情況下的時標(biāo)輸入也是先計算好位置,在單BIT掃描中打點實現(xiàn)的。</p><p> 綜合以上幾種方案的分析比較,我們選用方案2,此方案靈活簡單,實現(xiàn)起來相對方便,而且可以達到較好的效果。</p><p><b> 2、具體硬件實現(xiàn):</b></p&g
24、t;<p> ?。?)、D/A轉(zhuǎn)換器:</p><p> TLC7226提供的基準(zhǔn)電壓變化范圍大(0~5V),可適應(yīng)各種輸入信號的邏輯電平,提高了測量范圍和測量精度。</p><p> 此輸入電路在本設(shè)計中,由于信號發(fā)生器輸出TTL電平,沒有將這一優(yōu)點體現(xiàn)出來。</p><p> 數(shù)據(jù)顯示模塊用一片162A液晶顯示,用高四位傳輸數(shù)據(jù),接法與信號發(fā)
25、生器中一樣。</p><p> TLC7266加示波器顯示模塊</p><p> 產(chǎn)生周期相同的X和Y信號,便于波形顯示的同步,且可以顯示較復(fù)雜的波形。但單片機通過D/A轉(zhuǎn)換器產(chǎn)生波形產(chǎn)生信號波形時,輸出頻率會受到單片機本身工作速度的限制(12MHZ晶振主頻時,機器周期為1us);其次,要有一定的顯示質(zhì)量,在信號的一個周期內(nèi)取樣點不能太少,這進一步限制了信號的頻率。</p>
26、<p> TLC7226是高性能D/A轉(zhuǎn)換器,片內(nèi)包含四路8位電壓輸出數(shù)/模轉(zhuǎn)換器(DAC),每個DAC都有分離的片內(nèi)鎖存器,數(shù)據(jù)通過一個公共的8位TTL/CMOS兼容(5V)輸入口送入這些數(shù)據(jù)寄存器之一。由A0和A1決定/WR變低時哪個DAC被加載。在/WR的上升沿,數(shù)據(jù)被鎖存在被尋址的輸入寄存器,只有保存在DAC寄存器中的數(shù)據(jù)決定轉(zhuǎn)換器的模擬輸出。</p><p> 由D/A轉(zhuǎn)換器TLC72
27、26和示波器組成,采用一片TLC7226產(chǎn)生三路模擬信號,OUT C提供基準(zhǔn)電壓,使邏輯信號門限電壓在0~5V范圍內(nèi)按32級變化;OUT B提供線性鋸齒波作為示波器X方向輸入,用這個線性增長的電壓作為掃描電壓控制電子束移動,以產(chǎn)生示波器上光點的水平移動;OUT A提供Y軸偏置電平以區(qū)分各頻段顯示位置,一共需要9個電平以區(qū)分9個頻段的輸出顯示。此9個偏置電平和T0輸出的信號相迭加,實現(xiàn)T0信號在示波器上的的分頻段顯示。</p>
28、<p> ?。?)、產(chǎn)生和使用門限</p><p> 單片機通過對D/A設(shè)置不同輸出電壓,得到門限電平從D/A轉(zhuǎn)換器輸出到LM339反相輸入端。</p><p> (3)、產(chǎn)生Y軸偏置信號</p><p> 針對分通道顯示時,我們注意到并不是簡單的疊加偏置電平就可以的,因為疊加到偏置電平上的信號電壓本身可能就很高,超過相鄰偏置電平的變化值,這樣就
29、會發(fā)生相鄰頻道信號甚至多頻道信號波形的疊加,這樣我們的分頻道實現(xiàn)多路顯示也就已經(jīng)沒有了任何意義??紤]到這種情況,我們就需要對信號疊加偏置電壓前進行限幅處理,以使各路頻道信號均勻的分布于示波器的屏幕上得以清晰顯示。并且要保證各信號之間要有一定的空白間隔,以區(qū)分顯示9個頻段。針對此方案,我們設(shè)計了如下電路圖2.2所示作為示波器的輸入電路來實現(xiàn)在示波器上清晰顯示,此電路不僅解決了上面我們注意到的存在問題即輸入電平的幅度問題,同時簡單的實現(xiàn)了時
30、標(biāo)的掃描顯示。這是一個同相求和的運算電路,運放接成電壓跟隨器形式:</p><p> Vdot、Vdat、Vbase分別通過R1、R2、R3接運算放大器的同相輸入端V2,并通過電阻R4接地,運算放大器的輸出端接入反相輸入端,接成電壓跟隨器。</p><p> 由電壓跟隨器的特點可列寫:</p><p> Vo=V1 ,V1=V2</p>&
31、lt;p> V2/R4 + (V2-Vdot)/R1+(V2-Vdat)/R2+(V2-Vbase)/R3=0</p><p> 所以 V0=K1*Vdot + K2*Vdat + K3*Vbas</p><p> 其中: K1=K/R1 ; K2=K/R2; K3=K/R3 ;</p><p> ?。保耍剑保疪1+
32、 1/ R2+1/ R3+1/R4 ;</p><p> Vbas是在0~5v范圍內(nèi)變化的模擬電壓</p><p> 則在V0處的變化范圍是0~2.68V即△V0=2.68;</p><p> 要在示波器上實現(xiàn)9頻道的輸出,則每一頻道所占的變化電壓是:</p><p> △V=△V0 / 9=0.29;</p>&l
33、t;p> 要使各頻段的波形由空白間隔的顯示,則讓顯示波形占頻道的4/5,而留下1/5的空白區(qū)分各頻道的波形使之不會發(fā)生相鄰波形的重影現(xiàn)象,這樣由于加法器的輸入端接法,使得本來應(yīng)該是0~5V的大幅度變化變?yōu)?~2.68V小幅度輸出,再被9個頻段平分,</p><p> 這時可計算得到每頻道內(nèi)顯示的波形電壓幅值為:</p><p> △V2=△V* 4 / 5=0.232V;&l
34、t;/p><p> 使Vdat的值從低電壓0V變到5V時,調(diào)節(jié)R2合適數(shù)值,使△V2恰好為0.232V;</p><p> 若要顯示光標(biāo),則需在空白的中間顯示,這樣疊加在△V2上顯示 時標(biāo)亮點的</p><p> △V1=(△V/5)/ 2=0.029V;</p><p> 此時使Vdot的值從低電壓0V變到高電壓5V時,調(diào)節(jié)R1數(shù)值使
35、 △V1恰好為0.029V;</p><p> 實際電路調(diào)節(jié)合適后可以得到電路的各參數(shù):</p><p> R1=2M歐 ,R2= 470K歐,R3= 36K歐,R4= 47K歐</p><p> Vdot=0時,為正常的掃描模式:</p><p> Vdot=1時,為打點掃描模式:</p><p> 在屏
36、幕上顯示的效果為:</p><p> 第一行為觸發(fā)點顯示行,在沒有觸發(fā)點的時候觸發(fā)點顯示行顯示一條低電平的亮線,有觸發(fā)點時則在觸發(fā)字處顯示持續(xù)一個周期的高電平,然后降下來顯示低電平亮線,所以出現(xiàn)1BIT的高電平時,則表明有觸發(fā)點且觸發(fā)點就在這一位上,并且此觸發(fā)點的位置是可以人工調(diào)節(jié)的。</p><p> 第二行~第九行依次顯示采集到的Q0~Q7信號邏輯狀態(tài)。</p>&l
37、t;p> 時標(biāo)的掃描是通過Vdot和輸入顯示的Vdat相疊加,因而會在顯示的數(shù)據(jù)電平上疊加一個△V1,連續(xù)掃描4個點;</p><p> 若原來的Vdat是高電平,則接著將原來光標(biāo)的顯示電平減去△V2,這樣光標(biāo)相當(dāng)于疊加在此頻道的輸入低電平上,反之,若原來的Vdat是低電平,則在原來光標(biāo)的顯示電平加上△V2,這樣光標(biāo)相當(dāng)于疊加在此頻道的輸入高電平上,再連續(xù)掃描4點后,這樣就在這一頻道上出現(xiàn)兩條有高度差的
38、小光標(biāo),由于一個持續(xù)電平時間時間較短,兩段光標(biāo)有傾斜度,仔細觀察是會發(fā)現(xiàn)每個頻道的時標(biāo)段都有一定的小弧度,但對顯示效果的影響不明顯,可以忽略。</p><p> 同樣的方法掃描完一屏后,每個頻段都在此位上有兩段亮點,豎向看起來就是一條接近豎直線的亮線顯示于屏幕上,這就是我們想要顯示的時標(biāo)。時標(biāo)可以左右移動,也可以實現(xiàn)顯示消隱。不顯示時標(biāo)時,使Vdot=0即可。</p><p> ?。?)
39、簡易邏輯分析儀的軟件流程:</p><p> 簡易邏輯分析儀的開機狀態(tài):閾值為2.5V,開機初始為未觸發(fā)狀態(tài),為示波器工作模式,LCD顯示第0頁信息,時間標(biāo)志線在屏幕最左端。</p><p><b> 數(shù)據(jù)采集流程:</b></p><p><b> 數(shù)據(jù)顯示流程:</b></p><p>
40、?。?)實時波形存儲與上下翻頁</p><p> 在沒有觸發(fā)字的狀態(tài)下,簡易邏輯分析儀做示波器使用,將采集到的信號即時發(fā)送到MCU2上實現(xiàn)對信號的實時顯示,如果想保存波形可以通過STORE功能鍵完成,將顯示器上的波形信息保存下來,恒定顯示在示波器上,也可以以后回放觀看。實時波形存儲,既方便有快捷,.我們稱之為實時波形存儲. </p><p> 通過STORE鍵操作,我們可以隨時存儲實時
41、的波形.在正常的數(shù)據(jù)傳遞、波形顯示的情況下,按下STORE保存下當(dāng)前的波形,以備以后回放之用。此時,正常的數(shù)據(jù)傳遞被打斷,簡易邏輯分析儀將波形恒定的顯示在示波器上,直到通過按鍵操作被釋放為止。</p><p> 由于我們的簡易邏輯分析儀采用雙頁式存儲結(jié)構(gòu),可以存儲兩顯示屏的數(shù)據(jù),所以我們通過UP/DOWN 鍵來翻看波形情況。在實時波形存儲情況下,可以存儲兩顯示屏的波形信息。查看這些波形信息,我們只需要通過UP/
42、DOWN鍵就可以上下翻看兩屏波形信息。我們稱此為實時波形存儲與上下翻頁。</p><p> 實時波形存儲與上下翻頁功能的開發(fā)是基于示波器的顯示存儲思想而來的。通過軟件編程,我們可以方便的分析數(shù)字邏輯信號的邏輯功能,直觀的顯示出來,還可以方便地存儲我們想要的波形信息并回放。這是我們這個簡易邏輯分析儀的特色功能之一。</p><p> 第四部分、測試及結(jié)果分析:</p>&l
43、t;p><b> 一、信號發(fā)生器測試</b></p><p> 我們將數(shù)字信號發(fā)生器的組成部分封裝到盒子中,外接出控制按鍵和用戶依靠液晶顯示的提示進行操作,實現(xiàn)人機交換操作,需要監(jiān)測的引腳和輸出引腳通過插孔引出,外接檢測和提供輸出時,只需用插線插進插孔和外部電路連接即可,這是一種可靈活改變的跳線結(jié)構(gòu),簡單易操作。</p><p><b> 1、測
44、試儀器:</b></p><p> 數(shù)字存儲示波器TDS210</p><p> TDS210技術(shù)參數(shù): 60MHz帶寬,lGS/s采樣率,雙通道數(shù)字示波器,2.5K記錄長度,3%垂直精度,2mV垂直靈敏度,可選三種擴充模塊,高亮液晶顯示。</p><p><b> 2、測試步驟:</b></p><p&g
45、t; (1)、觀察上電起始顯示情況。用插線連接好電源,接好地,把CLK輸出和P0各口的用插線接到示波器TDS210上,液晶屏幕上將顯示歡迎信息和當(dāng)前P0口循環(huán)輸出的默認(rèn)序列0000 0101,8位序列結(jié)束處有閃爍標(biāo)志,僅接其后顯示的是輸出CLK信號的頻率100HZ。</p><p> 用示波器TDS210監(jiān)視P0口的輸出波形Q0~Q7,觀察它的輸出規(guī)律是0000 0101序列在循環(huán)移位顯示;同時可從屏幕上可觀
46、察P0口波形的電壓值(高電平和低電平的峰峰值):</p><p> 用示波器TDS210監(jiān)視CLK輸出口波形;同時可從屏幕上讀出CLK信號的頻率: </p><p> (2)、預(yù)置8位循環(huán)信號序列,并檢測輸出信號電平。</p><p> 按下SET鍵1號,進入設(shè)置狀態(tài)后,閃爍標(biāo)志停,等待2號和3號鍵的輸入進行0/1設(shè)置,按動輸入8位后,輸入中若輸錯
47、了值,則按動4號撤銷鍵,光標(biāo)前移。按ENTER后,則設(shè)置結(jié)束,新設(shè)的序列在液晶上顯示出來,用示波器檢測P0口輸出脈沖循環(huán)情況確為新設(shè)脈沖的重復(fù)循環(huán)移位顯示。</p><p> 用TDS210檢測輸出P0信號的峰峰值電平差,并記錄下來。</p><p> ?。?)、測試序列的時鐘頻率</p><p> 用示波器TDS210監(jiān)視CLK輸出口波形;同時可從屏幕上讀出C
48、LK信號的頻率穩(wěn)定顯示,且輸出波形穩(wěn)定清晰。</p><p> 拔出電源插線,結(jié)束檢測,整理測試結(jié)果,分析實驗過程。 </p><p><b> 3、測試結(jié)果:</b></p><p> 基準(zhǔn)電壓為0v,測量數(shù)據(jù)如下:</p><p><b> 波形顯示:</b></p>
49、<p><b> 4、結(jié)果分析:</b></p><p> ●由測試頻率表可看出所測結(jié)果符合要求:CLK的頻率基本為100HZ,與液晶顯示0.1K的頻率值相符合。</p><p> ●由所測電平的峰峰值記錄可知,輸出電平變化范圍大,接近5V,輸出信號必定滿足TTL電平要求。</p><p> ●由步驟2的操作過程可知,可以實
50、現(xiàn)8路邏輯信號的預(yù)置入功能,并且順利的實現(xiàn)了置入邏輯信號序列的重復(fù)循環(huán)移位輸出,所畫波形圖即為循環(huán)顯示的默認(rèn)邏輯序列情況。</p><p> 總之,數(shù)字信號發(fā)生器已經(jīng)實現(xiàn)了所有的基本要求,并且加了一片液晶實時顯示P0口的循環(huán)序列,一邊置數(shù)另一邊會在液晶上顯示出輸入的數(shù)字,為使用用戶提供了友好的界面提示,且允許用戶回退光標(biāo)。由于時間限制,頻率選擇鍵的選擇功能還未擴展寫入。此數(shù)字信號發(fā)生器經(jīng)測試已驗證其精度相對較高
51、,其效果較為理想。</p><p> 二、簡易邏輯分析儀的測試過程和結(jié)果分析</p><p> 簡易邏輯分析儀電路系統(tǒng)被封裝起來,外接可插拔的電路接口</p><p><b> 1、測試儀器:</b></p><p> 萬用電表、模擬示波器 </p><p><b> 2、測試
52、步驟:</b></p><p> ?。?)、首先接上電源觀察簡易邏輯分析儀的開機狀態(tài):</p><p> 第一行沒有高電平觸發(fā)標(biāo)志,處于未觸發(fā)狀態(tài);時間標(biāo)志線可以清晰的看到顯示于屏幕的最左端。</p><p> ?。?)、按下設(shè)置鍵進入設(shè)置狀態(tài),再按動一下進入單極觸發(fā)字設(shè)置狀態(tài),依次按0/1鍵進行單極觸發(fā)初始字的設(shè)置,同時對信號發(fā)生器也設(shè)置一個和出發(fā)字
53、相同的脈沖序列,然后在示波器屏幕上就會看到我們所設(shè)信號發(fā)生器的信號在示波器上清晰穩(wěn)定的顯示,并且在Q0—Q7即第二通道向下到最后一通道的所顯示的狀態(tài)字與單級觸發(fā)字恰好相同處的一條垂直方向處有高電平升起,這便是觸發(fā)處。這證明單極觸發(fā)字被順利寫入,且在各路被測信號電平與觸發(fā)字所設(shè)定的邏輯狀態(tài)相同時,即在滿足觸發(fā)條件下進行了一次采集、存儲。</p><p> 在步驟1和步驟2中,我們在模擬示波器上看到了清晰穩(wěn)定的波形
54、顯示,并且在步驟2中看到了觸發(fā)高電平,證明其可以清晰的顯示出發(fā)點位置。</p><p> 我們觀察屏幕上的波形,數(shù)一下,會發(fā)現(xiàn)恰好是我們的存儲深度24bit.</p><p><b> 其電壓,測得V2.</b></p><p><b> 3、測試結(jié)果:</b></p><p><b&g
55、t; 4、結(jié)果分析:</b></p><p> 從上面可以看出三次的測量關(guān)系:v1接近于v2的兩倍。</p><p> 故而,輸入電阻就和所接如電阻數(shù)值相當(dāng)。即大約為100k</p><p> 即得到結(jié)論8位輸入電阻的阻抗大于50千歐。</p><p><b> 附錄</b></p>
56、<p> 簡易邏輯分析儀的數(shù)字信號采集、處理、串行發(fā)送的部分程序.</p><p> // LOGICAL ANALIST</p><p> // main.c @12MHz</p><p> #include <89C51C.H></p><p> #include <stdio.h></
57、p><p> #include <math.h></p><p> #define lint unsigned long</p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> idat
58、a struct series</p><p> { uchar Series[48]; //signal series 24 bits&2 pages</p><p> uchar Time_flag_line; //0--23</p><p> uchar Trigger_Position; //single trigge
59、r position -3---19</p><p> uchar Gate_Voltage;//2.5V default</p><p><b> } Series;</b></p><p> uchar temp1[3];</p><p> uchar Series_Number=0;//signa
60、l series</p><p> uchar DispArray[8],DispArrayTemp[8]; //disp series array</p><p> uchar Trigger_Word=0x03,Trigger_Word_Temp; //single trigger word temp</p><p> uchar Trigg
61、er_Level=0,Trigger_Level_Temp; //trigger level (0)NoTrigger</p><p> int Trigger_Position_Temp=0,j=0;</p><p> uchar key; //keyValue</p><p> uchar i,temp;</p&g
62、t;<p> uchar idata PageFull; //Page being displayed. (_NO)</p><p> bit enter=0;</p><p> bit sent=0; //send done</p><p> bit send_ok=0; //send_ok&l
63、t;/p><p> bit flag0=0,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;</p><p> bit start_flag=0; //single trigger is triggerred.</p><p> uchar setmode=0; //setmode:0 no_set;
64、 1:Trigger_Level=1(set Trigger_Word);</p><p> //2:Multiple_Level_Set; 3:Set Gate_Voltage</p><p> sbit WDI=P3^7;</p><p> extern uchar readkey();</p><p> //
65、NOKEY FF;set 00; 0/1 01;updown 02;read 03;store 04;left 05;right 06;ENTER 07.</p><p> //extern void delay250us(void);</p><p> //extern void delay500us(void);</p><p> //extern v
66、oid delay1ms(void);</p><p> //extern void delay5ms(void);</p><p> //extern void delay10ms(void);</p><p> extern void delay50ms(void);</p><p> //extern void delay20m
67、s(void);</p><p> extern void Disp_Init();</p><p> extern void Disp_LocateCursor(const uchar );</p><p> extern void Disp_HideCursor(void);</p><p> extern void Disp_C
68、learInfoLine(void);</p><p> extern void Disp_ClearFuncLine(void);</p><p> extern void Disp_InfoLinePos(uchar, const char *);</p><p> extern void Disp_InfoLine(const char *);</
69、p><p> extern void Disp_FuncLine(const char * );</p><p> extern void Disp_InfoLineSlideFromRight(const char *);</p><p> extern void Disp_FuncPos(uchar, const char *);</p><
70、;p> extern void Disp_Notice(const char *);</p><p> extern void Transfer(void);</p><p> //Disp Function</p><p> void sys_init(void);</p><p> void intt0P(void);&l
71、t;/p><p> void SeriesDisp(char); //Series to DispArray;</p><p> void TriggerWordTempDisp(void);</p><p> void TriggerWordDisp(void);</p><p> void start_hello(void);<
72、/p><p> void DispTrigger_Position_Temp(void);</p><p> //Trans Function</p><p> void DispArraytoTriggerWord(void);</p><p> void DispArraytoSeries(void); //DispArray to
73、Series;</p><p> void DispPosition(char);</p><p> void GateVoltageDisp(char);</p><p> void Read_data(void);</p><p> extern void Send_Data(void);</p><p>
74、 void StoreWaves(void);</p><p> void frequency_count(void);</p><p> void exit(void);</p><p> void delay1s(void);</p><p> //LOGICAL ANALIST</p><p> vo
75、id main (void)</p><p><b> {</b></p><p> /*INITIALIZE 89C52 */</p><p> sys_init();</p><p> //lcd welcome information</p><p> start_hello();
76、</p><p> delay1s();</p><p> delay1s();</p><p> delay50ms();delay50ms();WDI=0;WDI=1;</p><p> for(i=0;i<8;i++) DispArrayTemp[i]=DispArray[i];</p><p>
77、 Trigger_Word_Temp=Trigger_Word;</p><p> //Disp_InfoLineSlideFromRight("SET:TRG CUR TIM");</p><p> //Disp_FuncLine(" SET <-> SET");</p><p><b>
78、; while(1){</b></p><p> if(j==30000)</p><p><b> {j=0;</b></p><p> Disp_InfoLineSlideFromRight("SET: TRG CUR TIM");</p><p> Disp_FuncLin
79、e("KEY: SET <-> SET");</p><p><b> }</b></p><p><b> j++;</b></p><p><b> flag1=0;</b></p><p> //key operation</
80、p><p> key=readkey();</p><p> switch(key)</p><p> {case 0x00: </p><p> while(flag1==0)</p><p> { setmode=1; //set</p><p> Disp_InfoLine(&q
81、uot;TRL TRW TRP GVO");</p><p> Disp_FuncLine(" 0 1 RD ST");</p><p><b> flag0=0;</b></p><p> key=readkey();</p><p> switch(key)
82、 //0/1/read</p><p> {//trigger level</p><p> case 0x01: while(flag0==0)</p><p> {Disp_InfoLine(" TRIGGER LEVEL ");</p><p> Disp_FuncLine(" <
83、-- 0L || -->1L");</p><p> key=readkey();</p><p> if(key==0x05) Trigger_Level_Temp=0;</p><p> if(key==0x06) Trigger_Level_Temp=1;</p><p> if(key==0x07) fl
84、ag0=1;</p><p><b> }</b></p><p> if(Trigger_Level_Temp==0) Disp_FuncLine(" ZERO LEVEL ");</p><p> if(Trigger_Level_Temp==1) Disp_FuncLine(" ONE LEVEL
85、 ");</p><p> delay1s();</p><p><b> break;</b></p><p> //Trigger_position</p><p> case 0x03: flag2=0; Trigger_Position_Temp=Series.Trigger_Positio
86、n;</p><p> DispPosition(Trigger_Position_Temp);</p><p> while(flag2==0)</p><p> {Disp_InfoLine("TRIGGER POSITION");</p><p> DispPosition(Trigger_Position_
87、Temp);</p><p> key=readkey();</p><p> if((key==0x05)&&(Trigger_Position_Temp>-3)) Trigger_Position_Temp--;</p><p> if((key==0x06)&&(Trigger_Position_Temp<1
88、9)) Trigger_Position_Temp++;</p><p> if(key==0x07) {flag2=1;</p><p> Series.Trigger_Position=Trigger_Position_Temp+3;</p><p> Trigger_Position_Temp=0;}</p><p> //D
89、ispPosition(Series.Trigger_Position);</p><p><b> }</b></p><p><b> break;</b></p><p> //trigger_word</p><p> case 0x02:j=0;flag3=0; //flag<
90、;/p><p> Disp_InfoLine("TRIGGER WORD");</p><p> TriggerWordDisp();</p><p> while(flag3==0)</p><p> {TriggerWordDisp();delay1s();</p><p> for(j=
91、0;j<8;j++) DispArray[j]=' ';</p><p><b> flag4=0;</b></p><p><b> j=0;</b></p><p> while(flag4==0)</p><p><b> {</b><
92、/p><p> key=readkey();</p><p> if((key==0x01)&&(j>=0)&&(j<=7)) {DispArray[j]='0';j++; }</p><p> if((key==0x02)&&(j>=0)&&(j<=7)) {
93、DispArray[j]='1';j++; }</p><p> if((key==0x05)&&(j>=0)&&(j<=8)) {DispArray[j-1]=' ';j-=1; }</p><p> if(key==0x07) {flag3=1;flag4=1;DispArraytoTriggerWord
94、();}</p><p> Disp_FuncLine("WORD:");</p><p> Disp_FuncPos(6,DispArray); Disp_FuncPos(14," ");</p><p><b> }</b></p><p><b> }&l
95、t;/b></p><p> TriggerWordDisp();delay1s();</p><p> delay1s();</p><p><b> break;</b></p><p> //set Gate_Voltage</p><p> case 0x04:flag5
96、=0;temp=Series.Gate_Voltage;</p><p> while(flag5==0)</p><p> {Disp_InfoLine("GAT VOL(0-5V/32)");</p><p> Series.Gate_Voltage=128;</p><p> key=readkey();&l
97、t;/p><p> if((key==0x05)&&(temp>=8)) temp-=8;</p><p> if((key==0x06)&&(temp<=256)) temp+=8;</p><p> if(key==0x07) {flag5=1;Series.Gate_Voltage=temp;}</p>
98、<p> GateVoltageDisp(temp);</p><p><b> }</b></p><p> GateVoltageDisp(Series.Gate_Voltage);</p><p><b> break;</b></p><p> default: br
99、eak;</p><p><b> }</b></p><p> key=readkey();</p><p> if(key==0x07) {flag1=1;//exit and store</p><p><b> }</b></p><p><b>
100、 }</b></p><p><b> break;</b></p><p><b> //READ</b></p><p> case 0x03: Read_data();</p><p><b> break;</b></p><p&
101、gt;<b> //STORE</b></p><p> case 0x04: StoreWaves(); WDI=0;WDI=1;</p><p><b> break;</b></p><p><b> //<---</b></p><p> case 0x
102、05:if(Series.Time_flag_line>0) Series.Time_flag_line--;</p><p> Disp_InfoLine("TIME FLAG LINE");DispPosition(Series.Time_flag_line);</p><p> delay1s();</p><p><b&g
103、t; break;</b></p><p><b> //---></b></p><p> case 0x06:if(Series.Time_flag_line<24) Series.Time_flag_line++;</p><p> Disp_InfoLine("TIME FLAG LINE&qu
104、ot;);DispPosition(Series.Time_flag_line);</p><p> delay1s();</p><p><b> break;</b></p><p> default : break;</p><p><b> }</b></p><
105、;p><b> }</b></p><p> } //main end</p><p> //INTERRUPT PROCESSING FUNCTION</p><p> //read data</p><p> void intt0P(void) interrupt 0</p><
106、p><b> { i=P1;</b></p><p> switch(Trigger_Level) //0 1 2</p><p> {case 0: Series.Series[Series_Number]=i; //no trigger word</p><p> Series_Number++;</p>
107、<p> if(Series_Number>=24) PageFull=0; //page 0 is ok</p><p> else PageFull=1; //page 1 ok</p><p> if(Series_Number>=48) Series_Number=0;</p><p> if((S
108、eries_Number==24)||(Series_Number==48)) send_ok=1;</p><p> sent=0; //data changes: sent no done</p><p><b> break;</b></p><p> //check trigg
109、er_word</p><p> case 1: if((i!=Trigger_Word)&&(start_flag==0)) //store temp data</p><p> {temp1[0]=temp1[1];temp1[1]=temp1[2]; temp1[2]=i;}</p><p> if((i==Trigger_Word)&a
110、mp;&(start_flag==0))</p><p> {start_flag=1; //single trigger start</p><p> switch(Series.Trigger_Position)</p><p> {case 3:Series.Series[0]=temp1[0];</p&g
111、t;<p> Series.Series[1]=temp1[1];</p><p> Series.Series[2]=temp1[2];</p><p> Series_Number=3;break;</p><p> case 2:Series.Series[0]=temp1[0];</p><p> Series
112、.Series[1]=temp1[1];</p><p> Series_Number=2;break;</p><p> case 1:Series.Series[0]=temp1[0];</p><p> Series_Number=1;break;</p><p> default:break;</p><p
113、><b> }</b></p><p> Series.Series[Series_Number]=i;</p><p> Series_Number++;</p><p><b> }</b></p><p> if(start_flag==1) //started &re
114、ad data</p><p> { Series.Series[Series_Number]=i;</p><p> if(Series_Number>=24) PageFull=0; //page 0 ok</p><p> else PageFull=1; //page 1 ok</p><p> if(S
115、eries_Number>=48) Series_Number=0;</p><p> if((Series_Number==24)||(Series_Number==48)) send_ok=1;</p><p> sent=0; //data changes: sent no done</p><p><b> }</b>
116、;</p><p> default:break;</p><p><b> }</b></p><p><b> }</b></p><p> //send data from serial port</p><p> void intt1p(void) inte
117、rrupt 2</p><p> { if((sent==0)&&(send_ok==1)){Send_Data();</p><p> sent=1; //send done</p><p> send_ok=0;//data not ok</p><p><b> }</b></p&g
118、t;<p><b> }</b></p><p> //sys_initilize</p><p> void sys_init()</p><p><b> {</b></p><p><b> P1=0x0ff;</b></p><
119、;p><b> P2=0x0ff;</b></p><p><b> P0=0x0ff;</b></p><p><b> P3=0x0ff;</b></p><p> EA=1;ET1=1;</p><p> Series.Time_flag_line=0;&
120、lt;/p><p> Series.Trigger_Position=0;</p><p> Series.Gate_Voltage=128;</p><p> Series_Number=0;</p><p> sent=0; //no sent</p><p> Trigger_Level=0; //
121、trigger level default(0)</p><p> Trigger_Position_Temp=0;</p><p> send_ok=0; //no ready</p><p> start_flag=0;</p><p><b> }</b></p><p> voi
122、d start_hello(void)</p><p> { Disp_Init();</p><p> Disp_InfoLineSlideFromRight("WELCOME TO LG-1");</p><p> Disp_FuncLine("LOGICAL ANALIST");</p><p&
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 簡易頻譜分析儀課程設(shè)計
- eda課程設(shè)計--eda課程設(shè)計實驗報告
- eda課程設(shè)計--簡易頻率計設(shè)計
- 基于單片機的簡易邏輯分析儀設(shè)計論文資料
- eda課程設(shè)計---簡易售貨機
- eda課程設(shè)計---簡易售貨機
- eda課程設(shè)計報告
- eda課程設(shè)計報告
- 音頻信號分析儀課程設(shè)計
- eda課程設(shè)計報告
- 數(shù)字邏輯課程設(shè)計報告--簡易售貨機的設(shè)計
- eda課程設(shè)計報告
- 數(shù)據(jù)綜合分析儀邏輯分析儀模塊軟件設(shè)計
- eda課程設(shè)計-簡易信號發(fā)生器
- 基于labview的虛擬邏輯分析儀設(shè)計【開題報告】
- 簡易心電圖儀設(shè)計(課程設(shè)計)
- 簡易手指血氧儀課程設(shè)計報告
- 數(shù)據(jù)綜合分析儀邏輯分析儀模塊軟件設(shè)計.pdf
- 畢業(yè)論文--邏輯分析儀的設(shè)計
- 虛擬儀器課程設(shè)計---虛擬功率分析儀設(shè)計
評論
0/150
提交評論