版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、摘要本文介紹了一種虛擬示波器的設(shè)計過程。首先介紹了數(shù)據(jù)采集的方法。下位機采集的數(shù)據(jù)有溫度和電壓兩種。通過AD轉(zhuǎn)換模塊將模擬電壓量轉(zhuǎn)化為數(shù)字量實現(xiàn)電壓采集,溫度采集使用的是18B20溫度傳感器。數(shù)據(jù)采集完成后根據(jù)上位機的需求,將相應(yīng)的數(shù)據(jù)通過串口發(fā)送給上位機顯示。然后進(jìn)行上位機界面設(shè)計。上位機是用LabVIEW設(shè)計的,在接收到下位機傳過來的數(shù)據(jù)后將其以波形的形式顯示出來,從而實現(xiàn)了示波器的功能。最后給出了本次設(shè)計的一個應(yīng)用實例。關(guān)鍵詞:虛擬儀器;示波器;數(shù)據(jù)采集目錄1 緒論12 單片機硬件電路及原理22.1 AT89C516RD+單片機22.2 模數(shù)轉(zhuǎn)換42.3 18B20溫度傳感器53 單片機
2、程序設(shè)計73.1 I2C總線介紹73.2 模數(shù)轉(zhuǎn)換93.3 溫度采集103.4 與電腦數(shù)據(jù)傳輸134 PC端軟件設(shè)計154.1 軟件界面設(shè)計154.2 主程序154.3 溫度采集子程序174.4 電壓采集子程序185 設(shè)計結(jié)果及應(yīng)用205.1 結(jié)果展示205.2 應(yīng)用實例216 總結(jié)體會23參考文獻(xiàn)24附錄 重要程序清單25測控系統(tǒng)現(xiàn)代儀器設(shè)計課程設(shè)計說明書1 緒論虛擬儀器是由電腦軟件加外部硬件,實現(xiàn)傳統(tǒng)儀器的功能的一種軟硬件結(jié)合系統(tǒng)。與傳統(tǒng)儀器相比,虛擬儀器有很多優(yōu)點,如極大的靈活性。利用相同的外部硬件通過編寫不同的軟件就可實現(xiàn)不同的功能,并且不像傳統(tǒng)儀器那樣,一旦制造出來其功能就是固定的,
3、虛擬儀器可根據(jù)用戶不同的需求進(jìn)行各種功能優(yōu)化。同時,虛擬儀器軟件基于PC平臺,可充分利用其強大的處理能力,出色的完成各種工作。除此之外,虛擬儀器還能大幅降低資金投入、系統(tǒng)開發(fā)成本和系統(tǒng)維護(hù)成本,為企業(yè)帶來更高的經(jīng)濟效益。正因為虛擬儀器有著傳統(tǒng)儀器無法比擬的優(yōu)勢,他擁有廣闊的發(fā)展前景。目前虛擬儀器主要用在數(shù)據(jù)采集與控制、數(shù)據(jù)處理與分析和數(shù)據(jù)顯示等方面。LabVIEW是一款由美國國家儀器(NI)公司研制開發(fā)虛擬儀器開發(fā)軟件,集成了工程師和科學(xué)家快速構(gòu)建各種應(yīng)用所需的所有工具,對計算機以及各種外部硬件有很好的支持,可充分發(fā)揮計算機的能力,并且有強大的數(shù)據(jù)處理功能,可以創(chuàng)造出功能更強的儀器。它采用圖形
4、化編程方式,不僅使用簡單,而且大大提高了軟件開發(fā)效率。本次課設(shè)的PC端軟件就是用這款軟件設(shè)計的。本次課程設(shè)計設(shè)計的是一個數(shù)據(jù)采集系統(tǒng)。用單片機采集電壓信號和溫度信息,通過串口發(fā)送到電腦,由軟件處理后以波形圖的形式顯示。模擬電壓經(jīng)AD轉(zhuǎn)換芯片轉(zhuǎn)換為數(shù)字電壓量,然后便可由計算機處理,而溫度信號是由18B20傳感器采集,直接得到了數(shù)字量。這里只是以這兩種物理量為例,其他的物理量一般可以通過傳感器轉(zhuǎn)換為相應(yīng)的模擬電壓或數(shù)字量,之后便可以采取同樣的方法進(jìn)行處理。2 單片機硬件電路及原理硬件電路的功能是數(shù)據(jù)采集。其中AD模使用的是PCF8591芯片,用來采集電壓信息。溫度采集部分用的是DS18B20溫度傳
5、感器,這個傳感器的輸出量為數(shù)字量,單片機可直接從中讀取溫度值。單片機根據(jù)上位機的命令,選擇將溫度數(shù)據(jù)還是電壓數(shù)據(jù)通過串口發(fā)送給電腦。電路工作原理如圖2.1所示。圖2.1 電路工作原理2.1 AT89C516RD+單片機AT89C516RD+是Atmel公司生產(chǎn)的一款微處理器,該處理器共有40個管腳,4組8位I/O口P0P4,其中P0口為雙向三態(tài)I/O口,其他三組為準(zhǔn)雙向I/O口,在讀管腳值前應(yīng)先向管腳寫1。P0口內(nèi)部無上拉電阻,使用時應(yīng)外接上拉電阻,否則無法輸出高電平。引腳圖如圖2.2所示。圖2.2 AT89C51引腳圖AT89C51支持5個中斷源,分別是外部中斷0、定時器0、外部中斷1、定時
6、器1和串口中斷1。中斷優(yōu)先級可配置,默認(rèn)情況下5個中斷為同級中斷。P3口的各腳除普通I/O口功能外都有第二功能。P3.0是串口發(fā)送腳,P3.1是串口消息接收。P3.2和P3.3分別是外部中斷0和外部中斷1的輸入引腳。外部中斷支持低電平觸發(fā)和下降沿觸發(fā)兩種模式。定時器0有四種工作方式。工作方式0是一個13為定時器,定時的最長時間為213 = 8192us,工作方式1為16位定時器,最長定時時間為65536us,工作方式2是8位定時器,最長定時時間為256us。前兩種工作方式在每次定時完成產(chǎn)生中斷時都要在中斷服務(wù)子程序中重新給定時器賦初值,否則從第二次開始定時器將以最長定時時間工作,而工作方式2采
7、用的是8位自動重加載模式。定時器初值寫到TH0和TL0中,溢出后硬件會自動將TH0中的值裝入TL0中,從而使定時器按原來的定時時長工作。與用程序重裝初值相比,硬件自動重裝速度很快,因而定時時間更準(zhǔn)確,所以常用于串口波特率的發(fā)生等對定時精度要求很高的場合。工作方式3是將定時器0拆成了兩個8位定時器:TH0和TL0。TH0被固定為一個8位定時器,并使用定時器T1的狀態(tài)控制位TR1,同時占用定時器T1的中斷請求源TF1,此時,定時器TH0的啟動或停止只受TR1控制。定時器1只有前三種工作方式,不支持工作方式3,其他與定時器0相同。串口是下位機與電腦通信時非常常見的一種方式。AT89C51支持串口通訊
8、功能,有一個串口。串口通訊有兩種常用的電平標(biāo)準(zhǔn):RS232和TTL電平標(biāo)準(zhǔn)。RS232協(xié)議中規(guī)定,-3-15V為高電平,+3+15V為低電平,采用的是負(fù)邏輯,電腦串口采用這種標(biāo)準(zhǔn)。而TTL對電平標(biāo)準(zhǔn)的規(guī)定是0V為低電平,5V為高電平,單片機采用的是TTL電平標(biāo)準(zhǔn)。所以兩者之間要想正常完成通訊必須進(jìn)行電平轉(zhuǎn)換。由于現(xiàn)在的電腦上很少還有串口接口,所以本次設(shè)計采用了USB虛擬串口的形式,將USB轉(zhuǎn)換為串口,比直接采用接口進(jìn)行電平轉(zhuǎn)換更加方便。這里采用的是CH340芯片進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換電路如圖2.3所示。圖2.3 CH340 USB轉(zhuǎn)串口電路2.2 模數(shù)轉(zhuǎn)換由于現(xiàn)實世界中存在的只能是模擬量,而計算機處理
9、的只能是數(shù)字量。所以要想用計算機處理信號就必須將模擬量轉(zhuǎn)換為數(shù)字量,這就是模數(shù)轉(zhuǎn)換(AD)。模數(shù)轉(zhuǎn)化的步驟為采樣-采樣保持-量化-數(shù)字化。采樣是感受外界模擬量,這一步的關(guān)鍵在于采樣頻率的確定。根據(jù)奈奎斯特采樣定律,只有采樣頻率大于兩倍的最大信號頻率時,采集到的信號才能真正反映原信號的變化2。兩次采樣之間需要一定的時間,這段時間內(nèi)認(rèn)為模擬量保持不變,直到下一次采集,這個過程就是采樣保持。衡量AD轉(zhuǎn)換的主要指標(biāo)有分辨率、轉(zhuǎn)換速率、量化誤差等。分辨率與采樣位數(shù)有關(guān)。轉(zhuǎn)換速率是指完成一次從模擬轉(zhuǎn)換到數(shù)字的AD轉(zhuǎn)換所需的時間的倒數(shù),要想正確完成采樣,采樣速率必須小于轉(zhuǎn)換速率。量化誤差產(chǎn)生是因為模擬量是連
10、續(xù)的,而AD的分辨率是有限的,不可能精確的表示出模擬量中的每一個值,只能取與其最接近的值。根據(jù)不同的量化方法,量化誤差通常等于量化步長或其一半。本次設(shè)計中采用的芯片是模數(shù)轉(zhuǎn)換芯片是PCF8591。這個芯片同時具備AD和DA(數(shù)模轉(zhuǎn)換)功能。PCF8591具有4個模擬輸入、1個模擬輸出和1個串行I²C總線接口,4個模擬輸入可編程為單端型或差分輸入,輸入電壓范圍為2.5V-6V。引腳圖如圖2.4所示。圖2.4 PCF8591引腳圖AIN0AIN3是四路模擬信號輸入端,A0A2是引腳地址端,SDA和SCL分別是I2C總線的數(shù)據(jù)線和時鐘線,VREF是參考電壓輸入端。芯片外部電路如圖2.5所示
11、。圖2.5 PCF8591電路連接圖W1為電位器,按上圖連接方式可獲得05V的連續(xù)可調(diào)電壓,從AIN0輸入。A0A3接地,決定此器件在I2C總線上的地址為0x00。VCC即作為芯片的供電電源,又作為參考電壓,所以AD轉(zhuǎn)換的最高電壓為VCC。R26和R27為I2C總線的上拉電阻,保證總線工作穩(wěn)定。PCF8591是8位AD轉(zhuǎn)換器,我們用其采集的電壓范圍為05v,所以分辨率為5/256v。2.3 18B20溫度傳感器DS18B20溫度傳感器具有體積小,硬件開銷低,抗干擾能力強,精度高的特點,是一種常用的溫度傳感器。18B20的外觀與三極管很相似,有三個腳。平面面對自己時從左到右依次是地線、數(shù)據(jù)線和電
12、源正(GND、DQ和VDD),如圖2.6所示。圖2.6 18B20外觀圖18B20采用的是獨特的單線接口方式,在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊,使用方便。接線的時候要注意一定不要將電源線接反,否則會嚴(yán)重發(fā)熱或者燒毀。供電電壓范圍為3.0 V至5.5 V,無需備用電源。VDD是可供選擇的電源端,不使用時可直接接地,此時由數(shù)據(jù)總線供電。測量溫度范圍為-55至+125。在-10至+85范圍內(nèi)精度為±0.5,可以滿足大多數(shù)測溫場合的要求。18B20的分辨率可由程序控制,可編程的分辨率為912位,對應(yīng)的可分辨溫度分別為0.5、0.25、0.125和0.
13、0625,可實現(xiàn)高精度測溫。其輸出量為數(shù)字量,在9位分辨率時最多在 93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,對于溫度這種緩慢變化的信號來說速度還是非??斓?。18B20的硬件連接如圖2.7所示。圖2.7 18B20硬件連接圖3 單片機程序設(shè)計3.1 I2C總線介紹I2C總線是同步通信的一種特殊形式,具有接口線少,控制方式簡單,器件封裝形式小,通信速率較高等優(yōu)點3。在主從通信中,可以有多個I2C總線器件同時接到I2C總線上,所有與I2C兼容的器件都具有標(biāo)準(zhǔn)的接口,通過地址來識別通信對象,使他們可經(jīng)由I2C總線直接相互通信。I2C總線由數(shù)據(jù)線SDA和時鐘
14、線SCL兩條線構(gòu)成,既可以發(fā)送數(shù)據(jù)又可以接收數(shù)據(jù)。各種器件并聯(lián)在總線上,但每個器件都有唯一的地址。CPU發(fā)出的控制信號分為地址碼和數(shù)據(jù)碼兩部分,地址碼用來選擇與那個器件通訊,數(shù)據(jù)碼是通訊內(nèi)容,這樣各個器件雖然同時掛在一條總線上卻是彼此獨立的。I2C總線通信格式如圖3.1所示。圖3.1 I2C總線通信格式圖進(jìn)行數(shù)據(jù)傳送時,在SCL呈現(xiàn)高電平期間,SDA上的電平必須保持穩(wěn)定,低電平為數(shù)據(jù)0,高電平為數(shù)據(jù)1。只有在SCL為低電平期間,才允許SDA上的電平改變狀態(tài)。通信過程如下:1. 發(fā)送起始信號在SCL為高電平期間,SDA出現(xiàn)一個下降沿則為起始信號。由于其起始條件建立的時間至少需要4.5us,因此一
15、般下降沿要出現(xiàn)在SCL拉高5us之后。SDA出現(xiàn)下降沿是,I2C總線上的從器件會檢測到該信號,隨后進(jìn)入等待狀態(tài)。起始信號由主器件發(fā)出。啟動時序圖如圖3.2所示。圖3.2 I2C總線啟動時序圖2. 發(fā)送尋址信號主機發(fā)送啟動信號后,在發(fā)出尋址信號。尋址信號的作用是確定總線上要通訊的器件??偩€上每個器件都有自己的獨特的地址,器件地址有7位和10位兩種形式,本次設(shè)計采用的是7位形式。尋址地址由一個字節(jié)構(gòu)成,高7位是地址,最低位是讀寫標(biāo)識位,為1表示主機從從器件讀取數(shù)據(jù),為0表示主機向從器件發(fā)送數(shù)據(jù)。主機發(fā)送地址后,總線上所有從器件都將這個地址與自己的地址對比,若相同則認(rèn)為自己是主機此時尋求通訊的對象,
16、然后根據(jù)R/W信息確定自己將要接收還是發(fā)送數(shù)據(jù),否則不做回應(yīng),從而可以確定接下來與總線通訊的是哪一個器件。3. 應(yīng)答信號與非應(yīng)答信號I2C總線協(xié)議規(guī)定,每傳送一個字節(jié)(無論是地址還是數(shù)據(jù))后都要有一個回應(yīng)信號,以確定數(shù)據(jù)是否被對方收到。從器件發(fā)出的回應(yīng)信號叫做應(yīng)答信號,主器件發(fā)出的回應(yīng)信號叫非應(yīng)答信號。從器件接收完一個字節(jié)后,在SCL信號為高電平期間,將SDA拉為低電平,表示自己已經(jīng)正確收到數(shù)據(jù)。主器件接收數(shù)據(jù)后不應(yīng)答(保持SDA為高電平),表示主設(shè)備接收結(jié)束。應(yīng)答與非應(yīng)答的時序如圖3.3所示。圖3.3 應(yīng)答與非應(yīng)答時序圖4. 數(shù)據(jù)傳輸主機發(fā)送尋址信號并得到從器件應(yīng)答后便可進(jìn)行數(shù)據(jù)傳輸,每次傳
17、輸一個字節(jié),每個字節(jié)傳輸完成后都需要得到應(yīng)答(或非應(yīng)答)信號后才能傳輸下一個字節(jié)。在I2C總線上傳送的每一位數(shù)據(jù)都有一個時鐘脈沖相對應(yīng)(或同步控制),即在SCL串行時鐘的配合下,每一位數(shù)據(jù)都是在SDA上逐位地串行傳送的。5. 發(fā)送停止信號在時鐘線SCL保持高電平期間,數(shù)據(jù)線SDA被釋放,使得SDA返回高電平(即正跳變),稱為I2C總線的停止信號,它標(biāo)志著一次數(shù)據(jù)傳輸?shù)慕K止。停止信號也是一種電平跳變時序信號,而不是一個電平信號,停止信號也是由主控器主動建立的,建立該信號之后,I2C總線將返回空閑狀態(tài)。停止信號時序圖如圖3.4所示。圖3.4 停止信號時序圖3.2 模數(shù)轉(zhuǎn)換前邊已經(jīng)介紹過,PCF85
18、91是通過I2C總線傳輸數(shù)據(jù)的,所以只要按照I2C總線協(xié)議標(biāo)準(zhǔn),先啟動I2C總線,然后發(fā)送PCF8591的地址,收到應(yīng)答信號后即可從總線上讀取數(shù)據(jù), 讀取數(shù)據(jù)的通信格式為:第一字節(jié)第二字節(jié)第三字節(jié)第四字節(jié)寫入器件地址(0x90)寫入控制字節(jié)寫入器件地址(0x90)讀出一字節(jié)數(shù)據(jù)讀取數(shù)據(jù)的程序如下:unsigned char ReadADC( unsigned char Chl )unsigned char Val;Start_I2C( ); /啟動總線 SendByte( AddWr ); /發(fā)送器件地址(寫)if ( ack = 0 )return(0);/沒有應(yīng)答,返回SendByte(
19、0x40 | Chl ); /發(fā)送器件子地址if ( ack = 0 )return(0);Start_I2C( );SendByte( AddWr + 1 );/發(fā)送器件地址(讀)if ( ack = 0 )return(0);Val = RcvByte( );NoAck_I2C( ); /發(fā)送非應(yīng)位 Stop_I2C( ); /結(jié)束總線 return(Val);3.3 溫度采集獲取溫度信息的方式有多種,如利用熱敏電阻或熱電偶將溫度信息轉(zhuǎn)化為電信號,然后再由單片機處理。也可以利用18B20等數(shù)字溫度傳感器來采集溫度信息。但是熱敏電阻或熱電偶是將溫度信息轉(zhuǎn)化為模擬電壓量,要想用單片機處理還需要
20、做一步模數(shù)轉(zhuǎn)換,比較繁瑣。而18B20溫度傳感器是數(shù)字溫度傳感器,直接將溫度轉(zhuǎn)化為數(shù)字量,這樣處理起來更方便,而且18B20的精度要比普通熱電偶高。與第一種方式相比,第二種方式的成本也要低,所以本次設(shè)計采用的是第二種方式。18B20的初始化時序如圖3.5所示。初始化過程為:先將數(shù)據(jù)線置高電平1,延時一小段時間(盡可能短),將數(shù)據(jù)線拉低為0,再延時480960us后數(shù)據(jù)線置高電平1,這時等待1560ms后18B20會返回低電平0,單片機讀到這個低電平后延時至少480us后將數(shù)據(jù)線再次拉高,初始化過程結(jié)束。圖3.5 18B20初始化時序圖初始化完成后就可以寫入和讀取數(shù)據(jù)了。寫入數(shù)據(jù)的過程為:先將數(shù)
21、據(jù)線電平拉低,精確延時15us后發(fā)送一位數(shù)據(jù),然后延時45us后將數(shù)據(jù)線置1。重復(fù)這個過程,直到發(fā)完一個字節(jié),寫的時候先寫數(shù)據(jù)的低位,在寫數(shù)據(jù)的高位,發(fā)完一個字節(jié)后將數(shù)據(jù)線置1。寫時序圖如圖3.6所示。圖3.6 18B20寫時序圖讀取數(shù)據(jù)的過程為:將數(shù)據(jù)線拉高到1,延時2us后將數(shù)據(jù)線拉低,延時6us后再次將數(shù)據(jù)線拉高,延時4us后便可讀到第一個數(shù)據(jù)位。重復(fù)以上過程,直至讀完一個字節(jié),每兩位之間要有30us的延時。讀取時序圖如圖3.7所示。圖3.7 18B20讀時序圖有了以上函數(shù),結(jié)合18B20的指令,便可實現(xiàn)溫度讀取。18B20的常用的控制指令如表3-1所示。表3-1 18B20的常用的控制
22、指令指令代碼指令作用指令代碼指令作用33H讀ROM44H溫度轉(zhuǎn)換55H匹配ROMBEH讀暫存器F0H搜索ROM4EH寫暫存器CCH跳過ROM48H復(fù)制暫存器ECH告警搜索命令B8H重調(diào)E2PROM讀取溫度的程序如下:unsigned int ReadTemperature(void)/溫度讀取函數(shù)unsigned chara = 0;unsigned intb = 0;unsigned intt = 0;while(Init_DS18B20( ); /檢測初始化是否成功 WriteOneChar(0xCC); /跳過讀序號列號的操作 WriteOneChar(0x44); /啟動溫度轉(zhuǎn)換 De
23、layMs(10);Init_DS18B20();WriteOneChar(0xCC); /跳過讀序號列號的操作 WriteOneChar(0xBE); /讀取溫度寄存器,前兩個就是溫度 a = ReadOneChar(); /低位 b = ReadOneChar(); /高位b <<= 8;t = a + b;return(t);從18B20讀取的數(shù)據(jù)總共有16位,其中最高5位是正負(fù)標(biāo)志,這五位同時變換,所以只需判斷第12位就可以了。低十一位為溫度數(shù)據(jù),其中最低4位為小數(shù)部分,剩下的為整數(shù)部分。所以要想以十進(jìn)制的形式將溫度顯示溫度就必須進(jìn)行格式轉(zhuǎn)換。3.4 與電腦數(shù)據(jù)傳輸要將采集
24、到的溫度數(shù)據(jù)在電腦上用波形顯示出來,就必須建立電腦與單片機之間的通訊,這里我們采用的是串口方式。發(fā)送串口消息有兩種形式,一種是直接對SBUF賦值,這種形式每次只能發(fā)送一個字節(jié),想要發(fā)送多個字節(jié)時比較麻煩。另一種是利用printf()函數(shù),該函數(shù)的使用方法和電腦上顯示一個字符串的語句使用方法相同4。如假設(shè)a = 10,b = 15,那么printf(“%d.%d”,a,b);語句將把10.15發(fā)送到串口。利用printf()函數(shù)發(fā)送串口消息時要手動將發(fā)送中斷標(biāo)志位TI置1或始終保持TI = 1,否則無法發(fā)送消息。void SendTemp()unsigned int TempH, TempL,
25、temp;if(ReadTempFlag = 1)/溫度讀取標(biāo)識ReadTempFlag = 0;temp = ReadTemperature();if(temp & 0x8000) temp = temp;/取反加1 temp+= 1;TempH= temp >> 4;/取高位TempL= temp & 0x0F;/取低位TempL= TempL * 6 / 10;/保留一位小數(shù) printf("%d.%d", TempH, TempL);/發(fā)送數(shù)據(jù)TI = 1;/手動置標(biāo)志位溫度讀取標(biāo)識的作用是控制讀取溫度的頻率,防止讀取太頻繁。該標(biāo)志在定時
26、器中每隔一定時間就會被設(shè)為1。程序可采集的信息有電壓和溫度兩種,具體需要進(jìn)行哪項采集,程序還需要通過接收電腦端發(fā)送的命令進(jìn)行判斷,這樣才能保證電腦的顯示與單片機同步。我們在程序中定義了如下指令:收到字符V則進(jìn)行電壓采集工作,把采集到的電壓數(shù)據(jù)發(fā)送到電腦,收到字符T則進(jìn)行溫度采集工作,若收到字符0則停止采集。這一功能放在串口消息處理函數(shù)中實現(xiàn)。上位機根據(jù)需求,若需要采集溫度信息,則向單片機發(fā)送字符T,若需要電壓信息則向單片機發(fā)送V。單片機收到T和V時分別執(zhí)行不同的程序來獲得相應(yīng)的信息,若收到的是0,則不采集任何數(shù)據(jù),從而實現(xiàn)了由軟件控制單片機的采集工作。4 PC端軟件設(shè)計4.1 軟件界面設(shè)計PC
27、端軟件的作用主要是將單片機采集到的數(shù)據(jù)用波形顯示出來。程序界面如圖4.1所示。圖4.1 軟件界面上邊一排為操作面板,中間空白區(qū)域為采集量隨時間變化的波形顯示區(qū)。啟動程序后首先要選擇正確的端口號以實現(xiàn)與單片機的通信。打開開關(guān)后將開始數(shù)據(jù)采集。采集項目包括電壓和溫度兩項,默認(rèn)的項目是溫度。控制面板為波形顯示控制,包括波形的縮放、移動等操作。另外在右鍵菜單里L(fēng)abView也為我們提供了豐富的操作,如自動調(diào)整坐標(biāo)級別、清除圖表、更改曲線更新方式以及將波形數(shù)據(jù)導(dǎo)出等。最下方為一個滑動條,當(dāng)曲線一屏顯示不下時刻滑動滑動條查看不同時刻的數(shù)據(jù)。4.2 主程序PC端串口通訊是通過LabView的VISA系列控件
28、實現(xiàn)的5。這一些列控件包括串口的打開和關(guān)閉、串口初始化、數(shù)據(jù)的接收和發(fā)送以及數(shù)據(jù)緩沖區(qū)的清空等操作。主程序如圖4.2所示。圖4.2 主程序啟動程序后首先會判斷端口號是否正確,只有選擇的正確的端口號程序才會繼續(xù)往下執(zhí)行,確保能夠正常的從單片機獲取數(shù)據(jù);若串口不存在或已被打開則彈出端口錯誤提示框,然后中止程序。端口錯誤處理程序如圖4.2所示。圖4.2 端口錯誤處理程序選擇了正確的端口號后就可以打開開關(guān),用一個case結(jié)構(gòu)判斷采集項目選擇的是溫度還是電壓。若選擇的是溫度則執(zhí)行溫度處理子程序,若是電壓則執(zhí)行電壓處理子程序。處理完的數(shù)據(jù)用波形圖顯示出來。若關(guān)閉開關(guān),則會向單片機發(fā)送字符0,通知單片機停止
29、數(shù)據(jù)采集,然后關(guān)閉串口。關(guān)閉開關(guān)的處理程序如圖4.3所示。圖4.3 關(guān)閉開關(guān)的處理程序4.3 溫度采集子程序溫度采集子程序如圖4.4所示。圖4.4 溫度采集程序進(jìn)入溫度采集程序后先向單片機發(fā)送字符T,通知單片機現(xiàn)在需要返回溫度數(shù)據(jù)。單片機返回溫度數(shù)據(jù)采用的是printf("%d.%d", TempH, TempL);語句,語句中的“%d”代表的是整形數(shù),整形數(shù)在51單片機中占兩個字節(jié),兩個整形數(shù)之間的“.”占一個字節(jié),所以一個完整的溫度數(shù)據(jù)總共是5個字節(jié)。所以先對接收緩沖區(qū)的字符數(shù)進(jìn)行判斷,若滿5個字節(jié)則一次性接收。串口接收到的數(shù)據(jù)仍然是字符串格式,需要將其轉(zhuǎn)換為十進(jìn)制的數(shù)
30、字才能正確的在波形圖中顯示出來。將數(shù)字格式的字符轉(zhuǎn)換為數(shù)字用到的是Decimal String To Number節(jié)點,輸入要轉(zhuǎn)換的字符串與轉(zhuǎn)換的起始位和終止位即可將這部分十進(jìn)制數(shù)字格式的字符串轉(zhuǎn)換為十進(jìn)制數(shù)字。本次程序中對整數(shù)部分和小數(shù)部分分別進(jìn)行了轉(zhuǎn)換,然后將兩者相加后便得到我們需要的溫度值。字符串轉(zhuǎn)數(shù)字的程序如圖4.5所示。圖4.5 十進(jìn)制形式字符串轉(zhuǎn)數(shù)字程序程序中的節(jié)點是Build Waveform,作用是將波形圖表所需的信息合并,這里輸入的信息是系統(tǒng)時間和采集到的數(shù)據(jù),這樣便能以系統(tǒng)時間為橫坐標(biāo)顯示數(shù)據(jù)溫度了。另外還在程序中加了一個800ms的延時,因為溫度采集需要一定時間,且溫度是
31、緩變信號,每800ms采集一次足以反映出溫度的變化同時有能夠減小不必要的開銷。4.4 電壓采集子程序圖4.6 電壓采集程序電壓采集程序如圖4.6所示。與溫度采集程序類似,進(jìn)入電壓采集程序奇后先向單片機發(fā)送字符V,通知單片機進(jìn)行電壓采集。電壓采集用的是8位AD,所以得到的電壓數(shù)據(jù)只有一個字節(jié),將這個值寫入SBUF就可以發(fā)送到電腦了。由于只有一個字節(jié),所以只要串口接收緩沖區(qū)中有內(nèi)容就將其取出,同樣取出來之后為字符格式,需要轉(zhuǎn)換為十進(jìn)制。與溫度轉(zhuǎn)換不同的是,這里的字符不是十進(jìn)制形式的,我們需要的信息是該字符的ASCII碼,所以這里用到了另一種轉(zhuǎn)換節(jié)點String To Byte Array(圖中的)
32、,這個節(jié)點的作用是將字符串轉(zhuǎn)化為ASCII碼數(shù)組。因為我們采集的電壓是05V,用0255表示,所以還需要進(jìn)一步轉(zhuǎn)換才能得到真正的電壓值。同樣,轉(zhuǎn)換完的數(shù)值加上時間信息后通過波形圖表顯示出來。5 設(shè)計結(jié)果及應(yīng)用5.1 結(jié)果展示連接好硬件電路,打開開關(guān),電腦開始顯示溫度曲線。從曲線中可以看出我所處環(huán)境當(dāng)前溫度為27。然后用手捏住溫度傳感器,此時溫度開始上升。開始階段上升較快,到達(dá)32后上升速度減慢,約一分鐘后到達(dá)最高溫度32.8。這時松開手指,溫度開始下降,這一過程符合實際規(guī)律,說明該設(shè)計可以正確的檢測到實際溫度并繪制出溫度隨時間變化的波形。圖5.1 溫度隨時間變化曲線圖5.2顯示的是電壓采集的結(jié)
33、果。操作過程是先接好電路,然后采集項目選擇電壓項,打開開關(guān)。此時開始顯示電壓曲線,起始電壓約為2.75V。然后旋轉(zhuǎn)電位器,使輸入AD轉(zhuǎn)換芯片的電壓發(fā)生變化,最終得到如圖5.2所示的結(jié)果。結(jié)果中顯示電壓最大值為5V,最小值為0V,也與實際情況相吻合。圖5.2 電壓采集結(jié)果5.2 應(yīng)用實例我們在做標(biāo)簽漏帖檢測項目時需要分析傳感器傳回來的信號,然而公司里沒有示波器,所以開始的時候我們只能通過理論分析去寫程序。寫出的程序中總存在誤報問題,由于沒有示波器,我們并不知道這個誤報是由于傳感器傳回的信號有問題還是我們的處理程序有問題。有了這個數(shù)據(jù)采集程序我們便可以測試出傳感器的輸出波形,從而確定原因所在。光電
34、傳感器輸出的是一個開關(guān)量,檢測到標(biāo)簽時信號線與地線接通,將單片機管腳電平拉低,沒有標(biāo)簽時信號線懸空,單片機引腳恢復(fù)高電平。我們通過程序不斷讀取信號線所在引腳的電平并將結(jié)果發(fā)送到電腦,經(jīng)處理后便得到了圖5.3所示的波形。這個波形是在標(biāo)簽接近勻速運動的情況下采集的。圖5.3 光電傳感器信號波形圖有了波形圖后我們在根據(jù)波形圖對程序進(jìn)行分析。漏張檢測程序中是對下降沿計數(shù),測試后發(fā)現(xiàn),程序的計數(shù)始終等于波形中下降沿的個數(shù),這就說明我們的處理程序完成了對每一個標(biāo)簽的計數(shù),程序本身沒有錯誤。再仔細(xì)分析波形,發(fā)現(xiàn)有誤報的時候波形中會出現(xiàn)幾次明顯的不規(guī)律的跳變,這些跳變往往是夾雜在正常波形中的,說明傳感器的的返
35、回信號受到了干擾,這是造成誤報的主要原因。然后我們針對這一情況對程序進(jìn)行了優(yōu)化,誤報現(xiàn)象明顯改善。6 總結(jié)體會這次課程設(shè)計收獲頗豐。從最開始學(xué)習(xí)I2C總線傳輸協(xié)議、學(xué)習(xí)各種器件操作方法以及LabView編程方法等到最終完成了一個能夠?qū)嶋H應(yīng)用的數(shù)據(jù)采集系統(tǒng),雖然中間經(jīng)過了很多坎坷,最終的成功還是給了我很大的信心。I2C總線傳輸協(xié)議是一種常用的傳輸協(xié)議,PCF8591芯片就是采用的這種傳輸方式。通過對該芯片的學(xué)習(xí),不但掌握了AD轉(zhuǎn)換的方法,對I2C總線傳輸協(xié)議也有了不少了解。而18B20采用的是單總線的協(xié)議,他代表的是另一種通訊方式。雖然現(xiàn)在用到的比較簡單,但這些都是那些最基礎(chǔ)、必須掌握的內(nèi)容,有
36、了這些內(nèi)容做鋪墊,以后才能進(jìn)行深入學(xué)習(xí)。對于串口通訊,我掌握了發(fā)送數(shù)據(jù)的一種新方式printf();函數(shù)的方法。利用這種方式發(fā)送多個字符,尤其是需要按某種格式發(fā)送的多個字符,非常方便。但使用的時候要注意手動置發(fā)送標(biāo)志位,否則無法發(fā)送成功。通過對這些器件的操作,現(xiàn)在已經(jīng)掌握了一定的學(xué)習(xí)新器件的方法,不再像剛開始那樣,面對一個新器件的說明書感到一頭霧水。我發(fā)現(xiàn)想要掌握一種器件讀懂他的時序圖是非常重要的。只要按照時序圖,結(jié)合操作器件的各種指令,一步一步操作就可以實現(xiàn)對器件的控制。所以我認(rèn)為,只要讀懂了時序圖就掌握了這個器件的絕大部分了。對這兩個器件操縱的程序,我是對照時序圖一點一點寫出來的,在多次的
37、失敗和不斷的嘗試中,我也逐漸摸索到了一些讀時序圖的方法。現(xiàn)在拿到一張新的時序圖已經(jīng)沒有當(dāng)初那種莫名的畏懼與煩躁感了。參考文獻(xiàn)1 李廣弟等.單片機基礎(chǔ).北京:北京航空航天出版社,2001.72 吳佩清.數(shù)字信號處理.北京:清華大學(xué)出版社,2011.3 吳國經(jīng)等.單片機應(yīng)用技術(shù).北京:中國電力出版社,2004.4 趙茂泰.智能儀器原理及應(yīng)用J.北京:電子工業(yè)出版社,2004.75 劉君華.虛擬儀器圖形化編程語言LabVIEW教程.西安:西安電子科技大學(xué)出版社,2000附錄 重要程序清單1.啟動I2C總線的程序:void Start_I2C( )SDA=1; /發(fā)送起始條件的數(shù)據(jù)信號_nop_( )
38、;SCL=1;_nop_( ); /起始條件建立時間大于4.7us,延時_nop_( );_nop_( );_nop_( );_nop_( ); SDA=0; /發(fā)送起始信號_nop_( ); /起始條件鎖定時間大于4_nop_( );_nop_( );_nop_( );_nop_( ); SCL=0; /鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)_nop_( );_nop_( );2. I2C總線發(fā)送一個字節(jié)(地址或數(shù)據(jù))的程序:void SendByte(unsigned char c)/c為要發(fā)送的地址或數(shù)據(jù) unsigned char BitCnt; for(BitCnt=0;BitCnt&l
39、t;8;BitCnt+) /要傳送的數(shù)據(jù)長度為8位 if( (c<<BitCnt) & 0x80 ) /判斷發(fā)送位SDA=1; /準(zhǔn)備好數(shù)據(jù) else SDA=0; _nop_( ); SCL =1; /置時鐘線為高,通知被控器開始接收數(shù)據(jù)位 _nop_( ); _nop_( ); /保證時鐘高電平周期大于4 _nop_( ); _nop_( ); _nop_( ); SCL=0; _nop_( ); _nop_( ); SDA=1; /8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位 _nop_( ); _nop_( ); SCL=1; _nop_( ); _nop_( ); _nop_( ); if( SDA = 1 ) ack = 0; else ack = 1; /判斷是否接收到應(yīng)答信號 SCL = 0; _nop_( ); _nop_( );3.I2C總線主器件從從器件接收一個字節(jié)的程序:unsigned char RcvByte( )unsigned char retc;unsigned char BitCnt;retc=0; SDA=1; /置數(shù)據(jù)線為輸入方式for(BitCnt=0
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025信息網(wǎng)絡(luò)代理商合同(合同版本)
- 2025技術(shù)開發(fā)合同(中英對照)
- 2025年三年教師聘合同樣本(2篇)
- 2025衛(wèi)浴購買合同范本
- 2025工作服買賣合同范本
- 旅游住宿服務(wù)合同
- 未簽合同試用期離職的書面申請模板
- 二手車購銷合同
- 2025員工解除勞動合同模板
- 2025節(jié)電設(shè)備購銷合同
- 完整版秸稈炭化成型綜合利用項目可行性研究報告
- 油氣行業(yè)人才需求預(yù)測-洞察分析
- 《數(shù)據(jù)采集技術(shù)》課件-Scrapy 框架的基本操作
- (2024)河南省公務(wù)員考試《行測》真題及答案解析
- 圍城讀書分享課件
- 2025年河北省單招語文模擬測試二(原卷版)
- 2024版房屋市政工程生產(chǎn)安全重大事故隱患判定標(biāo)準(zhǔn)內(nèi)容解讀
- 工作計劃 2025年度醫(yī)院工作計劃
- 高一化學(xué)《活潑的金屬單質(zhì)-鈉》分層練習(xí)含答案解析
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評定規(guī)程
- 2024年內(nèi)蒙古中考英語試卷五套合卷附答案
評論
0/150
提交評論