11級(jí)紅磚張鴻文示波器_第1頁(yè)
11級(jí)紅磚張鴻文示波器_第2頁(yè)
11級(jí)紅磚張鴻文示波器_第3頁(yè)
11級(jí)紅磚張鴻文示波器_第4頁(yè)
11級(jí)紅磚張鴻文示波器_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余56頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、:張鴻文莊進(jìn)發(fā)鴻學(xué)院:自動(dòng)化科學(xué)與專業(yè):自動(dòng)化班級(jí):2011 二班目錄一、設(shè)計(jì)要求21.11.2基本要求2擴(kuò)展要求2二、簡(jiǎn)介+創(chuàng)新功能52.12.2簡(jiǎn)介5創(chuàng)新功能6案比較53.1硬件方案5四、設(shè)計(jì)與論證84.1電路設(shè)計(jì)8五、電路圖及有關(guān)設(shè)計(jì)文件11六、測(cè)試方法、儀器和數(shù)據(jù)14系統(tǒng)測(cè)試的目的14系統(tǒng)測(cè)試的方法14測(cè)試儀器15七、測(cè)試數(shù)據(jù)及分析16一、設(shè)計(jì)要求二、1.基本要求可以單片機(jī)顯示屏上實(shí)時(shí)地顯示當(dāng)前電壓值,并且有波形顯示以及坐標(biāo)方格顯示。示波器最高測(cè)量電壓不低于 10V,精度不低于 20mv。具有改變采樣頻率以及幅度變換功能,即改變“X 增益”和“Y 增益”,并且有圖像上下移動(dòng)的功能。4)

2、具有輸入電壓過(guò)高的功能等。功能,電壓達(dá)到設(shè)定值提醒功能,電壓提醒5)支持圖像保存功能以及圖像回調(diào)功能。2.拓展要求1)具有多通道信號(hào)輸入功能,即可以同時(shí)測(cè)量多路信號(hào)。2)利用顯示。交叉線精確標(biāo)志處出波形上點(diǎn)的橫縱坐標(biāo),實(shí)現(xiàn)橫縱坐標(biāo)的對(duì)應(yīng)3)人機(jī)交互功能,上位機(jī)通訊功能,以及其他創(chuàng)新功能。二、簡(jiǎn)介+創(chuàng)新功能2.1 簡(jiǎn)介設(shè)計(jì)的便攜式示波器,硬件電路主要是放大電路和 stm32 開(kāi)發(fā)板,信號(hào)經(jīng)過(guò)放大電路的處理之后,再經(jīng)由 stm32 的 AD 引腳,經(jīng)過(guò)數(shù)據(jù)處理后在 TFT 顯示屏上顯示。顯示屏上可以實(shí)時(shí)地顯示當(dāng)前電壓值,并且有波形顯示以及坐標(biāo)方格顯示,而且,經(jīng)過(guò)處理后可以測(cè)出輸入波形的值以及頻率。

3、具有改變采樣頻率以及幅度變換功能,即改變“X 增益”和“Y 增益”,并且有圖像上下移動(dòng)的功能。通過(guò) U 盤(pán)模塊可以保存圖像以及圖像回調(diào)。具有多通道信號(hào)輸入功能,即可以同時(shí)測(cè)量信號(hào)。利用交叉線精確標(biāo)志處出波形上點(diǎn)的橫縱坐標(biāo),實(shí)現(xiàn)橫縱坐標(biāo)的對(duì)應(yīng)顯示。具體的系統(tǒng)框圖如下:藍(lán)牙安卓顯示波形信號(hào)創(chuàng)新、ADCH376安卓顯示通過(guò)藍(lán)牙模塊將輸入波形的信號(hào)發(fā)送給安卓,通過(guò)進(jìn)行波形顯示與數(shù)據(jù)分析,實(shí)現(xiàn)真正意義上的便攜式示波器。顯示界面如下圖:U 盤(pán)通信Stm32單片機(jī)放 大電路2.2.2、CH376U 盤(pán)模塊此模塊通過(guò) SPI 通信與單片機(jī)進(jìn)行連接,實(shí)現(xiàn) U 盤(pán)與單片機(jī)的通信,可以在U 盤(pán)上創(chuàng)建文件,將數(shù)據(jù)保存

4、在 U 盤(pán)上。2.2.3、觸摸屏模塊制作的便攜式示波器可以通過(guò)觸摸屏直接對(duì)示波器進(jìn)行功能選擇,可以通過(guò)觸摸直接將光標(biāo)移到制定位置,讀出特定位置的橫縱坐標(biāo)。2.2.4、實(shí)時(shí)上傳波形到服務(wù)器的示波器通過(guò)藍(lán)牙與進(jìn)行通信,處理數(shù)據(jù)后再上面實(shí)現(xiàn),不僅僅可以保存,還可以利用 GPRS 網(wǎng)路功能,利用 HTTP 通信協(xié)議,將保存上傳到服務(wù)器上面,服務(wù)器是利用 Tomcat 在本機(jī)上面搭建的一個(gè)平的臺(tái),其他人可以的服務(wù)器,查看波形。圖 22.2.4、自動(dòng)打印波形功能波形服務(wù)器頁(yè)面的上位機(jī),通過(guò)與服務(wù)器 Tomcat 通信,當(dāng)服務(wù)器接受到打印令,就會(huì)自動(dòng)調(diào)用進(jìn)行打印波形。圖 3 Tomcat2.2.5、帶有 A

5、utoSet 功能按下該鍵后,可以自動(dòng)調(diào)節(jié)量程。案比較3.1 硬件結(jié)構(gòu)設(shè)計(jì)3.1.1CH375 與 CH376 的選擇由于 CH375 模塊沒(méi)有特定的 SPI 接口,選用并口模式占用的 IO 口過(guò)多,導(dǎo)致單片機(jī) IO 口不夠用。而 CH376 有專門(mén)的 SPI 接口,占用的 IO 口只有 5 個(gè),所以選用 CH376。3.1.2 總體實(shí)現(xiàn)方案與主控制器的選擇主控制器的選擇上:方案 1:51 單片機(jī),這個(gè)控制器雖然相對(duì)容易控制,比較簡(jiǎn)單。不過(guò)存在資源相對(duì)較少的缺點(diǎn)。方案 2:stm32 單片機(jī),這個(gè)主控制器雖然在控制上相對(duì) 51 更有難度,不過(guò)資源上遠(yuǎn)比 51 多很多。不僅 IO 口多,而且有內(nèi)

6、置的 AD快。功能,處理速度又經(jīng)過(guò)之前多次使用這兩種單片機(jī)的經(jīng)驗(yàn),毫不猶豫地選擇了 stm32 作為主控制器。3.1.3 運(yùn)放器型號(hào)的選擇方案一:TL082 與 TL084 通同型、JEFT 輸入,電源電壓15,增益帶寬 3MHz,轉(zhuǎn)換速率 15V/US,消耗電流 1.4mA ,滿足作品要求,而且價(jià)錢(qián)合適,新賽格又有得賣(mài),所以毫不猶豫的買(mǎi)了。方案二:LM6172 雙運(yùn)放帶寬為 100MHz,轉(zhuǎn)換速率 3000v/s,每通道消耗電流 2.3mA,輸出電流可達(dá) 50mA,完全滿足本電路的要求,不選擇該的一個(gè)原因是價(jià)格,郵購(gòu)價(jià)格為 8 元一片。3.1.4 電子模擬開(kāi)關(guān)的選擇方案一:用繼電器搭,通過(guò)

7、ULN2003 控制雖說(shuō)輸入電壓可以提高,但是由于繼電器反應(yīng)速度慢,聲音不好聽(tīng),價(jià)錢(qián)又貴,2 元一個(gè),買(mǎi)十多個(gè)不劃算,所以不選。方案二:CD4051 電子模擬開(kāi)關(guān)具有低導(dǎo)通阻抗和很低的截止漏電流。幅值為 4.520V 的數(shù)字信號(hào)可控制值至20V 的模擬信號(hào),價(jià)錢(qián)又便宜,所以選擇此類型號(hào)。3.1.5 顯示方案1TFT 觸摸屏顯示優(yōu)點(diǎn) : 不用借用第的傳輸,直接單片機(jī)操作 IO 口,實(shí)時(shí)性比較好,能滿足高頻的顯示,利用觸摸功能也能實(shí)現(xiàn)對(duì)用戶指令的響應(yīng)。缺點(diǎn) : 編程較復(fù)雜,刷屏效果很一般。2顯示優(yōu)點(diǎn):實(shí)用性好,方便攜帶,只需要在 android上安裝的 APP,就可以實(shí)現(xiàn)波形的顯示,并根據(jù)用戶的按

8、鍵選擇對(duì)用的采樣頻率,真正實(shí)現(xiàn)了示波器的簡(jiǎn)易性,具有很強(qiáng)的創(chuàng)新性。缺點(diǎn):難度較大,處理速度受的處理器的速度影響。3.1.6 數(shù)據(jù)傳輸方案1 網(wǎng)絡(luò)傳輸優(yōu)點(diǎn) : 傳輸數(shù)據(jù)比較容易實(shí)現(xiàn),使用 android的 sokect 編程和單片機(jī)上的 DM9000 網(wǎng)卡通信,就能簡(jiǎn)單實(shí)現(xiàn)采樣數(shù)據(jù)的傳輸。缺點(diǎn) : 傳輸速度受網(wǎng)絡(luò)信號(hào)影響,而且需要網(wǎng)線,使用比較麻煩2 藍(lán)牙傳輸優(yōu)點(diǎn) : 單片機(jī)上使用藍(lán)牙串口模塊能輕易地和的藍(lán)牙 API 實(shí)現(xiàn)數(shù)據(jù)傳輸,穩(wěn)定性較好,編程較容易,成本低廉。缺點(diǎn) : 傳輸速度中等,傳輸距離有限。3 WIFI 傳輸優(yōu)點(diǎn) : 傳輸速度最快,可以實(shí)現(xiàn)一對(duì)多的傳輸。缺點(diǎn) : 協(xié)議復(fù)雜,成本高。經(jīng)

9、考慮,采用藍(lán)牙傳輸,在實(shí)現(xiàn)低頻率的基礎(chǔ)上,第二代擬用 wifi 傳輸,進(jìn)一步完善。四、設(shè)計(jì)與論證1、電路設(shè)計(jì)1.1、保護(hù)電路考慮到 CD4051 的輸入電壓不能大于 5V,輸出電壓即電壓不能大于3.3V,所以,在輸入輸出端必須加上保護(hù)電路。本電路中采用二極管鉗位的方法,:二極管鉗位保護(hù)電路是指由兩個(gè)二極管反向并聯(lián)組成的,一次只能有一個(gè)二極管導(dǎo)通,而另一個(gè)處于截止?fàn)顟B(tài),那么它的正反向壓降就會(huì)被鉗制在二極管正向?qū)▔航?0.5-0.7 以下,從而起到保護(hù)電路的目的。在調(diào)試過(guò)程中,如果輸入電壓過(guò)大,輸入電壓基本穩(wěn)定在 5.08V 作用,輸出電壓也穩(wěn)定在 3.28V 作用,對(duì)電路起到很好的保護(hù)作用,既

10、簡(jiǎn)單又實(shí)用。1.2、旁路電容電路旁邊的兩個(gè)電容主要是起高頻補(bǔ)償?shù)淖饔?,因?yàn)楸臼静ㄆ髦粚?duì)低頻有檢測(cè)效果,所以在實(shí)物中去掉。而且,由于容值取值不當(dāng),對(duì)電阻的分壓有一定的干擾作用。1.3 直流偏置電壓TL084 產(chǎn)生的電壓主要是將 1.5V 的正電壓經(jīng)過(guò)反向轉(zhuǎn)換為負(fù)電壓,將輸入電壓了 1.5V,所以對(duì)負(fù)電壓也能。1.4 量程放大編程()Android 是谷歌()公司推出機(jī)開(kāi)發(fā),AndroidSDK 指的是 Android 專屬的開(kāi)發(fā)工具包。 AndroidSDK(Software Development Kit)提供了在 Windows/Linux/Mac上開(kāi)發(fā) Android 應(yīng)用的開(kāi)發(fā)組件,An

11、droid 支持所有的,其包含了在 Android上開(kāi)發(fā)移動(dòng)應(yīng)用的各種工具集。工具集不僅包括了 Android 模擬器和用于 Eclipse 的 Android 開(kāi)發(fā)工具插件(ADT),而且包括了各種用來(lái)調(diào)試、打包和在模擬器上安裝應(yīng)用的工具。Android SDK 主要是以 Java 語(yǔ)言為基礎(chǔ),用戶可以使用 JavaCD4051是電子模擬開(kāi)關(guān),與 TL082配合起到電壓放大縮小與放大的作用,由三個(gè)控制端 C、B、A 控制,分別有放大50倍,20倍,10倍,5倍,2倍,縮小10倍,縮小5倍。經(jīng)過(guò)函數(shù)信號(hào)發(fā)生器與示波器的測(cè)量,此電路在低頻下可以實(shí)現(xiàn)電壓的放大與縮小功能,且誤差很小,在20mv 之

12、內(nèi)。語(yǔ)言來(lái)開(kāi)發(fā) Android上的應(yīng)用。通過(guò) SDK 提供的一些工其打包成 Android使用的 apk 文件,然后用 SDK 中的模擬器(Emulator)來(lái)模擬和測(cè)試在 Android上運(yùn)行情況和效果。Tomcat 服務(wù)器是一個(gè)免費(fèi)的開(kāi)放源代碼的 Web 應(yīng)用服務(wù)器。Tomcat 是 Apache(Apache Software Foundation)的 Jakarta 項(xiàng)目中的一個(gè)項(xiàng)目,由 Apache、Sun 和其他一些公司及個(gè)人共同開(kāi)發(fā)而成。由于有了 Sun 的參與和支持,最新的 Servlet 和 JSP 規(guī)范總是能在 Tomcat 中得到體現(xiàn)。因?yàn)門(mén)omcat 技術(shù)先進(jìn)、性能穩(wěn)定

13、,而且免費(fèi),因而深受 Java者的喜愛(ài)并得到了部分開(kāi)發(fā)商的認(rèn)可,成為目前比較流行的Web 應(yīng)用服務(wù)器。Servlet 是 java 編程語(yǔ)言中的一個(gè)類,servlet 用于在 Web應(yīng)用中進(jìn)行請(qǐng)求和響應(yīng)服務(wù)。當(dāng)客戶端發(fā)送請(qǐng)求智服務(wù)器時(shí),服務(wù)器可以將請(qǐng)求信息轉(zhuǎn)發(fā)給 Servlet,并在處理響應(yīng)的業(yè)務(wù)處理之后返回給客戶端相應(yīng)的結(jié)果。當(dāng)啟動(dòng) Web 服務(wù)器或者客戶端第一次向服務(wù)區(qū)發(fā)送請(qǐng)求時(shí),可以自動(dòng)裝入 Servlet。 然后,Servlet 繼續(xù)運(yùn)行知道其他客戶機(jī)發(fā)送請(qǐng)求。Servlet 可以對(duì)任何類型的請(qǐng)求產(chǎn)生響應(yīng),但通常被用來(lái)擴(kuò)展 Web 服務(wù)器的應(yīng)用程序。1.由于受傳輸速度的限制,單片機(jī)和上

14、面的波形顯示不能同步,擬采用分時(shí)段采樣的方式來(lái)實(shí)現(xiàn)波形,而上的波形的測(cè)量范圍是 0Hz500Hz,超過(guò)了 500Hz 的信號(hào)波型就會(huì)變形。2 根據(jù)實(shí)際示波器的原理,對(duì)采樣到的電壓的數(shù)值,采用了循環(huán)隊(duì)列的數(shù)據(jù)結(jié)構(gòu)來(lái)裝,每當(dāng)進(jìn)來(lái)一個(gè)數(shù)據(jù),當(dāng)隊(duì)列滿了,就從隊(duì)頭刪除一個(gè)數(shù)據(jù),這樣就能實(shí)現(xiàn)波形的變換了。3 由于缺乏硬件測(cè)量頻率,采用了一個(gè)卡爾曼濾波和中值定理和梯度擬合原理結(jié)合的算法,對(duì)電壓的最大值和頻率進(jìn)量。五、電路圖及有關(guān)設(shè)計(jì)文件5.1、STM32 最小系統(tǒng)模塊功能:作為系統(tǒng)的主控模塊和上位機(jī)的接收模塊,處理信號(hào)并發(fā)出指令指導(dǎo)各模塊的協(xié)調(diào)運(yùn)行。板子總體設(shè)計(jì)圖(原理圖&PCB)5.2、放大電路5.3、C

15、H376六、測(cè)試方法、儀器和數(shù)據(jù)6.1 系統(tǒng)測(cè)試的目的:1、 測(cè)試模塊功能的準(zhǔn)確性和穩(wěn)定性。2、 整體系統(tǒng)整體的性能是否達(dá)到設(shè)計(jì)要求,發(fā)現(xiàn)問(wèn)題并找到可行的解決方法。3、 進(jìn)行電路的改進(jìn)。6.2 系統(tǒng)測(cè)試的方法:1、系統(tǒng)各模塊測(cè)試階段:此階段主要著眼于局部,驗(yàn)證各模塊功能是否符合設(shè)計(jì)要求,檢查各電路是否正確連接,是否正常工作。通過(guò)觀察現(xiàn)象,找出問(wèn)題,進(jìn)行模塊就糾錯(cuò)或優(yōu)化。2、系統(tǒng)整體性能測(cè)試階段。此階段主要系統(tǒng)總體是否符合設(shè)計(jì)要求,每個(gè)功能是否能完整實(shí)現(xiàn),檢查系統(tǒng)之間的協(xié)調(diào)性和可靠性。通過(guò)觀察小車運(yùn)行狀況,找出或錯(cuò)誤的地方,進(jìn)行修改和優(yōu)化。3、在方面的調(diào)試方法主要是使用 J-link 進(jìn)行調(diào)試,

16、設(shè)置斷點(diǎn)或者在中甚至一些代碼實(shí)現(xiàn)小車系統(tǒng)的停轉(zhuǎn)來(lái)一步步分析小車正在運(yùn)行的程序從而一步步分析是程序的哪里出現(xiàn)了問(wèn)題。4、硬件上主要是使用數(shù)字萬(wàn)用表和示波器來(lái)測(cè)量各參數(shù)的正確性,減少斷線、虛焊和短路的各種問(wèn)題。使用示波器來(lái)測(cè)量接收信號(hào)的強(qiáng)弱,通過(guò)這些調(diào)試來(lái)使得整個(gè)硬件能夠正確運(yùn)行。測(cè)試儀器、數(shù)字萬(wàn)用表:主要作用:A、用來(lái)判斷電壓的大小,從而判斷該電路所連元件的工作電壓是否正常;B、用來(lái)判斷偏置電壓的大小C、用來(lái)判斷所焊電路是否已經(jīng)出現(xiàn)虛焊,并且檢查是短路還是斷路,防止因?yàn)殡娐穯?wèn)題等硬件問(wèn)題導(dǎo)致放大電路的,引起胡亂修改程序的無(wú)用功;6.3.2、數(shù)字示波器主要作用:A、在制作焊,短路,斷路放大電路的過(guò)

17、程中,由于整個(gè)電路在一塊板子上,虛都有,這個(gè)時(shí)候數(shù)字示波器就起了很大作用,通過(guò)對(duì)電路一步一步地追蹤,逐步發(fā)現(xiàn)問(wèn)題所在。6.3.3、函數(shù)信號(hào)發(fā)生器主要作用:對(duì)放大電路的調(diào)試與驗(yàn)證。不過(guò)由于的發(fā)生器接觸不良,實(shí)在是太難為人了。6.3.4、J-link 調(diào)試器;主要作用:A、程序,減少因?yàn)榇诓翆?xiě)導(dǎo)致的錯(cuò)誤;B、調(diào)試程序,通過(guò)分析各變量發(fā)現(xiàn)是程序問(wèn)題還是硬件問(wèn)題。6.3.5、Keil主要作用:調(diào)試;A、編譯程序B、觀察寄存器、變量、函數(shù)的數(shù)據(jù)是否正常,防止傳參錯(cuò)誤等低級(jí)錯(cuò)誤的出現(xiàn)。七、測(cè)試數(shù)據(jù)及分析7.1 硬件電路測(cè)試數(shù)據(jù)X1X2X5輸入最大值輸入最小值輸出最大值輸出最小值理論最大值理論最小值280

18、mv-260mv300mv-280mv280mv-260mv540mv-520mv560mv-540mv540mv-520mv輸入最大值輸入最小值輸出最大值輸出最小值理論最大值理論最小值280mv-260mv140mv-120mv112mv-104mv540mv-520mv240mv-220mv216mv-208mv780mv-760mv340mv-320mv312mv-304mv1040mv-1020mv440mv-420mv416mv-408mv輸入最大值輸入最小值輸出最大值輸出最小值理論最大值理論最小值360mv-360mv100mv-80mv72mv-72mv500mv-500mv12

19、0mv-100mv120mv-100mv760mv-760mv180mv-160mv152mv-152mv1.04V-1.02V200mv-220mv208mv-204mvX1/5從以上結(jié)果可以看出,硬件電路的理論值與實(shí)際輸出值誤差在 0 到 40mv 內(nèi),但也不能排除函數(shù)信號(hào)發(fā)生器的干擾,本電路在轉(zhuǎn)換速率上滿足要求,頻率在低于 3Mhz 都可以用數(shù)字示波器測(cè)出數(shù)據(jù)。輸入最大值輸入最小值輸出最大值輸出最小值理論最大值理論最小值254mv-254mv12mv-10mv10.16mv-10.16mv980mv-960mv40mv-40mv39.2mv-38.4mv780mv-760mv820mv-

20、800mv780mv-760mv1040mv-1020mv1080mv-1060mv1040mv-1020mv附錄程序Main 函數(shù)/*uCOSII + STM32V3.4工程模板MAIN 文件2013-05-01*/#include includes.h #include stm32f10 x.h #include bsp.h #include app_cfg.h#include ili93xx_drive.h #include adc.h#include usart.h #include sys.h #include usart.h#include ili93xx_drive.h #inc

21、lude mmc_sd.h #include ff.h#include stdio.h #include string.h #include picdecoder.h #include touch.h #include adc.h #include timer.h#includefile_sys.h#define QueueSize 200enum HZHz200 = 1,Hz100 = 2,Hz50 = 3,Hz20 = 4,Hz10 = 5,Hz1 = 6 ;u16 tableQueueSize; u16 table1QueueSize; u8 front=0;u8 front1=0;u8

22、 rear=QueueSize-1; u8 rear1=QueueSize-1; u8 touch_key = 0;u8 Cursor_X=24; u8 Cursor_Y=60;cycle=1;u8 ADC_sFunctionalS FunctionalSling=QueueSize;e AutoSet=ENABLE;e ADC_Stop=DISABLE;u8 ADC_Ch=0;u8 VoivFlag=0; u8 SecdivFlag=0; u8 VoltOffset=134; u8 LCD_start=0; u8 Table_high0=0; u8 Table_high1=0; u8 V_m

23、ax0=0;u8 V_min0=0; u8 V_max1=0; u8 V_min1=0; u8 Vpp0=0;u8 Vpp1=0;FlagS FlagSFlagSus Table_se=SET; us LCD_se=SET;us Allow_LCD_se=SET;u8 Flag_Delay=0;u16 Frequent1 = 50 ,Frequent2=50; table_all50;table_all150;u8 Flag_OK=0,Flag_OK1=0; u8 Cycly_Count=10;Vpp_H=0,Vpp_L=0,Vpp_H1=0;u8 HzLevel=0;u8 Flag_stea

24、dy=1; /穩(wěn)定顯示波形標(biāo)志位sicOS_STK App_TaskStartStkAPP_TASK_START_STK_SIZE; / TaskStart 任務(wù)堆棧sicvoidApp_TaskStart(void* p_arg);/TaskStart 函數(shù)/sicOS_STK App_TaskLEDStkAPP_TASK_LED_STK_SIZE; / TaskLED 任務(wù)堆棧sicOS_STK App_LCDStkAPP_TASK_LCD_STK_SIZE; / TaskLED 任務(wù)堆棧sicOS_STK App_AtkAPP_TASK_ADC_STK_SIZE; / TaskLED 任

25、務(wù)堆棧/sicOS_STK App_ADC_PROTaskLED 任務(wù)堆棧S_StkAPP_TASK_ADC_PROS_STK_SIZE; /s ssic icicvoid App_TaskLED(void* p_arg); void App_LCD(void* p_arg);void App_ADC(void* p_arg);/sicvoid App_ADC_PROS(void* p_arg);u8 Get_AD0(u16 Hz);u8 Get_AD1(u16 Hz);/sicOS_STK TASK_FLOOR_CHECKStkTASK_FLOOR_CHECK_STK_SIZE; / 目標(biāo)樓

26、層檢測(cè) 任務(wù)堆棧/sicOS_STK TASK_MOTO_CTRLStkTASK_MOTO_CTRL_STK_SIZE;控制 任務(wù)堆棧/ 電機(jī)/sicOS_STK TASK_DISPLAYStkTASK_DISPLAY_STK_SIZE;務(wù)堆棧/ 廂外顯示 任/sicOS_STKStk_STK_SIZE;/ 通信 任務(wù)堆棧/*main()*/main(void)OSInit();SysClock_Init();/* 初始化系統(tǒng)外設(shè)、 CPU 時(shí)鐘,僅此而已 */* 建立系統(tǒng)的第一個(gè)任務(wù) */ OSTaskCreateExt(App_TaskStart, (void *) 0, (OS_STK

27、*)&App_TaskStartStkAPP_TASK_START_STK_SIZE - 1, APP_TASK_START_PRIO, APP_TASK_START_PRIO, (OS_STK *) &App_TaskStartStk0,APP_TASK_START_STK_SIZE , (void *) 0, OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);OSStart(); /* 開(kāi)始任務(wù)調(diào)度 */ return (0);/*系統(tǒng)的第一個(gè)任務(wù),負(fù)責(zé)開(kāi) OS 時(shí)鐘,建立其他任務(wù)*/sicvoid App_TaskStart(void* p_arg)u

28、8 temp,err;p_arg = p_arg;/* 初始化 OS 時(shí)鐘 */ OS_CPU_SysTickInit();/* 統(tǒng)計(jì)任務(wù) */#if (OS_TASK_S_EN 0) OSSInit();#endif/SysDataInit();BSP_Init();/* 初始化外設(shè)*/建立 LED 任務(wù)OSTaskCreateExt(App_TaskLED, (void *) 0, (OS_STK *)/&App_TaskLEDStkAPP_TASK_LED_STK_SIZE - 1, APP_TASK_LED_PRIO,/APP_TASK_LED_PRIO, (OS_STK *) &Ap

29、p_TaskLEDStk0,APP_TASK_LED_STK_SIZE , (void *) 0, OS_TASK_OPT_STK_CHK |OS_TASK_OPT_STK_CLR/);/SysDeviceInit();OSTaskCreateExt(App_LCD, (void *) 0, (OS_STK *) &App_LCDStkAPP_TASK_LCD_STK_SIZE - 1, APP_TASK_LCD_PRIO,APP_TASK_LCD_PRIO, (OS_STK *) &App_LCDStk0, APP_TASK_LCD_STK_SIZE , (void *) 0, OS_TAS

30、K_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);OSTaskCreateExt(App_ADC, (void *) 0, (OS_STK *)&App_AtkAPP_TASK_ADC_STK_SIZE - 1, APP_TASK_ADC_PRIO,APP_TASK_ADC_PRIO, (OS_STK *) &App_Atk0,APP_TASK_ADC_STK_SIZE , (void *) 0, OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/OSTaskCreateExt(App_ADC_PROS, (void *) 0, (

31、OS_STK *)&App_ADC_PROS_StkAPP_TASK_ADC_PROS_STK_SIZE - 1,APP_TASK_ADC_PROS_PRIO,/&App_ADC_PROAPP_TASK_ADC_PROS_PRIO, (OS_STK *)S_Stk0, APP_TASK_ADC_PROS_STK_SIZE , (void *) 0,OS_TASK_OPT_STK_CHK |OS_TASK_OPT_STK_CLR/);while (1)OSTimeDly(50);/*LED 線程,LED 閃爍*/sicvoid App_TaskLED(void* p_arg)p_arg = p_

32、arg;while (1)OSTimeDlyHMSM(0,0,2,0);GPIO_SetBits(GPIOD, GPIO_Pin_2); OSTimeDlyHMSM(0,0,2,0);GPIO_ResetBits(GPIOD, GPIO_Pin_2);sicvoid App_LCD(void* p_arg)/u8 x=0;UU8s;8TarName64;u8 i=0,j=0;u8 SecdivDis=0 xff; u8 VoivDis=0 xff; u8 LCD_multi=2; u8 LCD_cycle=120; u8 LCD_Volt=1;u8 LCD_DispFlag=0; u8 Ch1

33、_disFlag=1; u8 Ch2_disFlag=1; u8LCD_flag=0;u8 Cursor_Xtemp=Cursor_X; u8 Cursor_Ytemp=Cursor_Y; u16 table_temp120;u16 table_temp1120; FATFS fs;p_arg = p_arg; delay_ms(1500); f_mount(0, &fs); while(font_init()while(update_font()/從 SD 卡更新LCD_ShowString(60,90,FAT SYS ERROR.delay_ms(200);/);Adc_Init();Ti

34、merx_Init(4999,(36-1) ; /5000us=5ms由(10-1)到 ()TIM_Cmd(TIM3, DISABLE);初始中斷頻率為 200Hzarr 值LCD_Clear(GRAY);PO_COLOR=WHITE;LCD_DrawRectangle(4,34,245,235); LCD_Fill(5,35,244,234,BLACK);LCD_grid();PO_COLOR=RED;LCD_ShowString(0,0,H&Z Oscilloscope, 1);PO_COLOR=WHITE;for(i=0;i6;i+)LCD_DrawRectangle(250,3+40*

35、i,315,38+40*i); LCD_Fill(251,4+40*i,314,37+40*i,CYAN);PO_COLOR=BLACK;LCD_ShowString(253,13,A U T O, 1); LCD_ShowString(253,53,CH1, 1);LCD_ShowString(253,93, V/DIV, 1);LCD_ShowString(253,133, s/DIV, 1);LCD_ShowString(253,173,STOP, 1);LCD_ShowString(253,213, PrtSc, 1); for(i=0;iQueueSize;i+)table_temp

36、i=VoltOffset; table_temp1i=VoltOffset;while (1)/*while (1)if(Flag_OK=0)*/*以下為顯示部分*/while(Allow_LCD_se!=SET)OSTimeDlyHMSM(0,0,0,5);LCD_se=SET;if(Ch1_disFlag)PO_COLOR=BLACK;for(j=0;j0)LCD_DrawLine(5+LCD_multi*(j-1),table_tempj-1,5+LCD_multi*j,table_tempj);Ch1_disFlag=0;if(Ch2_disFlag)PO_COLOR=BLACK;fo

37、r(j=0;j0)LCD_DrawLine(5+LCD_multi*(j-1),table_temp1j-1,5+LCD_multi*j,table_temp1j);Ch2_disFlag=0;if(AutoSet=ENABLE)if(LCD_DispFlag)PO_COLOR=CYAN;LCD_ShowString(253,93,50mV/DIV, 1);LCD_ShowString(253,93, 3V/DIV, 1);LCD_ShowString(253,93, 1V/DIV, 1);LCD_ShowString(253,93,0.5V/DIV, 1);LCD_ShowString(25

38、3,93,0.1V/DIV, 1);LCD_ShowString(253,133,5ms/DIV, 1);LCD_ShowString(253,133,10ms/DIV, 1);LCD_ShowString(253,133,20ms/DIV, 1);PO_COLOR=BLACK;LCD_ShowString(253,93, V/DIV, 1);LCD_ShowString(253,133, s/DIV, 1); LCD_cycle=120;LCD_multi=2; LCD_DispFlag=0;elseif(!LCD_DispFlag)PO_COLOR=CYAN;LCD_ShowString(

39、253,93, V/DIV, 1);LCD_ShowString(253,133, s/DIV, 1);if(VoivFlag!=VoivDis|LCD_DispFlag=0)switch(VoivFlag)case 0:LCD_Volt=1;PO_COLOR=CYAN;LCD_ShowString(253,93,50mV/DIV, 1);PO_COLOR=BLACK;LCD_ShowString(253,93, 3V/DIV, 1);break; case 1:LCD_Volt=3;PO_COLOR=CYAN;LCD_ShowString(253,93, 3V/DIV, 1);PO_COLO

40、R=BLACK;LCD_ShowString(253,93, 1V/DIV, 1);break; case 2:LCD_Volt=6;PO_COLOR=CYAN;LCD_ShowString(253,93, 1V/DIV, 1);PO_COLOR=BLACK;LCD_ShowString(253,93,0.5V/DIV, 1);break;case 3:LCD_Volt=30;PO_COLOR=CYAN;LCD_ShowString(253,93,0.5V/DIV, 1);PO_COLOR=BLACK;LCD_ShowString(253,93,0.1V/DIV, 1);break;case

41、4:LCD_Volt=60;PO_COLOR=CYAN;LCD_ShowString(253,93,0.1V/DIV, 1);PO_COLOR=BLACK;LCD_ShowString(253,93,50mV/DIV, 1); break;default : break;VoivDis=VoivFlag;if(SecdivFlag!=SecdivDis|LCD_DispFlag=0)switch(SecdivFlag)case 0:LCD_cycle=120;LCD_multi=2;PO_COLOR=CYAN;LCD_ShowString(253,133,5ms/DIV, 1);PO_COLO

42、R=BLACK;LCD_ShowString(253,133,20ms/DIV, 1); break;case 1:LCD_cycle=60;LCD_multi=4;PO_COLOR=CYAN;LCD_ShowString(253,133,20ms/DIV, 1);PO_COLOR=BLACK;LCD_ShowString(253,133,10ms/DIV, 1); break;case 2:LCD_cycle=30;LCD_multi=8;PO_COLOR=CYAN;LCD_ShowString(253,133,10ms/DIV, 1);PO_COLOR=BLACK;LCD_ShowStri

43、ng(253,133,5ms/DIV, 1); break;default :break;SecdivDis=SecdivFlag;LCD_DispFlag =1;PO_COLOR=BLACK;LCD_Show2Num(0,16,LCD_cycle, 2, 16,0);LCD_Show2Num(32, 16, HzLevel, 2, 16,0);LCD_Show2Num(64, 16, Frequent1/10000, 2, 16,0);LCD_Show2Num(80, 16, Frequent1/100, 2, 16,0);LCD_Show2Num(96, 16, Frequent1%100

44、, 2, 16,0);LCD_ShowString(112,16,Hz, 0);LCD_Show2Num(128, 0, V_max0/100, 2, 16,0);LCD_Show2Num(144, 0, V_max0%100, 2, 16,0);LCD_Show2Num(165, 0, V_min0/100, 2, 16,0);LCD_Show2Num(181, 0, V_min0%100, 2, 16,0);LCD_Show2Num(130, 16, Vpp0/100, 2, 16,0);LCD_Show2Num(146, 16, Vpp0%100, 2, 16,0);PO_COLOR=B

45、LACK;for(i=0;i40;i+)LCD_DrawPo LCD_DrawPo LCD_DrawPofor(i=0;i33;i+)LCD_DrawPo LCD_DrawPo LCD_DrawPoLCD_grid();(5+6*i,Cursor_Ytemp);(6+6*i,Cursor_Ytemp); (7+6*i,Cursor_Ytemp);(Cursor_Xtemp,35+6*i); (Cursor_Xtemp,36+6*i);(Cursor_Xtemp,37+6*i);PO_COLOR=MAGENTA;Cursor_Xtemp=Cursor_X; Cursor_Ytemp=Cursor

46、_Y; for(i=0;i40;i+)LCD_DrawPoLCD_DrawPo LCD_DrawPo(5+6*i,Cursor_Y);(6+6*i,Cursor_Y); (7+6*i,Cursor_Y);for(i=0;i33;i+)LCD_DrawPo LCD_DrawPo LCD_DrawPo(Cursor_X,35+6*i); (Cursor_X,36+6*i);(Cursor_X,37+6*i);/*OSTimeDlyHMSM(0,0,0,20);switch (ADC_Ch)case 0:if(Table_se=SET)LCD_start=Table_high0; for(i=LCD

47、_start,j=0;j=ADC_sling)table_tempj=LCD_Volt*tablei+j-ADC_s if(table_tempj(VoltOffset-35)table_tempj=35;elseling/120;table_tempj=VoltOffset-LCD_Volt*tablei+j-ADC_sling/120;elsetable_tempj=LCD_Volt*tablei+j/120; if(table_tempj(VoltOffset-35)table_tempj=35;elsetable_tempj=VoltOffset-LCD_Volt*tablei+j/1

48、20;PO_COLOR=YELLOW;for(j=0;j0)LCD_DrawLine(5+LCD_multi*(j-1),table_tempj-1,5+LCD_multi*j,table_tempj);Ch1_disFlag=1; LCD_se=RESET;OSTimeDlyHMSM(0,0,0,50);break;case 1:for(i=LCD_start,j=0;j=ADC_sling)table_temp1j=LCD_Volt*table1i+j-ADC_s if(table_temp1j(VoltOffset-35)table_temp1j=35;elseling/120;tabl

49、e_temp1j=VoltOffset-LCD_Volt*table1i+j-ADC_sling/120;elsetable_temp1j=LCD_Volt*table1i+j/120; if(table_temp1j(VoltOffset-35)table_temp1j=35;elsetable_temp1j=VoltOffset-LCD_Volt*table1i+j/120;PO_COLREEN;for(j=0;j0)LCD_DrawLine(5+LCD_multi*(j-1),table_temp1j-1,5+LCD_multi*j,table_temp1j);Ch2_disFlag=1

50、; LCD_se=RESET;OSTimeDlyHMSM(0,0,0,50);break; case 2:break; default :break;LCD_se=SET;/*以下截屏*/if(touch_key=6)while (Allow_LCD_se!=SET) OSTimeDlyHMSM(0,0,0,5);LCD_ShowString(0,16,Capturing., 0);CH376_RST = 1;delay_ms( 20 );CH376_RST = 0;delay_ms( 100 );/*復(fù)位 */*復(fù)位 */* 延時(shí) 100 毫秒 */s = mInitCH376Host( )

51、;/* 初始化 CH376 */while ( CH376DiskConnect( ) != USB_SUCS )/* 檢查 U 盤(pán)是否連接,等待 U 盤(pán),對(duì)于 SD 卡,可以由單片機(jī)直接查詢 SDdelay_ms( 100 );的插拔狀態(tài)引腳 */delay_ms( 200 );/ 對(duì)于檢測(cè)到 USB 設(shè)備的,最多等待 100*50mS,主要針對(duì)有些 MP3 太慢,對(duì)于檢測(cè)到 USB 設(shè)備for ( i = 0; i = DEF_DISK_MOUNTED & i = 5 ) /* 有的 U 盤(pán)總是返回未準(zhǔn)備好,不過(guò)可以忽略,只要其建立連接 MOUNTED 且嘗試 5*50mS */break

52、;strcpy( (char *)TarName, B.BMP ); /* s = CH376FileCreatePath( TarName );目錄路徑,輸入緩沖區(qū)必須在 RAM 中 */bmp_encode(0,0,320,240); touch_key=0;目標(biāo)文件名 */*新建多級(jí)目錄下的文件,支持多級(jí)sicvoid App_ADC(void* p_arg)i;u8 LED_flag=1; u8 LCD_flag=0; u16 adcx;u16 adcx1; u8 count; u8 len;u16 times=0; float temp; uart_init(9600);OSTime

53、DlyHMSM(0,0,5,0);/p_arg = p_arg; while (1)for( i = 0 ; i ARR=(2-1); /1us中斷頻率 1000kHz20k-33kif(Get_AD0(2)Flag_OK=1; HzLevel=0; break;elseHzLevel=1; break;case 1:TIM3-ARR=(3-1); /1.5us中斷頻率 500kHz13.4k-22kif(Get_AD0(3)Flag_OK=1; HzLevel=1; break;elseHzLevel=2; break;case 2:TIM3-ARR=(4-1); /2us 中斷頻率 kHz

54、10k-16kif(Get_AD0(4)Flag_OK=1;HzLevel=2;break;elseHzLevel=3;break;case 3:TIM3-ARR=(5-1); /2.5us中斷頻率 kHz8k-13.2if(Get_AD0(5)Flag_OK=1; HzLevel=3; break;elseHzLevel=4; break;case 4:TIM3-ARR=(6-1); /3us中斷頻率 kHz6.7k- 11kif(Get_AD0(6)Flag_OK=1; HzLevel=4; break;elseHzLevel=5; break;case 5:TIM3-ARR=(7-1);

55、 /3.5us 中斷頻率 100kHz5.7k-9.4kif(Get_AD0(7)Flag_OK=1; HzLevel=5;break;elseHzLevel=6;break;case 6:TIM3-ARR=(8-1); /4us中斷頻率 100kHz5k-8.2kif(Get_AD0(8)Flag_OK=1; HzLevel=6; break;elseHzLevel=7; break;case 7:TIM3-ARR=(9-1); /4.5us中斷頻率 100kHz4.5k-7.3kif(Get_AD0(9)Flag_OK=1; HzLevel=7; break;elseHzLevel=8;

56、break;case 8:TIM3-ARR=(10-1); /5us 中斷頻率 100kHz4k-6.6kif(Get_AD0(10)Flag_OK=1; HzLevel=8; break;elseHzLevel=9; break;case 9:TIM3-ARR=(15-1); /7.5us中斷頻率 100kHz2.7k-4.4kif(Get_AD0(15)Flag_OK=1; HzLevel=9; break;elseHzLevel=10; break;case 10:TIM3-ARR=(20-1); /10us中斷頻率 100kHz2k-3.3kif(Get_AD0(20)Flag_OK=

57、1; HzLevel=10; break;elseHzLevel=11;break;case 11:TIM3-ARR=(25-1); /12.5us中斷頻率 80kHz1.6k -2.7kif(Get_AD0(25)Flag_OK=1; HzLevel=11; break;elseHzLevel=27; break;case 27:TIM3-ARR=(30-1); /15us中斷頻率 10kHz1.4k-2.2kif(Get_AD0(30)Flag_OK=1; HzLevel=27; break;elseHzLevel=28; break;case 28:TIM3-ARR=(40-1); /2

58、0us中斷頻率 10kHz1k-1.6kif(Get_AD0(40)Flag_OK=1; HzLevel=28; break;elseHzLevel=12;break;case 12:TIM3-ARR=(50-1); /25us中斷頻率 10kHz0.8k-1.3kif(Get_AD0(50)Flag_OK=1; HzLevel=12; break;elseHzLevel=13; break;case 13:TIM3-ARR=(75-1); /37.5us中斷頻率 10kHz534-880if(Get_AD0(75)Flag_OK=1; HzLevel=13; break;elseHzLeve

59、l=14; break;case Hz200 :/case 14:TIM3-ARR=(100-1); /50us中斷頻率 10kHz400-660if(Get_AD0(100)Flag_OK=1;HzLevel=14;break;elseHzLevel=15;break;case 15:TIM3-ARR=(125-1); /62.5us中斷頻率 10kHz320-528if(Get_AD0(125)Flag_OK=1; HzLevel=15; break;elseHzLevel=16; break;case 16:TIM3-ARR=(150-1); /75us中斷頻率 10kHz267-440

60、if(Get_AD0(150)Flag_OK=1; HzLevel=16; break;elseHzLevel=17; break;case 17:TIM3-ARR=(175-1); /87.5us 中斷頻率 10kHz229-377if(Get_AD0(175)Flag_OK=1; HzLevel=17;break;elseHzLevel=18;break;/case Hz100 :case 18:TIM3-ARR=(200-1); /100us中斷頻率 5kHz200-330if(Get_AD0(200)Flag_OK=1; HzLevel=18; break;elseHzLevel=19

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論