本設(shè)計(jì)是基于stm32單片機(jī)制作的,實(shí)物圖片如下:
電路圖下載:
Android示波器電路原理圖.zip
(96.22 KB, 下載次數(shù): 296)
源代碼下載:
Android、STM32源代碼.zip
(4.65 MB, 下載次數(shù): 317)
完整版的論文下載word格式:
(畢業(yè)論文)基于Android顯示的便攜式數(shù)字示波器.zip
(3.11 MB, 下載次數(shù): 296)
以下是論文預(yù)覽:
本科畢業(yè)設(shè)計(jì)(論文)
數(shù)字示波器作為一種測量儀器,因其具有體積小、可長期貯存波形并具有波形分析處理能力等優(yōu)點(diǎn),使得它日益普及。由于目前國外在數(shù)字技術(shù)方面比國內(nèi)發(fā)達(dá)很多,數(shù)字存儲(chǔ)示波器的大部分市場被國外企業(yè)占有。而國內(nèi)的數(shù)字存儲(chǔ)示波器的研制處于起步階段,因此迫切需要加快相關(guān)技術(shù)的發(fā)展。
本文主要介紹了基于單片機(jī)STM32控制的、并在Android上進(jìn)行顯示的便攜式數(shù)字示波器。STM32單片機(jī)是一款性價(jià)比非常之高的處理器,最高時(shí)鐘可達(dá)72M,完全能滿足本設(shè)計(jì)的要求。Android系統(tǒng)作為一個(gè)開放的移動(dòng)平臺(tái),在最近幾年發(fā)展非常的迅速。在這個(gè)Android設(shè)備高度普及的時(shí)代,如何充分利用它的軟硬件資源就顯得尤為重要。
采用Android設(shè)備作為顯示平臺(tái),是本設(shè)計(jì)最大的一個(gè)特點(diǎn)。本設(shè)計(jì)的基本思路是,由單片機(jī)對ADC采樣到的數(shù)據(jù)進(jìn)行處理,再通過藍(lán)牙把波形數(shù)據(jù)發(fā)送到Android設(shè)備上進(jìn)行顯示。同時(shí)由于Android設(shè)備都采用觸摸屏,因此示波器的參數(shù)可以很方便的通過觸摸屏進(jìn)行設(shè)置。本設(shè)計(jì)采用Android設(shè)備取代液晶屏,并使用藍(lán)牙進(jìn)行數(shù)據(jù)傳輸,充分利用了Android設(shè)備的硬件資源。其優(yōu)點(diǎn)是降低了系統(tǒng)開發(fā)成本,并大大減小了系統(tǒng)硬件體積,完全實(shí)現(xiàn)了本設(shè)計(jì)小巧便攜的設(shè)計(jì)宗旨。
目錄
1 緒論
1.1 示波器概述
1.2 數(shù)字示波器的特點(diǎn)及原理
1.3 數(shù)字示波器國內(nèi)外研究狀況
1.4 Android概述
1.5 題目研究背景及意義
2 數(shù)字示波器原理分析與技術(shù)指標(biāo)
2.1 數(shù)字示波器的組成原理
2.2 數(shù)字示波器與模擬示波器相比較
2.3 數(shù)字示波器技術(shù)指標(biāo)
2.3.1 最大采樣速率
2.3.2 存儲(chǔ)寬度
2.3.3 分辨率
2.3.4 記錄長度
2.3.5 存儲(chǔ)帶寬
2.3.6 垂直靈敏度及誤差
2.3.7 掃描速度及誤差
2.4 采樣原理分析
2.4.1 實(shí)時(shí)采樣方式的原理
2.4.2 等效取樣方式的原理
3 系統(tǒng)方案論證
3.1 系統(tǒng)總體方案設(shè)計(jì)
3.2 數(shù)據(jù)采集系統(tǒng)
3.2.1 波形整形電路方案選擇
3.2.2 程控放大電路方案選擇
3.3 數(shù)據(jù)處理系統(tǒng)
3.3.1 觸發(fā)方案選擇
3.3.2 峰值測量方案選擇
3.3.3 測量頻率方案選擇
3.3.4 采樣方案選擇
4 系統(tǒng)硬件電路設(shè)計(jì)
4.1 微控制器電路
4.2 電源電路設(shè)計(jì)
4.3 信號采集電路設(shè)計(jì)
4.3.1 A/D轉(zhuǎn)換及FIFO緩存器
4.3.2 程控放大電路
4.3.3 電平移位電路設(shè)計(jì)
4.3.4 頻率測量電路
4.4 無線數(shù)據(jù)傳輸
5 系統(tǒng)軟件設(shè)計(jì)
5.1 單片機(jī)軟件開發(fā)環(huán)境
5.2 主程序設(shè)計(jì)及流程圖
5.3 數(shù)據(jù)處理子程序
5.3.1 同步觸發(fā)的軟件實(shí)現(xiàn)
5.3.2 頻率計(jì)算原理及流程圖
5.3.3 測量信號峰峰值
6 Android顯示平臺(tái)
6.1 Android應(yīng)用開發(fā)環(huán)境
6.1.1 Android簡介
6.1.2 開發(fā)所需的軟件包
6.1.3 搭建Android開發(fā)環(huán)境
6.1.4 測試所配的開發(fā)環(huán)境
6.2 Android藍(lán)牙通信設(shè)計(jì)
6.2.1 Android設(shè)備中藍(lán)牙模塊的使用
6.2.2 藍(lán)牙數(shù)據(jù)通信
6.3 Android上繪制波形
6.3.1 SurfaceView的使用
6.3.2 繪制波形子程序
結(jié)論
參考文獻(xiàn)
致謝
附錄 A 實(shí)物圖
附錄 B 系統(tǒng)主程序設(shè)計(jì)源碼
附錄 C Android藍(lán)牙服務(wù)程序設(shè)計(jì)源碼
1 緒論1.1 示波器概述
示波器作為一種精密的測量儀器,廣泛地應(yīng)用在科研、教育、農(nóng)業(yè)生產(chǎn)、軍事等各個(gè)領(lǐng)域。示波器是一種用短暫掃描的方式記錄并顯示一個(gè)瞬間信號的測量儀器,可以直觀地表示二維變量之間的瞬態(tài)或穩(wěn)態(tài)函數(shù)關(guān)系、邏輯關(guān)系,以及實(shí)現(xiàn)對部分物理量的存儲(chǔ)和變換[1]。
隨著上個(gè)世紀(jì)七十年代雷達(dá)、電視和航空等領(lǐng)域的發(fā)展,研制對于電信號能夠?qū)崿F(xiàn)檢測和跟蹤的設(shè)備已成為急需,示波器在這個(gè)時(shí)期應(yīng)運(yùn)而生。帶寬為100MHz的同步示波器研制成功,成為近代示波器的基礎(chǔ)[2]。1972年美國尼科萊特公司利用模數(shù)轉(zhuǎn)換器件,成功研制出世界上首臺(tái)數(shù)字存儲(chǔ)示波器,為信號數(shù)字化、數(shù)據(jù)的存儲(chǔ)、信號處理和參數(shù)跟蹤開辟了一條新的途徑。
示波器從原理上可分為模擬和數(shù)字兩種。傳統(tǒng)的模擬示波器也就是電子管示波器,其原理是用被測信號去控制示波管的X、Y通道,達(dá)到控制陰極電子束的偏移的目的,從而實(shí)現(xiàn)在熒光屏上顯示被測信號的波形。但很容易發(fā)現(xiàn),傳統(tǒng)的模擬示波器有很多缺點(diǎn),比如操作復(fù)雜、不方便攜帶、笨重、耗電量大以及無法用于測量非周期、單次信號,這些缺點(diǎn)都給實(shí)際應(yīng)用帶來了許多不便。為了解決傳統(tǒng)模擬示波器的缺點(diǎn),并實(shí)現(xiàn)將各種信號無失真地顯示并存儲(chǔ),數(shù)字示波器應(yīng)運(yùn)而生。數(shù)字存儲(chǔ)示波器可直觀的顯示出被測信號的實(shí)時(shí)曲線,并可進(jìn)行瞬態(tài)分析[3]。目前數(shù)字示波器已取代模擬示波器成為市場上的主流,并朝著智能化的方向發(fā)展。
近幾年,隨著計(jì)算機(jī)技術(shù)的發(fā)展,出現(xiàn)了虛擬示波器。傳統(tǒng)示波器頻帶較寬,實(shí)時(shí)性較好,但功能比較單一,人機(jī)界面不夠友好。采用虛擬示波器技術(shù)可以以低廉的成本解決這些問題。虛擬示波器是虛擬儀器技術(shù)的應(yīng)用,它使用數(shù)據(jù)采集卡采集現(xiàn)場信號,通過接口電路傳輸數(shù)據(jù)到計(jì)算機(jī),再借助強(qiáng)大的監(jiān)控軟件模擬示波器的操作面板,實(shí)現(xiàn)信號采集、分析、處理、存儲(chǔ)、再顯示、打印輸出等功能[4]。
1.2 數(shù)字示波器的特點(diǎn)及原理
數(shù)字示波器中信號顯示和數(shù)字信號處理功能是獨(dú)立的,其性能取決于進(jìn)行數(shù)字信號處理的微處理器、模-數(shù)轉(zhuǎn)換器和RAM存儲(chǔ)器。采用RAM存儲(chǔ)器可以以很快的速度讀寫數(shù)據(jù),也可以以很慢的速度讀寫數(shù)據(jù),使得無論是觀察高速變化的信號還是很緩慢變化的信號都很自如[5]。
與模擬示波器比較,數(shù)字示波器具有很多方面的有點(diǎn),包括:
1、數(shù)字信號處理:數(shù)字示波器都使用了微處理器,所以它能對所采集到的數(shù)據(jù)進(jìn)行幅度和時(shí)間等基本運(yùn)算,高級的還能完成更復(fù)雜的數(shù)學(xué)運(yùn)算,如平均值、極值、積分、微分、數(shù)字濾波、倒數(shù)等。
2、單次多通道信號捕獲:數(shù)字示波器一般擁有多個(gè)通道,能夠同時(shí)捕獲多個(gè)單次瞬態(tài)信號(比如像電源開、關(guān)或故障發(fā)生等事件)。
3、多種觸發(fā):數(shù)字示波器有多種觸發(fā)類型:邊沿觸發(fā)、峰值觸發(fā)、脈寬觸發(fā)、矮脈沖觸發(fā)、邏輯觸發(fā)等。
4、數(shù)據(jù)存儲(chǔ):數(shù)字示波器可把波形數(shù)據(jù)保存在存儲(chǔ)器上,可在任意需要的時(shí)候調(diào)出波形數(shù)據(jù)進(jìn)行顯示。數(shù)字示波器也很容易實(shí)現(xiàn)與打印機(jī)和繪圖儀進(jìn)行連接,把波形以圖片的格式輸出。
數(shù)字示波器的重點(diǎn)是將連續(xù)的模擬信號轉(zhuǎn)化成離散的數(shù)字信號,也就是從連續(xù)的模擬信號上以一定的時(shí)間間隔離散地采用。采樣有實(shí)時(shí)采樣和等效采樣兩種方式。數(shù)字示波器可按取樣方式分為隨機(jī)采樣數(shù)字示波器、實(shí)時(shí)采樣數(shù)字示波器、順序采樣數(shù)字示波器三種。這三種各自有各自的優(yōu)點(diǎn)和缺點(diǎn),等效采樣可以做到用比較低速的ADC轉(zhuǎn)換器對高頻信號進(jìn)行觀察。
1.3 數(shù)字示波器國內(nèi)外研究狀況
國際數(shù)字存儲(chǔ)示波器的領(lǐng)域,最主要的生產(chǎn)廠商是泰克公司、力科公司和安捷倫公司。泰克公司創(chuàng)始人在1946年發(fā)明了世界上第一臺(tái)觸發(fā)式示波器,始于這個(gè)突破性的技術(shù)創(chuàng)新,如今的泰克已經(jīng)崛起成為全球最大的測試、測量和監(jiān)測設(shè)備供應(yīng)商之一,F(xiàn)在,泰克公司在全球19個(gè)國家都設(shè)有辦事機(jī)構(gòu),2006年銷售收入超過11億美元。該公司早在2000年就推出了模擬帶寬為4GHz帶寬的示波器,以后陸續(xù)在2002年和2004年推出了模擬帶寬分別為6GHz和8GHz的示波器。目前,泰克的最先進(jìn)的數(shù)字示波器的模擬帶寬已經(jīng)高達(dá)80GHz[6]。
力科公司是一家專門從事高端數(shù)字示波器研發(fā)的公司。2008年1月2日,力科公司新推出的WaveMaster8系列數(shù)字示波器,此系列示波器提供了最高可達(dá)30GHz的帶寬、80GS/s的采樣率、512MHz采樣點(diǎn)分析功能及大于15GHz的邊沿觸發(fā)功能。力科公司在同一個(gè)硬件平臺(tái)基礎(chǔ)上設(shè)計(jì)了8-Zi系列,支持全部8種型號,提供了4.30GHz的帶寬。這就意味著工程師可以利用自己的投資,并緊跟新興高速技術(shù)和串行數(shù)據(jù)標(biāo)準(zhǔn),他們只需為當(dāng)前設(shè)計(jì)購買所需的帶寬,在需要變化時(shí)再升級到更高的帶寬。這在經(jīng)濟(jì)衰退時(shí)期特別有吸引力,因?yàn)楦鱾(gè)公司都在力圖最大限度地降低資本投資,尤其力科示波器可以升級到30GHz的帶寬。其中WaveMaste830Zi數(shù)字示波器的帶寬為30GHz實(shí)時(shí)帶寬,為世界上速度最快的實(shí)時(shí)示波器。在示波器技術(shù)研發(fā)部分與泰克相當(dāng)[7]。
在與國外測試測量巨頭的博弈中,示波器領(lǐng)域上中國企業(yè)已取得非常大的突破。RIGOL公司作為中國儀器界崛起的生力軍,繼DS5000系列數(shù)字示波器創(chuàng)下銷售佳績,獲得專業(yè)人士好評之后,于2006年初又投下一顆重磅炸彈,推出一款性能卓著的緊湊型數(shù)字存儲(chǔ)示波器――DS1000系列。DS1000系列在性能上不僅全面超過國外同類產(chǎn)品,打破了在這個(gè)領(lǐng)域國外產(chǎn)品一統(tǒng)天下的局面,同時(shí)又在原DS5000系列產(chǎn)品上大膽創(chuàng)新,使DS1000系列成為為數(shù)不多體積小巧、功能強(qiáng)大、性能卓越的低端數(shù)字示波器,彌補(bǔ)了國內(nèi)空白。RIGOL近幾年中之所以能夠快速增長,其中的一個(gè)重要原因就是利用強(qiáng)大的本土優(yōu)勢,能很好地應(yīng)對來自客戶和整個(gè)行業(yè)的一系列新標(biāo)準(zhǔn),結(jié)果就是用戶能夠更快更好地完成他們的工作[8]。
1.4 Android概述
Android(安卓)一詞的本義指“機(jī)器人”,同時(shí)Android也是Google于07年11月5日宣布的基于Linux平臺(tái)開源手機(jī)操作系統(tǒng)名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。
安卓作為一個(gè)基于Linux內(nèi)核的半開源操作系統(tǒng),目前已廣泛的應(yīng)用于各種移動(dòng)設(shè)備,并正呈現(xiàn)高速發(fā)展的趨勢。原名“Android”的公司最早開發(fā)了安卓系統(tǒng),谷歌在2005年收購“Android.lnc”后,便投入大量資本和人力繼續(xù)進(jìn)行對安卓系統(tǒng)開發(fā)運(yùn)營。安卓采用了軟件堆層(software stack,又名軟件疊層)的架構(gòu),主要分為三部分。基本功能由底層Linux內(nèi)核提供,其他所有的應(yīng)用軟件由各個(gè)公司開發(fā)并發(fā)布,大部分程序都是用Java進(jìn)行編寫的。在2011年初,安卓系統(tǒng)僅上市兩年便超越了稱霸十年之久的塞班系統(tǒng),一舉成為全世界最受歡迎的開放移動(dòng)手機(jī)平臺(tái)。如今不僅僅在智能手機(jī)上使用安卓系統(tǒng),其在平板電腦、機(jī)頂盒等電子產(chǎn)品上的應(yīng)用也是日益廣泛。隨著Android手機(jī)的普及,Android應(yīng)用的需求勢必會(huì)越來越大,這將會(huì)是一個(gè)潛力巨大的市場,會(huì)吸引無數(shù)軟件開發(fā)廠商和開發(fā)者投身其中[9]。
1.5 題目研究背景及意義
近年來,在數(shù)字示波器技術(shù)研究領(lǐng)域國內(nèi)品牌也得到了許多相當(dāng)不錯(cuò)的成果。但是總體上我國示波器領(lǐng)域的水平還是比較落后的,國內(nèi)品牌的數(shù)字示波器在集成化、智能化、數(shù)字化等方面和國外相比還是有相當(dāng)?shù)牟罹。在國?nèi),數(shù)字示波器領(lǐng)域的技術(shù)研究尚處于初級階段,品牌數(shù)字示波器幾乎被國外廠家全部占領(lǐng)。但是由于國內(nèi)消費(fèi)水平相對較低,昂貴的數(shù)字示波器的消費(fèi)能力非常有限,難于普及,仍然還有大量的模擬示波器在使用,這些都嚴(yán)重的妨礙我國在數(shù)字示波器領(lǐng)域的發(fā)展。所以,對于目前國內(nèi)的現(xiàn)狀,本課題選擇數(shù)字示波器的研究是相當(dāng)有意義的。
傳統(tǒng)的模擬示波器存在諸多弊端:第一,模擬示波器升級困難;第二,模擬示波器的造價(jià)高;第三,模擬示波器的精度低;第四,模擬示波器操作復(fù)雜;第五,模擬示波器處理的是模擬信號,模擬信號處理起來很困難;谝陨系目紤],數(shù)字示波器的開發(fā)是非常必要的。
2 數(shù)字示波器原理分析與技術(shù)指標(biāo)
本章主要分析數(shù)字示波器的外部特性,闡述數(shù)字示波器的功能和輸入輸出量;闡述數(shù)字示波器的基本框圖、基本原理;確定數(shù)字示波器中各個(gè)部分所使用的關(guān)鍵器件、關(guān)鍵模塊。
2.1 數(shù)字示波器的組成原理
數(shù)字示波器是上世紀(jì)70年代初發(fā)展起來的新型示波器。該類型的示波器能夠?qū)崿F(xiàn)長期存儲(chǔ)模擬信號,并能能夠運(yùn)用相應(yīng)的編程語言編寫相應(yīng)的算法對存儲(chǔ)的數(shù)據(jù)進(jìn)行處理,如對被測信號的波形、頻率、相位、功率譜和幅度等參數(shù)進(jìn)行精確的測量。數(shù)字示波器的出現(xiàn),是示波器技術(shù)發(fā)展的一個(gè)里程碑,其成功的實(shí)現(xiàn)了傳統(tǒng)模擬示波器所無法完成的功能,為現(xiàn)代測量技術(shù)的發(fā)展提供了強(qiáng)大的動(dòng)力[10]。
數(shù)字示波器典型原理框圖如圖2.1所示。
2.2 數(shù)字示波器與模擬示波器相比較
1、數(shù)字示波器的一大特點(diǎn)是能夠無閃爍地觀察出很低頻率的被測信號,這是模擬示波器無法勝任的。對于很高頻率的被測信號,模擬示波器首先要有很高的帶寬,同時(shí)還要有陰極射線示波管,這些將大大提高模擬示波器的造價(jià),而且模擬示波器的穩(wěn)定性與顯示精度也將大打折扣。而在數(shù)字示波器上,由于可以用一個(gè)固定的刷新顯示速度對存儲(chǔ)數(shù)據(jù)進(jìn)行顯示,而且波形數(shù)據(jù)可以在液晶屏幕上顯示,這樣將大幅降低示波器的造價(jià)和讀出顯示所要求的帶寬。并且在觀察低頻信號時(shí),不至于因?yàn)檫^快的顯示而丟失波形的細(xì)節(jié)信息[11]。
2、數(shù)字示波器能做到很深的存儲(chǔ)深度,即允許存儲(chǔ)很長時(shí)間內(nèi)捕捉到的信號。在對單次瞬變信號的分析和處理方面,數(shù)字示波器的這一大優(yōu)點(diǎn)將大有作為。在實(shí)際應(yīng)用中常常會(huì)碰到很多瞬變的信號,比如放電現(xiàn)象、單次沖擊波等都是在短暫的一瞬間產(chǎn)生的。用模擬示波器觀察這些瞬變信號時(shí),波形將在屏幕上一閃而過,根本來不及觀察,很多的波形細(xì)節(jié)都會(huì)被忽略[12]。在數(shù)字示波器出現(xiàn)之前的年代,當(dāng)時(shí)的工程師設(shè)計(jì)了“屏幕照相”,來解決模擬示波器在觀察瞬變信號時(shí)的缺陷。
3、具有多樣的觸發(fā)功能。數(shù)字示波器不僅能檢測并顯示觸發(fā)后的信號,而且還能檢測并顯示觸發(fā)前的信號,并且顯示波形的超前或滯后時(shí)間可以任意選擇。在材料強(qiáng)度、地震研究、生物機(jī)能等方面的實(shí)驗(yàn)研究上,數(shù)字示波器是一個(gè)非常有利的工具。通過不同的器件或算法,數(shù)字示波器可以實(shí)現(xiàn)不同的觸發(fā)方式,使得在對電信號進(jìn)行跟蹤和分析時(shí)變得更加的方便和準(zhǔn)確。
4、測量精度高。模擬示波器的水平精度受到水平軸掃描鋸齒波線性度的限制,其精度很難提高,一般限制在3%~5%之間。而數(shù)字示波器由于采用了高穩(wěn)定度的晶振,可以達(dá)到很高的測量精度。此外,還可以通過采用更高位的A/D轉(zhuǎn)換器來進(jìn)一步提高垂直精度。同時(shí)由于數(shù)字示波器克服了示波管對測量精度的影響,使得測量精度可以很容易的達(dá)到1%以上。尤其是數(shù)字示波器能夠自動(dòng)的設(shè)置各種參數(shù),這將使信號的實(shí)時(shí)檢測更加的高效。
5、數(shù)字示波器都嵌入了高速微處理器,使它具有很強(qiáng)的信號處理能力與靈活的程序控制性,從而可以方便的實(shí)現(xiàn)對多種波形數(shù)據(jù)的測量、分析與顯示。例如可以分析出波形的周期、頻率、相位、峰峰值以及方波的占空比等參數(shù)。此外,數(shù)字示波器還能與計(jì)算機(jī)進(jìn)行數(shù)據(jù)通信,將測量的數(shù)據(jù)傳輸給計(jì)算機(jī),利用計(jì)算機(jī)中的軟件對數(shù)據(jù)進(jìn)行分析處理與顯示。
雖然數(shù)字示波器有很多優(yōu)勢,但它也存在一定的缺陷。例如,由于受到A/D轉(zhuǎn)換器最大轉(zhuǎn)換速率的限制,數(shù)字示波器的性能無法發(fā)揮到極致[13]。目前,在觀察超高頻率信號方面,數(shù)字示波器還是難于完全勝任。不過伴隨著A/D轉(zhuǎn)換器等技術(shù)的發(fā)展,數(shù)字示波器的功能將越來越完善。
2.3 數(shù)字示波器技術(shù)指標(biāo)2.3.1 最大采樣速率
定義:單位時(shí)間內(nèi)所完成的對模擬輸入信號的采樣次數(shù)就叫做最大A/D采樣速率,單位為Sa/S(次/秒)。最大采樣速率主要取決于A/D轉(zhuǎn)換器的最高轉(zhuǎn)換速率,同時(shí)也受處理器處理速度的限制。最大采樣速率代表數(shù)字示波器在時(shí)間軸上對信號的捕獲能力,其采樣率越大,在時(shí)間軸上對高速單次信號的捕獲能力就越強(qiáng)。
數(shù)字示波器實(shí)際所使用的采樣速率與所設(shè)定的示波器水平掃描時(shí)間之間具有一定的關(guān)系,即示波器需要顯示的點(diǎn)數(shù)和水平掃描時(shí)間因子將一起決定示波器實(shí)際所使用的采樣速率,其計(jì)算公式可表示為
式(2.1)中,N表示顯示屏每格顯示的點(diǎn)數(shù);t/div表示示波器水平掃描時(shí)間因子,也就是示波器掃描顯示一格所需的時(shí)間[14]。比如選示波器的水平掃描時(shí)間為10ms/div,每格包含100個(gè)采樣點(diǎn),那么可以計(jì)算得知此時(shí)示波器的采樣率為10KHz。因?yàn)槭静ㄆ魉斤@示的點(diǎn)數(shù)是固定的,那么示波器的水平掃描速度將和采樣速率具有一一對應(yīng)的關(guān)系,也就是說示波器最快的掃描速度是由其最大采樣速率決定的。如果某示波器的最大采樣速率為100MHz,那么其最快的掃描速度為1uS/div。
2.3.2 存儲(chǔ)寬度
示波器的存儲(chǔ)寬度和采樣速率也存在密切的關(guān)系。根據(jù)奈奎斯特抽樣定理,如果采樣速率大于或等于信號最高頻率的2倍,那么就可以完整的恢復(fù)原始信號的波形。但是在數(shù)字示波器設(shè)計(jì)過程中,往往會(huì)為了更真實(shí)的顯示信號波形,而需要在一個(gè)信號周期內(nèi)采集更多的點(diǎn)。一個(gè)信號周期內(nèi)采集到的點(diǎn)數(shù)越多,還原出來的波形的失真就越小。
2.3.3 分辨率
分辨率是指能夠分辨出的被測信號波形的最小幅值,其指示的是信號波形細(xì)節(jié)的綜合指標(biāo),包括水平分辨率和垂直分辨率。
垂直分辨率又稱電壓分辨率,它取決于A/D數(shù)模轉(zhuǎn)換器的分辨率,通常用數(shù)模轉(zhuǎn)換器數(shù)據(jù)的位數(shù)來表示,單位是比特[15]。比如,如果某數(shù)字示波器所使用的A/D數(shù)模轉(zhuǎn)換器的精度是8位的,那么稱該數(shù)字示波器的垂直分辨率是8bit。垂直分辨率也可用顯示屏每格的A/D轉(zhuǎn)換級數(shù)表示,單位是級/div。假設(shè)某數(shù)字示波器使用的是8bit的A/D轉(zhuǎn)換器,顯示屏垂直方向上有8個(gè)格,那么稱該數(shù)字示波器的垂直分辨率為32級/div。
水平分辨率又稱時(shí)間間隔分辨率,通常以數(shù)字示波器在進(jìn)行波形采樣時(shí)所能分辨的最小時(shí)間間隔值來表示。如果沒有加入內(nèi)插,當(dāng)數(shù)字示波器的采樣速率為
分辨率與測量準(zhǔn)確度緊密相關(guān),但分辨率并非就是測量準(zhǔn)確度,而是理想情況下測量準(zhǔn)確度的上線。
2.3.4 記錄長度
記錄長度又稱存儲(chǔ)深度,用記錄一幀波形數(shù)據(jù)所利用的存儲(chǔ)容量來表示,單位為KB或MB等。記錄長度表示的是數(shù)字示波器能夠連續(xù)存入采樣點(diǎn)的最大字節(jié)數(shù)。記錄長度和水平分辨率之間存在正比的關(guān)系,即記錄長度越長,水平分辨率就越高;反之,記錄長度越短,水平分辨率就越低。一般來說,記錄長度越長,就允許用戶捕捉更長時(shí)間內(nèi)的事件,就能更好的描述更為復(fù)雜的波形。但是由于高速存儲(chǔ)器制造技術(shù)的限制,目前數(shù)字示波器的記錄長度是有限的,通常采用的是1KB,4KB,8KB或者是更大的記錄長度。需要指出的是,對于一個(gè)數(shù)字示波器,其記錄長度是一個(gè)定值,但實(shí)際使用中存儲(chǔ)容量是可以變化的。
2.3.5 存儲(chǔ)帶寬
存儲(chǔ)帶寬定義為示波器輸入不同頻率的等幅正弦波信號時(shí),顯示屏上顯示的信號幅度下降3dB時(shí)所對應(yīng)的輸入信號的上、下限頻率之差,也稱為示波器的頻帶寬度,單位為MHz或GHz[16]。
數(shù)字示波器有模擬帶寬和存儲(chǔ)帶寬兩種表達(dá)方式。模擬帶寬指的是采樣點(diǎn)路以前模擬信號通道電路的頻帶寬度,主要由信號調(diào)理電路的幅頻特性決定。如果沒有特殊說明,數(shù)字示波器的頻帶寬度一般指的是其模擬帶寬。存儲(chǔ)寬度按其采樣方式的不同又分為實(shí)時(shí)帶寬與等效帶寬兩種。實(shí)時(shí)帶寬指的是采用實(shí)時(shí)采樣方式時(shí)所具有的存儲(chǔ)寬度,主要取決于A/D轉(zhuǎn)換器的采樣速率和波形處理所采用的內(nèi)插技術(shù)。根據(jù)取樣定理,如果采樣速率大于或等于信號最高頻率分量的兩倍,便可重現(xiàn)原始信號波形。在數(shù)字示波器設(shè)計(jì)中,通常要求比信號頻率高更多倍數(shù)的采樣速率,以保證顯示分辨率。采用點(diǎn)顯示方式時(shí),每周期采樣點(diǎn)數(shù)k一般取20~25,也即要求采樣頻率是信號頻率的20~25倍。采用插值技術(shù)可以降低示波器對采樣速率的要求,采用矢量內(nèi)插方式時(shí),一般取k=10;當(dāng)采用正弦內(nèi)插方式時(shí),一般取k=2.5。等效帶寬指的是示波器工作在等效采樣方式下,測量周期信號時(shí)所表現(xiàn)出來的頻帶寬度。在等效采樣方式下,要求信號必須是周期重復(fù)的,否則無法準(zhǔn)確的重現(xiàn)波形。使用等效采樣時(shí),數(shù)字示波器一般要經(jīng)過多個(gè)采樣周期,并對采集的樣點(diǎn)進(jìn)行重新組合,才能重顯被測波形。等效帶寬可以做的很寬,有的數(shù)字示波器的等效帶寬可達(dá)到幾十GHz以上。
2.3.6 垂直靈敏度及誤差
垂直靈敏度是指數(shù)字示波器顯示在垂直方向(Y軸)每格所代表的電壓幅度值,常以V/div、mV/div表示。根據(jù)模擬示波器的習(xí)慣,數(shù)字示波器也按1-2-5步進(jìn)方式分擋,每擋也可以細(xì)調(diào)。垂直靈敏度表明了示波器測量最大和最小信號幅度的能力。垂直靈敏度誤差是指數(shù)字示波器測量信號幅度的準(zhǔn)確度,一般用規(guī)定頻率的標(biāo)準(zhǔn)幅度脈沖信號作校驗(yàn)信號,其計(jì)算公式如下
式(2.2)中,e為垂直靈敏度誤差,V1為測量讀數(shù)值(V),V2為校準(zhǔn)信號每格電壓值(V),D為校準(zhǔn)信號格數(shù)(div)。
2.3.7 掃描速度及誤差
掃描速度(又稱掃描時(shí)間因數(shù),簡稱為掃速)定義為示波器光點(diǎn)在屏幕水平方向上移動(dòng)一格所占用的時(shí)間,以s/div、ms/div、μs/div、ns/div、ps/div等表示。掃描速度表明了示波器能測量信號頻率的范圍。沿用模擬示波器的習(xí)慣,也按1-2-5步進(jìn)方式分擋,每擋也能細(xì)調(diào)。掃描速度取決于A/D轉(zhuǎn)換器的轉(zhuǎn)換速率及記錄長度(存儲(chǔ)容量),其值為相鄰兩個(gè)取樣點(diǎn)的時(shí)間間隔與每格取樣點(diǎn)數(shù)N的乘積,即
掃描速度誤差是指示波器測量時(shí)間間隔的準(zhǔn)確度。一般用具有標(biāo)準(zhǔn)周期時(shí)間的脈沖信號作為校驗(yàn)信號,其計(jì)算公式如下式
式(2.4)中,e為掃描誤差;Δt為校準(zhǔn)信號周期時(shí)間測量讀數(shù)值;T0為校準(zhǔn)信號周期時(shí)間值。
2.4 采樣原理分析2.4.1 實(shí)時(shí)采樣方式的原理
實(shí)時(shí)取樣指的是利用等時(shí)間間隔取樣脈沖對被測信號進(jìn)行取樣,按照取樣時(shí)鐘的先后順序?qū)/D采樣的數(shù)據(jù)存在存儲(chǔ)器中的過程。取樣就是對連續(xù)的信號波形進(jìn)行量化的過程,如圖2.2所示。其方法可用圖2.3說明。
圖片請下載附件中有完整版
把模擬信號的波形送到采樣保持電路,并通過采樣脈沖來控制采樣電路對模擬信號進(jìn)行采樣,取樣方框圖如圖2.3所示。令n代表第n個(gè)時(shí)刻的抽樣,在取樣脈沖到來的瞬間,在A/D轉(zhuǎn)換器的輸入端就得到相應(yīng)的模擬量An(n=1,2,3,…),這個(gè)模擬量An就是所需要的用于進(jìn)行離散化的模擬量。若把An中的每一個(gè)離散模擬量進(jìn)行A/D轉(zhuǎn)換,就可以得到相應(yīng)的數(shù)字量,這也就是量化的過程。我們把A/D采樣得到的數(shù)據(jù)按照采樣順序進(jìn)行存儲(chǔ),也就實(shí)現(xiàn)了將模擬信號轉(zhuǎn)化為一序列的數(shù)字信號進(jìn)行存儲(chǔ)。A/D轉(zhuǎn)換器是將模擬信號進(jìn)行數(shù)字化的核心器件,它與數(shù)字示波器的存儲(chǔ)帶寬、最大取樣速率以及垂直分辨率等多項(xiàng)指標(biāo)有關(guān),所以A/D轉(zhuǎn)換器的選取是數(shù)字示波器設(shè)計(jì)過程中非常重要的一個(gè)環(huán)節(jié)。
2.4.2 等效取樣方式的原理
實(shí)時(shí)取樣方式對觀測單次瞬變信號特別有效,是數(shù)字示波器采樣方式中不可或缺的一種。但受到最大采樣速率的約束,實(shí)時(shí)采樣方式很難實(shí)現(xiàn)大的帶寬。因此,想要提高帶寬,就必須尋找一種更有效的取樣方式,而等效取樣正是一種有效的能提高帶寬的方式。等效取樣方式也稱非事實(shí)取樣,可分為順序取樣和隨機(jī)取樣兩種方式。等效取樣方式的原理是先利用“等效取樣技術(shù)”,將高頻周期性信號轉(zhuǎn)換為波形性質(zhì)與其相似的低頻周期性信號,然后對采集到的低頻信號進(jìn)行處理與轉(zhuǎn)化,就可以輕松的獲得很寬的頻帶,從而實(shí)現(xiàn)對高頻周期性信號的檢測[17]。但是等效取樣方式有兩個(gè)制約條件:1、必須是周期性的信號;2、信號波形能夠形成穩(wěn)定的觸發(fā)。常用的等效取樣方式的采集系統(tǒng)框圖如圖2.4所示。
3 系統(tǒng)方案論證3.1 系統(tǒng)總體方案設(shè)計(jì)
數(shù)字示波器很大的一個(gè)特點(diǎn),就是能對采集到的波形數(shù)據(jù)進(jìn)行處理,通過特定的算法即可測量出信號的頻率、幅值和相位等電氣參數(shù)。并且示波器能將運(yùn)算處理后的數(shù)據(jù)直接顯示在LCD液晶屏上,通過調(diào)整合適的掃描速度就能方便的觀察到信號的細(xì)節(jié)。由于示波器需要處理的數(shù)據(jù)量比較大,且對于高頻信號需要很高的采樣率和刷新速度,因此一般的微處理器難于滿足[19]。目前高性能的數(shù)字示波器都采用FPGA來控制數(shù)據(jù)的采集和處理數(shù)據(jù)。由于FPGA的靈活性極高,采用FPGA的系統(tǒng)能高效的處理數(shù)據(jù)及顯示波形。但是由于FPGA的成本較高,并不適用于低端便攜式產(chǎn)品上。
本文的設(shè)計(jì)理念是便攜式、低成本,因此需要尋找一款性能高、價(jià)格低的微處理器?紤]到成本和實(shí)際應(yīng)用,本文選擇了意法半導(dǎo)體公司的STM32微處理器作為主控制器。STM32系列是基于專為要求高性能、低成本、低功耗的嵌入式應(yīng)用專門設(shè)計(jì)的ARM Cortex-M3內(nèi)核,能完全滿足本設(shè)計(jì)對成本和性能的要求。
本文的另外一個(gè)亮點(diǎn)就是使用了Android作為波形顯示平臺(tái)。在這個(gè)基本上是人手一部Android手機(jī)的時(shí)代,怎樣充分挖掘Android軟硬件的使用價(jià)值就顯得尤為重要。本設(shè)計(jì)用到Android的屏幕來顯示波形,而且還使用了觸摸屏來對示波器進(jìn)行控制,這樣將大大縮小硬件的體積和降低系統(tǒng)成本。同時(shí)示波器硬件電路和Android之間通過藍(lán)牙實(shí)現(xiàn)無線數(shù)據(jù)傳輸,這使得系統(tǒng)的應(yīng)用將是非常的方便。
數(shù)字示波器的結(jié)構(gòu)框圖如圖3.1所示。
本論文設(shè)計(jì)的數(shù)字示波器的工作方式是,被測信號經(jīng)STM32控制的采樣電路進(jìn)行采樣并對數(shù)據(jù)進(jìn)行處理,然后通過藍(lán)牙把處理過后的波形數(shù)據(jù)發(fā)送到Android端,最后通過Android端的應(yīng)用程序把波形顯示出來。在Android端的應(yīng)用程序上可以操作示波器的所有功能,比如調(diào)節(jié)垂直靈敏度、水平掃描速度、觸發(fā)電平、垂直基線等。同時(shí)本設(shè)計(jì)非常小巧,且使用鋰電池進(jìn)行供電,非常方便攜帶。本設(shè)計(jì)的理念是,只要你擁有一臺(tái)Android手機(jī)或者平板電腦,你就可以擁有一個(gè)低成本的、便于攜帶的數(shù)字示波器。
圖片請下載附件有完整版
模擬信號處理是示波器的重要組成部分,也是信號采集系統(tǒng)中的一個(gè)核心部分。圖3.1清晰的介紹了數(shù)字示波器的結(jié)構(gòu)框圖,從圖中可以看出,模擬通道的輸入信號被分成兩路,一路送至程控放大器,用來實(shí)現(xiàn)垂直靈敏度的調(diào)節(jié);另一路送至觸發(fā)電路,用于測量被測信號的頻率。其中程控放大器是示波器模擬部分設(shè)計(jì)的關(guān)鍵,也是示波器帶寬最重要的限制因素。
3.2 數(shù)據(jù)采集系統(tǒng)3.2.1 波形整形電路方案選擇
波形整形電路的選擇主要是選擇合適的比較器芯片,為了防止波形在過零點(diǎn)出現(xiàn)抖動(dòng),比較電路最好是接成滯回比較結(jié)構(gòu),以免影響比較器的輸出波形。
方案一:采用Maxim公司的高速比較芯片Max912構(gòu)成滯回比較器。Max912的最高轉(zhuǎn)換速度可達(dá)ns級別,對頻率很高的信號都能進(jìn)行有效的整形。但缺點(diǎn)是Max912的成本太高。
方案二:采用比較器LM311構(gòu)成滯回比較器。在對5M以下的信號進(jìn)行整形時(shí),能收到比較好的效果。最主要的還是其價(jià)格相對比較低,能滿足本設(shè)計(jì)對成本的控制。但當(dāng)信號頻率高于5M時(shí),由于收到LM311轉(zhuǎn)換速度的限制,其整形效果比較差。
基于本設(shè)計(jì)對測試范圍的要求以及成本的控制,本設(shè)計(jì)選擇方案二。
3.2.2 程控放大電路方案選擇
由于A/D轉(zhuǎn)換器的輸入范圍一般都比較小(低于2Vpp),不可能直接測量幾十伏甚至是幾百伏的信號。而且由于A/D轉(zhuǎn)換器的分辨率有限,對于幅值很低的信號測量誤差將會(huì)很大甚至是無法測量。所以在輸入級必須要設(shè)計(jì)一個(gè)程控放大電路,以現(xiàn)實(shí)對信號進(jìn)行不失真的處理,而后再送至A/D數(shù)模轉(zhuǎn)換器,以達(dá)到A/D數(shù)模轉(zhuǎn)換器的輸入要求。通常情況下所說的“示波器的模擬帶寬”就是輸入級的模擬信號放大電路的帶寬。而數(shù)字示波器的帶寬主要是用采樣率來定義,主要受數(shù)模轉(zhuǎn)換器的最高采樣率以及控制器的處理速度的限制。
方案一:利用高速運(yùn)放LM6172構(gòu)成放大電路,并設(shè)置多種不同放大倍數(shù)的反饋電阻網(wǎng)絡(luò),然后通過控制繼電器選擇不同的反饋電阻,從而實(shí)現(xiàn)不同放大倍數(shù)的切換。其優(yōu)點(diǎn)是電路和控制都比較簡單,放大倍數(shù)穩(wěn)定。但缺點(diǎn)是繼電器的工作電流大,且需要多個(gè)繼電器配合才能實(shí)現(xiàn)多種不同的放大倍數(shù),很明顯不符合本設(shè)計(jì)便攜小巧的宗旨。同時(shí)繼電器在開和關(guān)的瞬間都會(huì)產(chǎn)生很大的電磁干擾,有可能會(huì)影響到系統(tǒng)的正常運(yùn)行。
方案二:使用模擬開關(guān)HCF4051BE代替繼電器,來實(shí)現(xiàn)不同放大倍數(shù)的切換。優(yōu)點(diǎn)是克服了繼電器工作電流大、體積大等缺點(diǎn),且電路結(jié)構(gòu)簡單,成本低廉。但缺點(diǎn)是模擬開關(guān)無法實(shí)現(xiàn)零阻抗,且其帶寬有限,通過高頻信號將會(huì)產(chǎn)生失真。
方案三:使用專用PGA芯片AD603,可以通過MCU來控制AD603的基準(zhǔn),進(jìn)而實(shí)現(xiàn)不同放大倍數(shù)的調(diào)節(jié)。該電路優(yōu)點(diǎn)是控制比較簡單,且增益調(diào)節(jié)范圍大,外圍電路簡單。缺點(diǎn)是成本稍微偏高。
基于本設(shè)計(jì)便攜小巧的宗旨,和電路復(fù)雜度的考慮,本設(shè)計(jì)選擇方案三。
3.3 數(shù)據(jù)處理系統(tǒng)3.3.1 觸發(fā)方案選擇
為了波形能在示波器顯示屏上穩(wěn)定顯示,必須要到用觸發(fā)系統(tǒng),以保證被測信號與掃描信號始終保持同步。也即是每次掃描的起始點(diǎn),都是信號波形一個(gè)周期內(nèi)固定的一個(gè)點(diǎn)。
方案一:采用高速比較器構(gòu)成觸發(fā)電路。這種方法對于比較器的轉(zhuǎn)換速率要求很高,在帶寬很高的示波器上,一般的比較器難于滿足要求。并且采用高速比較器,將會(huì)增加系統(tǒng)的制作成本。此外,硬件觸發(fā)電路如果設(shè)計(jì)的不好,比較器的輸出容易產(chǎn)生抖動(dòng)毛刺,容易使系統(tǒng)誤將抖動(dòng)毛刺當(dāng)作觸發(fā)信號,從而使整個(gè)硬件系統(tǒng)變的不可靠。
方案二:采用軟件觸發(fā)方式。軟件觸發(fā)的原理很簡單,就是在MCU內(nèi)通過一定的算法,將A/D轉(zhuǎn)換器采集到的數(shù)據(jù)和軟件設(shè)置的觸發(fā)電平進(jìn)行比較,從而實(shí)現(xiàn)可靠的波形觸發(fā)。其優(yōu)點(diǎn)是可以根據(jù)實(shí)際情況方便的選擇不同的觸發(fā)方式和觸發(fā)電平,具有極高的靈活性。此外該方案在一定程度上消除了硬件觸發(fā)電路產(chǎn)生的干擾毛刺,提高系統(tǒng)的穩(wěn)定性。
基于以上對系統(tǒng)穩(wěn)定性和成本控制的考慮,本設(shè)計(jì)選擇方案二。
3.3.2 峰值測量方案選擇
對示波器來說,測量并顯示信號峰值是其必不可少的一部分。信號峰值測量包括正峰值和負(fù)峰值,而信號峰峰值就是正負(fù)峰值的絕對值。
方案一:峰值檢波法。峰值檢波法是利用硬件電路對電容進(jìn)行充放電,從而在電容兩端保持信號峰值。然后通過A/D轉(zhuǎn)換器采集電容兩端的電壓值,并把峰值顯示出來。峰值檢波法能有效的測量出信號的峰值,且由于是采用硬件電路來實(shí)現(xiàn)峰值的檢測,不會(huì)對MCU增加任何的負(fù)擔(dān)。但該方案的缺點(diǎn)是需要采用高速運(yùn)算放大器,不但增加了系統(tǒng)的設(shè)計(jì)成本,同時(shí)也增加了硬件系統(tǒng)的復(fù)雜度。
方案二:數(shù)字方法。所謂數(shù)字方法,就是通過分析A/D轉(zhuǎn)換器所采集到的波形數(shù)據(jù),采用最大值和最小值算法,計(jì)算出信號的正峰值和負(fù)峰值。該方案的缺點(diǎn)是增加了軟件算法的復(fù)雜度,從而降低了波形數(shù)據(jù)采集、處理和顯示的速度。另外,由于受到A/D轉(zhuǎn)換器最高采樣率的限制,該方法不適用于高頻信號的測量。
考慮到本設(shè)計(jì)測量的頻率范圍不是很大,且在軟件系統(tǒng)中增加峰值測量算法,對信號數(shù)據(jù)處理及顯示速度的影響不大。同時(shí)為了不增加系統(tǒng)的設(shè)計(jì)成本,本設(shè)計(jì)的峰值測量方案采用方案二。
3.3.3 測量頻率方案選擇
因?yàn)楸粶y信號頻率的大小決定了示波器的采樣方式,且直接決定采樣時(shí)鐘的選擇,因而測量頻率在示波器中顯得尤為重要。測量頻率的方案通常有測周法和測頻法兩種。
方案一:測周法。這是一種比較簡單易用的方案,其原理是被測信號通過觸發(fā)電路,連接到單片機(jī)定時(shí)器的計(jì)數(shù)IO口上,實(shí)現(xiàn)對被測信號周期數(shù)的測量。然后取一個(gè)固定的計(jì)數(shù)門限,通過計(jì)算在該固定時(shí)間內(nèi)計(jì)數(shù)器的計(jì)數(shù)值,就可以計(jì)算出被測信號的頻率。也可以是通過計(jì)算一定周期數(shù)的脈沖,然后再算出計(jì)數(shù)所使用的時(shí)間,就能知道被測信號的頻率了。 在被測信號頻率較高的場合,該方案可以做到很高的精度。在被測信號頻率較低時(shí),如果想保持高精度的話,則需要加長計(jì)數(shù)門限時(shí)間,但這會(huì)使得示波器的響應(yīng)變慢。換言之,該方案的缺點(diǎn)是測量精度受被測信號頻率的影響。
方案二:等精度測頻法。其原理是在一個(gè)固定的門限時(shí)間內(nèi),使用一個(gè)固定頻率的基準(zhǔn)脈沖,使得被測信號與基準(zhǔn)脈沖同時(shí)計(jì)數(shù),再通過兩個(gè)計(jì)數(shù)值之間的關(guān)系便可以計(jì)算出被測信號頻率。門限時(shí)間的開啟由被測脈沖的邊沿來觸發(fā)。該方案的優(yōu)點(diǎn)是測量精度與被測信號頻率無關(guān),且只要基準(zhǔn)脈沖頻率足夠大,系統(tǒng)就能夠?qū)崿F(xiàn)很高的測量精度。
考慮到本設(shè)計(jì)的測量頻率范圍比較大,且要求在整個(gè)頻段內(nèi)都能保持一定的測量精度,因此采用方案二。
3.3.4 采樣方案選擇
在現(xiàn)代數(shù)字示波器一般都會(huì)同時(shí)采用實(shí)時(shí)采樣和等效采樣這兩種采樣方式。
方案一:實(shí)時(shí)采樣。實(shí)時(shí)采樣是在信號的一個(gè)完整周期內(nèi)對其采樣,故顯示的都是信號的實(shí)時(shí)波形。按照奈奎斯特抽樣定理,采樣速率必須高于信號最高頻率分量的2倍,否則無法恢復(fù)原始信號。對于周期正弦信號,一個(gè)周期內(nèi)的采樣點(diǎn)要多于2個(gè)?紤]實(shí)際因素的影響,為了不失真地恢復(fù)被測信號的波形,通常按照恢復(fù)失真度選取相應(yīng)的采樣點(diǎn)數(shù)。這里用采樣點(diǎn)直接恢復(fù)方式,因此一個(gè)信號周期內(nèi)至少需要20個(gè)采樣點(diǎn)數(shù)。該方案的缺點(diǎn)是在信號頻率很高時(shí),由于受到采樣器件的限制,很難實(shí)現(xiàn)實(shí)時(shí)采樣。
方案二:等效采樣。等效采樣又稱為非實(shí)時(shí)采樣,可分為順序采樣和隨機(jī)采樣兩種方式。順序采樣是對每一個(gè)信號周期僅采樣一點(diǎn),經(jīng)過若干個(gè)周期的采樣之后,就能完整的恢復(fù)原始信號的波形。隨機(jī)采樣是在每個(gè)采樣周期內(nèi)采集多個(gè)采樣點(diǎn),并且每個(gè)采樣周期第一個(gè)采樣點(diǎn)的時(shí)刻是隨機(jī)的,經(jīng)過多個(gè)采樣周期的疊加即可還原原始波形。但等效采樣法的前提是,被測信號必須是周期信號且能有效的觸發(fā),也就是說等效采樣方式對單次信號的測量是無能為力的。
等效采樣雖然可以對很高頻率的信號進(jìn)行采樣,但是步進(jìn)延遲的采樣技術(shù)較難實(shí)現(xiàn),而且總采樣時(shí)間過長,從而導(dǎo)致示波器反應(yīng)速度慢。而實(shí)時(shí)采樣方式的優(yōu)點(diǎn)是采樣所需的時(shí)間很短,示波器響應(yīng)快。同時(shí)考慮到本設(shè)計(jì)所要求的采樣率不是特別高,因此本設(shè)計(jì)選用實(shí)時(shí)采樣的方式。
4 系統(tǒng)硬件電路設(shè)計(jì)4.1 微控制器電路
主控制器采用STM32F103系列單片機(jī)作為控制核心。STM32系列基于專為要求高性能、低成本、低功耗的嵌入式應(yīng)用專門設(shè)計(jì)的ARM Cortex-M3內(nèi)核。其具有最高72MHz的工作頻率,能夠滿足系統(tǒng)對速度的要求。微控制器電路如圖4.1所示。
4.2 電源電路設(shè)計(jì)
本設(shè)計(jì)的定位是便攜式,因此采用鋰電池供電。鋰電池選用目前市場上性價(jià)比最高的18650電池,容量為2000mAh,并可充電。因?yàn)殇囯姵氐碾妷簽?.7V,因此需要設(shè)計(jì)一個(gè)升壓電路把電壓升壓到5V,才能給系統(tǒng)供電。升壓電路如圖4.2所示。
此外,還需要設(shè)計(jì)一個(gè)負(fù)電壓轉(zhuǎn)換電路,以產(chǎn)生-5V來給運(yùn)放供電。負(fù)電壓轉(zhuǎn)換電路采用芯片ICL7660來完成,該芯片具有成本低、電路結(jié)構(gòu)簡單等優(yōu)點(diǎn)。負(fù)電壓轉(zhuǎn)換電路如圖4.3所示。
4.3 信號采集電路設(shè)計(jì)
信號采集部分是數(shù)字示波器和模擬示波器在本質(zhì)上的區(qū)別,其組成包括模擬信號的調(diào)理和數(shù)字信號的處理。數(shù)字示波器的性能也主要是受到信號采集系統(tǒng)的限制。因此對數(shù)字示波器來說,一個(gè)好的信號采集系統(tǒng)是至關(guān)重要的。
4.3.1 A/D轉(zhuǎn)換及FIFO緩存器
A/D轉(zhuǎn)換器是模擬信號轉(zhuǎn)換為數(shù)字信號的核心部分,其作用是將模擬信號轉(zhuǎn)換為便于存儲(chǔ)和處理的數(shù)字信號。在本設(shè)計(jì)中選用的AD轉(zhuǎn)換芯片為TI公司的8位高速AD轉(zhuǎn)換器ADS830E,它的采樣頻率為10kSa/s~60MSa/s,通過實(shí)驗(yàn)發(fā)現(xiàn)轉(zhuǎn)換速率在lK以下也能正常工作,本設(shè)計(jì)的最低采樣頻率為600Sa/s。由于高速AD轉(zhuǎn)換器一般都有高低端轉(zhuǎn)換速率的限制,選擇AD轉(zhuǎn)換芯片時(shí),不僅要注意最高轉(zhuǎn)換速率還要關(guān)注最低轉(zhuǎn)換速率,否則可能導(dǎo)致電路無法正常工作。
A/D采樣出來的數(shù)據(jù),是隨采樣時(shí)鐘和被測信號的變化而變化的,所以要能夠再現(xiàn)被測信號,必須要把每次采集的數(shù)據(jù)存人緩存器。F1F0就是一個(gè)典型的緩存器,它是一個(gè)先進(jìn)先出的存儲(chǔ)器,可同時(shí)對存儲(chǔ)空間進(jìn)行讀寫,沒有地址線,第一個(gè)讀出來的數(shù)據(jù)是第一個(gè)寫進(jìn)去的數(shù)據(jù)。在本設(shè)計(jì)中選擇了專門的FIFO芯片IDT7203,如圖4.4所示。
4.3.2 程控放大電路
程控放大電路主要是對被測信號在幅度上進(jìn)行線性處理,使信號在垂直方向上處于A/D轉(zhuǎn)換器的輸入范圍內(nèi)。待測模擬信號輸入到數(shù)字示波器時(shí)首先要經(jīng)過相關(guān)的處理才能夠送給ADC,因?yàn)锳DC對輸入電壓的幅度有一定的要求,比如2V~3V,或者1.5V~3.5V等。對于輸入的模擬信號,要根據(jù)不同的垂直靈敏度做出調(diào)整,具體說就是把小電壓信號放大,將大電壓信號衰減使之符合ADC的輸入電壓范圍。因此,需要對電壓大小不同的信號進(jìn)行增益調(diào)整,也就是需要一個(gè)程控放大電路。本設(shè)計(jì)采用的程控放大電路如圖4.5所示。
本設(shè)計(jì)采用可變增益放大器AD603來構(gòu)成程控放大電路。AD603是AD公司推出的一種低噪聲且由電壓控制的增益放大器。它提供精確的、可由管腳選擇的增益,它的增益是線性變化的,且在溫度和電源電壓變化時(shí)有很高的穩(wěn)定性,增益變化的范圍40dB,增益控制轉(zhuǎn)換比例25mV/dB, 響應(yīng)速度為40dB,變化范圍所需時(shí)間小于1us。AD603內(nèi)部包含一個(gè)七級R-2R梯形網(wǎng)絡(luò)組成的0dB到-42.14dB的可變衰減器和一個(gè)固定增益的放大器,此固定增益放大器的增益可通過外接不同反饋網(wǎng)絡(luò)的方式改變,以選擇AD603不同的增益變化范圍。
4.3.3 電平移位電路設(shè)計(jì)
因?yàn)锳DS830E的模擬輸入電壓范圍是1.5V~3.5V,輸入中點(diǎn)電壓為2.5V,所以基線電壓應(yīng)為2.5V。因此需要設(shè)計(jì)一個(gè)電平移位電路,把前級經(jīng)過調(diào)理后的信號疊加2.5V,以滿足AD轉(zhuǎn)換器的電壓輸入范圍。電平移位電路如圖4.6所示。
電路圖中,IN為前級調(diào)理后的輸入信號,ADC端接到AD轉(zhuǎn)換器的輸入端,Level為單片機(jī)的PWM輸出端。單片機(jī)輸出的PWM經(jīng)過RC低通濾波器之后,將會(huì)變成一個(gè)和占空比相對應(yīng)的電壓值,從而實(shí)現(xiàn)了通過改變PWM的占空比來改變信號波形的基線。
4.3.4 頻率測量電路
頻率的測量采用單片機(jī)外部中斷/INT,對頻率測量電路產(chǎn)生的脈沖進(jìn)行計(jì)數(shù),再通過對測量數(shù)據(jù)的校正來完成。為抑制干擾引起的誤翻轉(zhuǎn),本設(shè)計(jì)應(yīng)用滯回比較電路,將信號由反向端輸入。電路的正向閾值電壓滿足公式4.1,對應(yīng)于輸出信號的下降沿;其負(fù)向閾值電平為0V,對應(yīng)于輸出信號的上升沿。滯回比較器如圖4.7所示。
在數(shù)字測量和控制系統(tǒng)中,由傳感器送來的波形邊沿較差,此外,脈沖信號經(jīng)過遠(yuǎn)距離的傳輸后,往往會(huì)發(fā)生各種各樣的畸變,利用滯回比較電路可以對這些信號進(jìn)行整形。整形效果如圖4.8所示。
4.4 無線數(shù)據(jù)傳輸
本設(shè)計(jì)的一大特點(diǎn)是,把采集到的波形數(shù)據(jù)發(fā)送到Android設(shè)備平臺(tái)進(jìn)行顯示,并使用藍(lán)牙技術(shù)進(jìn)行無線數(shù)據(jù)傳輸。本設(shè)計(jì)選用博陸科公司的BLK-MD-BC04-B型藍(lán)牙模塊,其采用英國CSR公司Blue Core4-Ext芯片,遵循V2.1+EDR藍(lán)牙規(guī)范。其支持UART、USB、SPI、PCM、SPDIF等接口,并支持SPP藍(lán)牙串口協(xié)議,具有成本低、體積小、功耗低、收發(fā)靈敏性高等優(yōu)點(diǎn),只需配備少許的外圍元件就能實(shí)現(xiàn)其強(qiáng)大功能。
該模塊主要用于短距離的數(shù)據(jù)無線傳輸領(lǐng)域?梢苑奖愕暮 PC機(jī)的藍(lán)牙設(shè)備相連,也可以兩個(gè)模塊之間的數(shù)據(jù)互通。避免繁瑣的線纜連接,能直接替代串口線。該模塊廣泛應(yīng)用于工業(yè)遙控、遙測;POS系統(tǒng),無線鍵盤、鼠標(biāo);樓宇系統(tǒng)化、安防、機(jī)房設(shè)備無線監(jiān)控、門禁系統(tǒng);汽車檢測設(shè)備等領(lǐng)域。
藍(lán)牙模塊功能框圖如圖4.9所示,應(yīng)用電路如圖4.10所示。
5 系統(tǒng)軟件設(shè)計(jì)5.1 單片機(jī)軟件開發(fā)環(huán)境
本設(shè)計(jì)采用STM32F103系列單片機(jī)作為控制核心,軟件開發(fā)環(huán)境選用keil uVision。
keil uVision是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。keil uVision軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時(shí)更能體現(xiàn)高級語言的優(yōu)勢。
C51工具包的整體結(jié)構(gòu),其中uVision是C51 for Windows的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A5l編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標(biāo)文件(.ABS)。ABS由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級調(diào)試,也可由仿真器使用直接對目標(biāo)板進(jìn)行調(diào)試,也可以直接寫入程序存儲(chǔ)器如EPROM中。
5.2 主程序設(shè)計(jì)及流程圖
本設(shè)計(jì)是一個(gè)以硬件為基礎(chǔ)的、軟硬件緊密結(jié)合的系統(tǒng)。對于智能儀器儀表來說,軟件就是靈魂。示波器軟件采用C語言來編寫,完成對人機(jī)界面、系統(tǒng)控制、系統(tǒng)硬件、波形參數(shù)分析等的控制。主程序流程圖如圖5.1所示。
5.3 數(shù)據(jù)處理子程序
5.3.1 同步觸發(fā)的軟件實(shí)現(xiàn)
為了降低電路的復(fù)雜性,本設(shè)計(jì)采用軟件來實(shí)現(xiàn)同步觸發(fā)。軟件觸發(fā)的好處是觸發(fā)
條件更易調(diào)整,只需調(diào)整比較語句中的參數(shù)即可。保證可以用軟件觸發(fā)的條件是要有足夠大的存儲(chǔ)空間,顯示一屏的數(shù)據(jù)為240個(gè),但每次讀進(jìn)單片機(jī)的數(shù)據(jù)為500個(gè),多余260個(gè)數(shù)據(jù)就是作為不滿足觸發(fā)條件的舍棄余量,為了以防萬一,當(dāng)從500個(gè)數(shù)據(jù)中以經(jīng)讀出超過260個(gè)數(shù)據(jù)但還沒有符合觸發(fā)條件的數(shù)據(jù)時(shí),將跳出觸發(fā)比較循環(huán),重新從FIFO存儲(chǔ)器中讀出500個(gè)數(shù)據(jù),因?yàn)镕IFO存儲(chǔ)器為4K容量,最多可以這樣重復(fù)讀取8次數(shù)據(jù),所以軟觸發(fā)可以非常穩(wěn)定的工作。
同步觸發(fā)子程序:
read:
for(i=0;i<500;i++) // 從FIFO存儲(chǔ)器中讀500 個(gè)數(shù)據(jù)
{
FIFO_R=0;
add[ i]=FIFO_bus;
FIFO_R=1;
}
while(!(add[q]<=m&&add[q+1]>=m)) //滿足幅度為m 且為上升沿則觸發(fā)
{
q+=1;
if(q>=260) //若存儲(chǔ)數(shù)據(jù)不足則重新讀數(shù)據(jù)
goto read;
}
程序的意思是只有當(dāng)此時(shí)采樣信號的數(shù)值是m且為上升沿時(shí)才可以觸發(fā),改變觸發(fā)沿只需改變運(yùn)算符,改變觸發(fā)電壓只需改變m的值即可,m的取值范圍是0~255。
5.3.2 頻率計(jì)算原理及流程圖本設(shè)計(jì)的頻率計(jì)算采用外部中斷和兩個(gè)定時(shí)器來完成,其中一個(gè)定時(shí)器用來對脈沖個(gè)數(shù)進(jìn)行計(jì)算,另一個(gè)定時(shí)器用于定時(shí)。其原理是,當(dāng)整形后的脈沖的下降沿帶來時(shí),觸發(fā)外部中斷。在外部中斷響應(yīng)程序里,開啟TIM1并設(shè)置其時(shí)鐘來源為外部輸入;開啟TIM2,設(shè)置為定時(shí)模式。等待TIM1計(jì)數(shù)溢出中斷,然后停止計(jì)時(shí)并讀出定時(shí)器的值。假設(shè)計(jì)數(shù)的脈沖個(gè)數(shù)為N,所用的時(shí)間為T,那么頻率可有式(5.1)計(jì)算得出。
頻率計(jì)算流程圖如圖5.2所示。
本示波器就能夠測量輸入信號電壓的峰峰值,并顯示在屏幕上。這個(gè)功能由峰峰值測量子程序完成,見下面的程序段。
在程序開始時(shí)給a中賦值128,即基線電壓值。因?yàn)橐黄聊坏娘@示數(shù)據(jù)為240個(gè),所以用for循環(huán)將if…else…判斷語句執(zhí)行240次,在a中存放最大值,在b中存放最小值。對每個(gè)數(shù)據(jù)進(jìn)行比較,如果該數(shù)據(jù)比a大則將這個(gè)數(shù)據(jù)存入a;如果小于a,則將這個(gè)數(shù)據(jù)與b進(jìn)行比較,比b大則拋棄,比b小則存入b。故當(dāng)240個(gè)循環(huán)執(zhí)行完后a中存放的是這一屏幕數(shù)據(jù)中的最大值,b中存放的是這一屏幕顯示數(shù)據(jù)中的最小值。在比較完后用a減去b,得到差值存入c中,則c中保存的值就是電壓的峰峰值,調(diào)用電壓計(jì)算顯示子程序根據(jù)當(dāng)前的垂直靈敏度給c乘以不同的倍數(shù),得到實(shí)際的峰峰值。
峰峰值測量子程序:
a=128;
for(i=0;i<240;i+ +) //取數(shù)據(jù)中的最大值與最小值
{
if(add[ i]>a)
{
a=add[ i];
}
else if(add[ i]<b)[ size][="" font][="" color][="" p][p="24," null,="" left]顯示平臺(tái)6.1 Android應(yīng)用開發(fā)環(huán)境6.1.1 Android簡介
Android是Google于2007年11月5日宣布的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng)的名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件?梢园阉唵卫斫獬蒐inux上套了一個(gè)JAVA的殼。
6.1.2 開發(fā)所需的軟件包1、java JDK 6.0最好下載新版。它可從Sun公司的官網(wǎng)下載。
2、Android SDK 這是Android開發(fā)必需的。
3、Eclipse 3.5最好使用這個(gè)版。它可從Eclipse官網(wǎng)下載。
4、Eclipse所需的插件ADT-0.9.7它可從google網(wǎng)站上下載。
6.1.3 搭建Android開發(fā)環(huán)境準(zhǔn)備好開以上軟件包之后,我們便可以搭建Android的開發(fā)環(huán)境了。
第一步:安裝java JDK 6.0。
第二步:把下載好的Eclipse 3.5解壓。
第三步:Android SDK 安裝。
Android SDK可以通過SDK下載器自動(dòng)下載和配置,適合網(wǎng)絡(luò)好,下載速度快的情況下;也可以借助工具下載SDK文件,手工配置,適合網(wǎng)絡(luò)不是很好,下載速度慢的情況下。
第四步、Eclipse集成開發(fā)環(huán)境(IDE)搭建
1、打開Eclipse,選擇菜單:Help->Install New Software...
2、彈出“Available Software”對話框,點(diǎn)擊“Add...”按鈕
3、彈出“Add Repository”對話框。中Name中輸入ADT,然后點(diǎn)擊Archive把路徑設(shè)置到下載的ADT-0.9.7文件的位置,然后安裝。
4、安裝成功后,安裝提示重啟Eclipse,即完成整個(gè)安裝過程。
第五步:Android SDK 配置,即配制Android 虛擬設(shè)備,亦即嵌入式開發(fā)中常用的模擬器。
6.1.4 測試所配的開發(fā)環(huán)境在Project name中輸入工程的名字,build target中選擇所用的平臺(tái),Application name為應(yīng)用程序的名稱,create activity為活動(dòng)類的名稱。
2、配制運(yùn)行方式:點(diǎn)擊Run Configurations會(huì)出現(xiàn)配制運(yùn)行方式界面,如圖6.2所示。然后點(diǎn)擊Android application新建一個(gè)動(dòng)行方式,在右邊project中輸入要運(yùn)行的工程名稱。至此運(yùn)行方式配制完成。
3、運(yùn)擊會(huì)行,便會(huì)出下如下界面,如圖6.3:
至此,Android的開發(fā)環(huán)境已搭建成功。
6.2 Android藍(lán)牙通信設(shè)計(jì)藍(lán)牙是一種支持設(shè)備短距離通信(一般10m內(nèi))的無線電技術(shù)。能在包括移動(dòng)電話、PDA、無線耳機(jī)、筆記本電腦、相關(guān)外設(shè)等眾多設(shè)備之間進(jìn)行無線信息交換。利用“藍(lán)牙”技術(shù),能夠有效地簡化移動(dòng)通信終端設(shè)備之間的通信,從而數(shù)據(jù)傳輸變得更加迅速高效,為無線通信拓寬道路。
本設(shè)計(jì)分為信號采集模塊和Android顯示終端,兩部分采用藍(lán)牙技術(shù)進(jìn)行無線通信。Android顯示終端實(shí)現(xiàn)波形的顯示和示波器參數(shù)的設(shè)置。
6.2.1 Android設(shè)備中藍(lán)牙模塊的使用[html]view plaincopyprint
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
//直接打開系統(tǒng)的藍(lán)牙設(shè)置面板
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, 0x1);
//直接打開藍(lán)牙
adapter.enable();
//打開本機(jī)的藍(lán)牙發(fā)現(xiàn)功能(默認(rèn)打開120秒,可以將時(shí)間最多延長至300秒)
Intent discoveryIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);//設(shè)置持續(xù)時(shí)間(最多300秒)
使用BluetoothAdapter的startDiscovery()方法來搜索藍(lán)牙設(shè)備。
startDiscovery()方法是一個(gè)異步方法,調(diào)用后會(huì)立即返回。該方法會(huì)進(jìn)行對其他藍(lán)牙設(shè)備的搜索,該過程會(huì)持續(xù)12秒。該方法調(diào)用后,搜索過程實(shí)際上是在一個(gè)System Service中進(jìn)行的,所以可以調(diào)用cancelDiscovery()方法來停止搜索(該方法可以在未執(zhí)行discovery請求時(shí)調(diào)用)。請求Discovery后,系統(tǒng)開始搜索藍(lán)牙設(shè)備,在這個(gè)過程中,系統(tǒng)會(huì)發(fā)送以下三個(gè)廣播:
ACTION_DISCOVERY_START:開始搜索
ACTION_DISCOVERY_FINISHED:搜索結(jié)束
ACTION_FOUND:找到設(shè)備
這個(gè)Intent中包含兩個(gè)extra fields:EXTRA_DEVICE和EXTRA_CLASS,分別包含BluetooDevice和BluetoothClass。我們可以自己注冊相應(yīng)的BroadcastReceiver來接收響應(yīng)的廣播,以便實(shí)現(xiàn)某些功能。
功能代碼如下:
// 創(chuàng)建一個(gè)接收ACTION_FOUND廣播的BroadcastReceiver
private final BroadcastReceivermReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// 發(fā)現(xiàn)設(shè)備
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// 從Intent中獲取設(shè)備對象
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// 將設(shè)備名稱和地址放入array adapter,以便在ListView中顯示
mArrayAdapter.add(device.getName() + "" + device.getAddress());
}
}
};
// 注冊BroadcastReceiver
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter); // 不要忘了之后解除綁定
6.2.2 藍(lán)牙數(shù)據(jù)通信如果打算建議兩個(gè)藍(lán)牙設(shè)備之間的連接,則必須實(shí)現(xiàn)服務(wù)器端與客戶端的機(jī)制。當(dāng)兩個(gè)設(shè)備在同一個(gè)RFCOMM channel下分別擁有一個(gè)連接的BluetoothSocket,這兩個(gè)設(shè)備才可以說是建立了連接。服務(wù)器設(shè)備與客戶端設(shè)備獲取BluetoothSocket的途徑是不同的。服務(wù)器設(shè)備是通過accepted一個(gè)incoming connection來獲取的,而客戶端設(shè)備則是通過打開一個(gè)到服務(wù)器的RFCOMM channel來獲取的。
通過調(diào)用BluetoothAdapter的listenUsingRfcommWithServiceRecord(String, UUID)方法來獲取BluetoothServerSocket,并調(diào)用BluetoothServerSocket的accept()方法監(jiān)聽連接請求,如果收到請求,則返回一個(gè)BluetoothSocket實(shí)例(此方法為block方法,應(yīng)置于新線程中)。如果不想在accept其他的連接,則調(diào)用BluetoothServerSocket的close()方法釋放資源。
通過搜索可以得到服務(wù)器端的BluetoothService,并通過調(diào)用BluetoothService的listen
UsingRfcommWithServiceRecord(String, UUID)方法獲取BluetoothSocket(該UUID應(yīng)該同于服務(wù)器端的UUID)。調(diào)用BluetoothSocket的connect()方法,如果UUID同服務(wù)器端的UUID匹配,并且連接被服務(wù)器端accept,則connect()方法返回。
3、數(shù)據(jù)通信
可以分別通過BluetoothSocket的getInputStream()和getOutputStream()兩種方法獲取InputStream和OutputStream,并使用read(bytes[])和write(bytes[])方法分別進(jìn)行讀寫操作。其中,read(bytes[])方法會(huì)一直block,直到從數(shù)據(jù)流中讀取到信息;而write(bytes[])方法并不是經(jīng)常的block,比如在另一設(shè)備沒有及時(shí)read或者中間緩沖區(qū)已滿的情況下,write方法會(huì)block。
6.3 Android上繪制波形利用SurfaceView類來實(shí)現(xiàn)波形的繪制。SurfaceView是視圖(View)的繼承類,這個(gè)視圖里內(nèi)嵌了一個(gè)專門用于繪制的Surface控件?梢酝ㄟ^SurfaceHolder接口訪問這個(gè)surface,getHolder()方法可以得到這個(gè)接口。surfaceview的核心在于提供了兩個(gè)線程:UI線程和渲染線程。SurfaceView的性質(zhì)決定了其比較適合一些場景:需要界面迅速更新、對幀率要求較高的情況。
6.3.1 SurfaceView的使用只要繼承SurfaceView類并實(shí)現(xiàn)SurfaceHolder.Callback接口就可以實(shí)現(xiàn)一個(gè)自定義的SurfaceView。SurfaceHolder.Callback在底層的Surface狀態(tài)發(fā)生變化的時(shí)候通知View,SurfaceHolder.Callback具有如下的接口:
1、surfaceCreated(SurfaceHolder holder):當(dāng)Surface第一次創(chuàng)建后會(huì)立即調(diào)用該函數(shù)。程序可以在該函數(shù)中做些和繪制界面相關(guān)的初始化工作,一般情況下都是在另外的線程來繪制界面,所以不要在這個(gè)函數(shù)中繪制Surface。
2、surfaceChanged(SurfaceHolder holder,int format,int width,int height):當(dāng)Surface的狀態(tài)(大小和格式)發(fā)生變化的時(shí)候會(huì)調(diào)用該函數(shù),在surfaceCreated調(diào)用后該函數(shù)至少會(huì)被調(diào)用一次。
3、surfaceDestroyed(SurfaceHolder holder):當(dāng)Surface被摧毀前會(huì)調(diào)用該函數(shù),該函數(shù)被調(diào)用后不能繼續(xù)使用Surface,一般在該函數(shù)中清理使用的資源。通過SurfaceView的getHolder()函數(shù)可以獲取SurfaceHolder對象,Surface就在SurfaceHolder對象內(nèi)。雖然Surface保存了當(dāng)前窗口的像素?cái)?shù)據(jù),但是在使用過程中是不直接和Surface打交道的,由SurfaceHolder的CanvaslockCanvas( )或Canvas的lockCanvas(Rect dirty)函數(shù)來獲取Canvas對象,通過在Canvas上繪制內(nèi)容來修改Surface中的數(shù)據(jù)。當(dāng)在Canvas中繪制完成后,調(diào)用函數(shù)unlockCanvasAndPost(Canvas canvas)來通知系統(tǒng)Surface已經(jīng)繪制完成,這樣系統(tǒng)會(huì)把繪制完的內(nèi)容顯示出來。為了充分利用不同平臺(tái)的資源,發(fā)揮平臺(tái)的最優(yōu)效果,可以通過SurfaceHolder的setType函數(shù)來設(shè)置繪制的類型,可接收如下的參數(shù):
SURFACE_TYPE_NORMAL:用RAM緩存原生數(shù)據(jù)的普通Surface。
SURFACE_TYPE_HARDWARE:適用于DMA(Direct memory access )引擎和硬件加速的Surface。
SURFACE_TYPE_GPU:適用于GPU加速的Surface。
SURFACE_TYPE_PUSH_BUFFERS:表明該Surface不包含原生數(shù)據(jù),Surface用到的數(shù)據(jù)由其他對象提供,在Camera圖像預(yù)覽中就使用該類型的Surface,有Camera負(fù)責(zé)提供給預(yù)覽Surface數(shù)據(jù),這樣圖像預(yù)覽會(huì)比較流暢。如果設(shè)置這種類型則就不能調(diào)用lockCanvas來獲取Canvas對象了。
6.3.2 繪制波形子程序該子程序的功能是,先繪制8*8的顯示網(wǎng)格,然后把接收到的波形數(shù)據(jù)在SurfaceView中顯示出來。功能程序如下:
void DrawWave(int length) {
Canvas canvas = sfh.lockCanvas(new Rect(0, 0, 480,480));//獲取畫布
Canvas.drawColor(Color.BLACK); //清除畫布
Paint mPaint = new Paint(); //獲取畫筆
mPaint.setColor(Color.GRAY); //設(shè)置畫筆為黃色
mPaint.setStrokeWidth(1); //設(shè)置畫筆粗細(xì)
oldY=0;
//繪制8*8的網(wǎng)格
for (int i = 0; i <= 8; i++) {// 繪畫橫線
canvas.drawLine(0, oldY, 479, oldY, mPaint);
oldY = oldY+60;}
oldX=0;
for (int i = 0; i <= 8; i++) {// 繪畫縱線
canvas.drawLine(oldX, 0, oldX, 479, mPaint);
oldX = oldX+60;}
//繪制波形
mPaint.setColor(Color.YELLOW);// 畫筆設(shè)置為綠色
for (int x = 0; x < length; x++) {
y = data_osc[ i];//讀取y軸數(shù)值,波形數(shù)據(jù)保存在數(shù)組ata_osc[]中
canvas.drawPoint(x, y, mPaint);//描點(diǎn)
}
sfh.unlockCanvasAndPost(canvas);//解鎖畫布,提交畫好的圖像
}
經(jīng)過三個(gè)月的努力,終于完成了本畢業(yè)設(shè)計(jì)。總結(jié)這三個(gè)月來的工作,主要有以下幾個(gè)方面:
1、綜述了現(xiàn)階段數(shù)字存儲(chǔ)示波器技術(shù)及產(chǎn)品的國內(nèi)外發(fā)展?fàn)顩r,對數(shù)字存儲(chǔ)示波器的原理、工作方式、顯示方式等的基本概念及技術(shù)發(fā)展進(jìn)行了介紹。
2、針對設(shè)計(jì)的任務(wù)和要求,確定了存儲(chǔ)示波器波形采樣和數(shù)據(jù)處理及波形重組的硬件和軟件方案。
3、對整機(jī)各部分關(guān)鍵電路進(jìn)行相關(guān)理論分析、計(jì)算和設(shè)計(jì)。
4、本系統(tǒng)由單片機(jī)主控,高速A/D轉(zhuǎn)換器ADS830進(jìn)行模數(shù)轉(zhuǎn)換,用FIFO緩存芯片IDT7203來實(shí)現(xiàn)波形的存儲(chǔ)。通過軟件對轉(zhuǎn)換后的數(shù)字信號進(jìn)行處理,并通過藍(lán)牙把波形數(shù)據(jù)發(fā)送到Android設(shè)備上進(jìn)行顯示。
5、完成了作品的制作與調(diào)試;論述了儀器的測試方法,完成數(shù)據(jù)測試及測試結(jié)果分析。
采用Android設(shè)備作為顯示平臺(tái),是本設(shè)計(jì)最大的一個(gè)特點(diǎn)。本設(shè)計(jì)的基本思路是,由單片機(jī)對ADC采樣到的數(shù)據(jù)進(jìn)行處理,再通過藍(lán)牙把波形數(shù)據(jù)發(fā)送到Android設(shè)備上進(jìn)行顯示。同時(shí)由于Android設(shè)備都采用觸摸屏,因此示波器的參數(shù)可以很方便的通過觸摸屏進(jìn)行設(shè)置。本設(shè)計(jì)采用Android設(shè)備取代液晶屏,并使用藍(lán)牙進(jìn)行數(shù)據(jù)傳輸,充分利用了Android設(shè)備的硬件資源。其優(yōu)點(diǎn)是降低了系統(tǒng)開發(fā)成本,并大大減小了系統(tǒng)硬件體積,完全實(shí)現(xiàn)了本設(shè)計(jì)小巧便攜的設(shè)計(jì)宗旨。
本系統(tǒng)的數(shù)據(jù)采集系統(tǒng)、數(shù)據(jù)處理系統(tǒng)和波形顯示系統(tǒng)等模塊都經(jīng)過了軟硬件的調(diào)試。雖然整個(gè)系統(tǒng)的實(shí)現(xiàn)方案基本完成,但是還有一些不夠理想的地方,仍然有不少的工作需要繼續(xù)。比如需要進(jìn)一步改善測量精度、模擬帶寬以及系統(tǒng)噪聲等性能;添加等效采樣、波形回調(diào)以及數(shù)據(jù)導(dǎo)出等功能。
參 考 文 獻(xiàn)
[1] 張永瑞. 電子測量技術(shù)基礎(chǔ)[M] . 西安:西安電子科技大學(xué)出版社,2006:131-133.
[2] 朱明強(qiáng). 基于單片機(jī)及CPLD的數(shù)字存儲(chǔ)示波器的研究與設(shè)計(jì)[D] . 北京:北京交通大學(xué),2008.
[3] 王彥斌. 數(shù)字存儲(chǔ)示波器中模擬通道設(shè)計(jì)[D] . 成都:電子科技大學(xué),2008.
[4] 馮靜亞,于強(qiáng),呂朝暉,羅福山. 虛擬示波器的軟件設(shè)計(jì)與應(yīng)用[J] . 計(jì)算機(jī)工程與設(shè)計(jì),2007,28(1):211-273.
[5] 張虹. 泰克公司推出可分析帶寬達(dá)20GHz信號的Signal Vu軟件[J] . 中國無線電,2008,9(7):23-25.
[6] 趙茂泰. 簡易數(shù)字存儲(chǔ)示波器評述[J] . 電子世界,2002,5(11):40-42.
[7] 徐俊毅. 力科推出帶寬可達(dá)30GHz的WaveMaster8Zi系列示波器[J] . 電子與電腦,2009,5(13):53-56.
[8] 蒙玉寶. 40Gsps隨機(jī)取樣數(shù)字示波器關(guān)鍵技術(shù)預(yù)先研究[D] . 成都:電子科技大學(xué),2003.
[9] 楊豐盛. Android應(yīng)用開發(fā)揭秘[M] . 北京:機(jī)械工業(yè)出版社,2009:15-16.
[10] 陳景波,楊放,姚定江. 基于CompuScope 82G型高速數(shù)據(jù)采集卡的虛擬示波器設(shè)計(jì)[J] . 國外電子元器件,2006,11(2):60-62.
[11] H.Troy Nagle,D.Carroll,J.David Irwin . DIGITAL LOGIC CIRCUIT ANALYSIS & DESIGN[M] . 北京:清華大學(xué)出版,2009:57-71.
[12] V.V.Panasyuk. Electronic oscillograph unit for recording failure diagrams in the impact testing of metals[J] . Soviet Materials Science,2001,9(5):10-12.
[13] 劉楊斌,劉其峰,華慧. 基于AT89S52單片機(jī)的簡易數(shù)字示波器設(shè)計(jì)[J] . 現(xiàn)代電子技術(shù),2011,14(14):17-18.
[14] 賈春霞,張洪艷. 數(shù)字存儲(chǔ)示波器現(xiàn)狀初探[J] . 儀器儀表用戶,2004,8(15):25-26.
[15] 張根柱,陳勇鋼. 數(shù)字存儲(chǔ)示波器[J] . 現(xiàn)代技術(shù)開發(fā),1999,5(12):49-50.
[16] J. Molenaar,R. Voorhorst. Study on Remote Control Techniques to the Digital Storage Oscilloscope[J] . Energy Procedia,2012,16(9):34-35.
[17] 劉巖. 數(shù)字示波器的設(shè)計(jì)[J] . 電腦知識(shí)與技術(shù),2008,12(20):21-22.
[18] R. P. Patterson. Design and Implementation of Multifunctional Virtual Oscilloscope Using USB Data-Acquisition Card[J] . Procedia Engineering,2012,10(25):40-42.
[19] W. A. Grind. Patent Application Titled "Oscilloscope with Internally Generated Mixed Signal Oscilloscope Demo Mode Stimulus, and Integrated Demonstration" Under Review[J] . Journal of Engineering,2012,9(17):7-8.
在這里要衷心感謝我的指導(dǎo)老師蘇成悅教授的悉心指導(dǎo)和多方關(guān)懷。蘇老師思維敏銳,視野開闊,創(chuàng)新性強(qiáng)。他淵博的學(xué)識(shí),嚴(yán)謹(jǐn)?shù)闹螌W(xué)作風(fēng),執(zhí)著的敬業(yè)精神都深深地影響著我。我深深感受到他對研究的精益求精,對學(xué)生的鼓勵(lì)和愛護(hù)。他對工作和生活的態(tài)度將是我一生學(xué)習(xí)的榜樣。
此外,還需要感謝我身邊的同學(xué)們。在設(shè)計(jì)過程中碰到的問題,我都會(huì)找同學(xué)一起來討論解決。同學(xué)們都很熱情、很積極的參與到討論中,而且大部分問題在討論之后都得到了解決。除了學(xué)習(xí)之外,在生活上同學(xué)們對我的幫助也是非常大的。在此,我衷心感謝各位親愛的同學(xué)們。
附錄 A 實(shí)物圖
附錄 B 系統(tǒng)主程序設(shè)計(jì)源碼
#include "STM32Lib\stm32f10x.h"
#include "hal.h"
extern void SetLevel(u8 pulse);
extern void Adc1_Init(u8 ADC_CH_x,u8 ADC_CH_SMP);
extern u16 Get_Adc(u8 ADC_CH_x);
u16 data_test_16;
u8 data_test_8;
u8 Data_osc[320]; //波形數(shù)據(jù)
u8 Data_osc_full=0;
u8 Data_set[10];
//延遲函數(shù)
void Delay(u16 speed)
{
u16 i;
while(speed!=0)
{
speed--;
for(i=0;i<400;i++);
}
}
//設(shè)置水平掃描速度
void shuiping(u8 sp)
{
if(sp >= 12)
sp=12;
if(sp <= 1)
sp=1;
//設(shè)置不同采樣速率
switch(sp)
{
case 1:TIM1->PSC=0; break;
case 2:TIM1->PSC=1; break;
case 3:TIM1->PSC=3; break;
case 4:TIM1->PSC=9; break;
case 5:TIM1->PSC=19; break;
case 6:TIM1->PSC=39; break;
case 7:TIM1->PSC=99; break;
case 8:TIM1->PSC=199; break;
case 9:TIM1->PSC=399; break;
case 10:TIM1->PSC=999; break;
case 11:TIM1->PSC=1999; break;
case 12:TIM1->PSC=3999; break;
default :break;
}
}
//設(shè)置水平靈敏度
void SetAGC(u16 pulse)
{
if(pulse >= 3)
pulse=3;
if(pulse <= 1)
pulse=1;
//設(shè)置不同的增益
switch(pulse)
{
case 1: TIM4->CCR1=255;break;
case 2: TIM4->CCR1=195;break;
case 3: TIM4->CCR1=153;break;
}
}
int main(void)
{
u16 i_osc=0;
u16 i_start=0;
ChipHalInit(); //片內(nèi)硬件初始化
ChipOutHalInit(); //片外硬件初始化
SetLevel(128); //初始化垂直基線
SetAGC(2); //初始化垂直靈敏度
shuiping(6); //初始化水平靈敏度
while(1)
{
if(Data_osc_full==1)
{
Data_osc_full=0;
while(!(Data_osc[i_start]<=160&& Data_osc[i_start+1]>=160))
{
i_start++;
if(i_start>=150)
break;
}
if(i_start < 150)
{
for( i_osc=0; i_osc<160; i_osc++)
{
USART2_Putc(Data_osc[i_osc + i_start]);
}
}
Delay(500); //延時(shí),等待Android系統(tǒng)處理完畢數(shù)據(jù)
TIM1->CR1 |= 0x0001; //開啟定時(shí)器TIM1
}
}
}
附錄 C Android藍(lán)牙服務(wù)程序設(shè)計(jì)源碼
package com.test.BTClient;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
public class DeviceListActivity extends Activity {
// 調(diào)試用
private static final String TAG = "DeviceListActivity";
private static final boolean D = true;
// 返回時(shí)數(shù)據(jù)標(biāo)簽
public static String EXTRA_DEVICE_ADDRESS = "設(shè)備地址";
// 成員域
private BluetoothAdapter mBtAdapter;
private ArrayAdapter mPairedDevicesArrayAdapter;
private ArrayAdapter mNewDevicesArrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 創(chuàng)建并顯示窗口,并設(shè)置窗口顯示模式為窗口方式
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.device_list);
// 設(shè)定默認(rèn)返回值為取消
setResult(Activity.RESULT_CANCELED);
// 設(shè)定掃描按鍵響應(yīng)
Button scanButton = (Button) findViewById(R.id.button_scan);
scanButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
doDiscovery();
v.setVisibility(View.GONE);
}
});
// 初使化設(shè)備存儲(chǔ)數(shù)組
mPairedDevicesArrayAdapter = new ArrayAdapter(this,
R.layout.device_name);
mNewDevicesArrayAdapter = new ArrayAdapter(this,
R.layout.device_name);
// 設(shè)置已配隊(duì)設(shè)備列表
ListView pairedListView = (ListView) findViewById(R.id.paired_devices);
pairedListView.setAdapter(mPairedDevicesArrayAdapter);
pairedListView.setOnItemClickListener(mDeviceClickListener);
// 設(shè)置新查找設(shè)備列表
ListView newDevicesListView = (ListView) findViewById(R.id.new_devices);
newDevicesListView.setAdapter(mNewDevicesArrayAdapter);
newDevicesListView.setOnItemClickListener(mDeviceClickListener);
// 注冊接收查找到設(shè)備action接收器
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(mReceiver, filter);
// 注冊查找結(jié)束action接收器
filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.registerReceiver(mReceiver, filter);
// 得到本地藍(lán)牙句柄
mBtAdapter = BluetoothAdapter.getDefaultAdapter();
}
@Override
protected void onDestroy() {
super.onDestroy();
// 關(guān)閉服務(wù)查找
if (mBtAdapter != null) {
mBtAdapter.cancelDiscovery();
}
// 注銷action接收器
this.unregisterReceiver(mReceiver);
}
public void OnCancel(View v){
finish();
}
//開始服務(wù)和設(shè)備查找
private void doDiscovery() {
if (D) Log.d(TAG, "doDiscovery()");
// 在窗口顯示查找中信息
setProgressBarIndeterminateVisibility(true);
setTitle("查找設(shè)備中...");
// 顯示其它設(shè)備(未配對設(shè)備)列表
findViewById(R.id.title_new_devices).setVisibility(View.VISIBLE);
// 關(guān)閉再進(jìn)行的服務(wù)查找
if (mBtAdapter.isDiscovering()) {
mBtAdapter.cancelDiscovery();
}
//并重新開始
mBtAdapter.startDiscovery();
}
// 選擇設(shè)備響應(yīng)函數(shù)
private OnItemClickListener mDeviceClickListener = new OnItemClickListener() {
public void onItemClick(AdapterView av, View v, int arg2, long arg3) {
// 準(zhǔn)備連接設(shè)備,關(guān)閉服務(wù)查找
mBtAdapter.cancelDiscovery();
// 得到mac地址
String info = ((TextView) v).getText().toString();
String address = info.substring(info.length() - 17);
// 設(shè)置返回?cái)?shù)據(jù)
Intent intent = new Intent();
intent.putExtra(EXTRA_DEVICE_ADDRESS, address);
// 設(shè)置返回值并結(jié)束程序
setResult(Activity.RESULT_OK, intent);
finish();
}
};
// 查找到設(shè)備和搜索完成action監(jiān)聽器
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// 查找到設(shè)備action
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// 得到藍(lán)牙設(shè)備
BluetoothDevice device =
intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// 如果是已配對的則略過,其余的在添加到列表中進(jìn)行顯示
if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
mNewDevicesArrayAdapter.add(device.getName() + "" +
device.getAddress());
}else{ //添加到已配對設(shè)備列表
mPairedDevicesArrayAdapter.add(device.getName() + "" +
device.getAddress());
}
// 搜索完成action
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
setProgressBarIndeterminateVisibility(false);
setTitle("選擇要連接的設(shè)備");
if (mNewDevicesArrayAdapter.getCount() == 0) {
String noDevices = "沒有找到新設(shè)備";
mNewDevicesArrayAdapter.add(noDevices);
}
}
}
};
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |