找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7088|回復(fù): 5
收起左側(cè)

單片機(jī)+AD7705智能電壓表設(shè)計(jì)論文

[復(fù)制鏈接]
ID:304293 發(fā)表于 2018-4-9 16:22 | 顯示全部樓層 |閱讀模式
目錄
第一章 緒論     1
第二章 需求分析     2
2.1 設(shè)計(jì)目的     2
2.2 設(shè)計(jì)要求     2
第三章 方案設(shè)計(jì)     3
第四章 硬件設(shè)計(jì)     4
4.1 信號(hào)輸入     4
4.2信號(hào)放大     5
4.3 A/D轉(zhuǎn)換     7
4.4 單片機(jī)     9
第五章 LABVIEW軟件設(shè)計(jì)     10
5.1 串口通訊     10
5.2 報(bào)警模塊     11
5.3 存入數(shù)據(jù)     11
5.4 數(shù)據(jù)顯示     12
第六章 測(cè)量誤差處理     14
6.1 系統(tǒng)誤差處理     14
6.2 隨機(jī)誤差處理     14
第七章 小結(jié)     15
參考文獻(xiàn)     16
附錄     17

第一章緒論
    本次課程設(shè)計(jì)的題目是設(shè)計(jì)虛擬電壓表。使用了C51單片機(jī)和AD7705模塊完成數(shù)據(jù)的采集和處理,然后將處理后的數(shù)據(jù)通后串口發(fā)送到計(jì)算機(jī)。計(jì)算機(jī)由LABVIEW程序編寫上位機(jī)程序,將收到的數(shù)據(jù)進(jìn)行判斷,處理后進(jìn)行顯示,存儲(chǔ)等操作。由LABVIEW編寫的上位機(jī)程序,在整個(gè)課程設(shè)計(jì)中有重要的作用。本次設(shè)計(jì)的虛擬電壓表是一種虛擬儀器。它是由計(jì)算機(jī)技術(shù)、測(cè)量技術(shù)和微電子技術(shù)高速發(fā)展而孕育出的一項(xiàng)革命性技術(shù)。這一創(chuàng)新使得用戶能夠根據(jù)自己的需要定義儀器功能,而不像傳統(tǒng)儀器那樣受到儀器廠家的限制。虛擬儀器的出現(xiàn)徹底改變了傳統(tǒng)的儀器方法,開辟了測(cè)控技術(shù)的新紀(jì)元。
虛擬儀器由硬件設(shè)備與接口、設(shè)備驅(qū)動(dòng)軟件和虛擬儀器面板組成。其中,硬件設(shè)備與接口可以是各種以PC為基礎(chǔ)的內(nèi)置功能插卡、通用接口總線接口卡、串行口、VXI總線儀器接口等設(shè)備,或者是其它各種可程控的外置測(cè)試設(shè)備,設(shè)備驅(qū)動(dòng)軟件是直接控制各種硬件接口的驅(qū)動(dòng)程序,虛擬儀器通過底層設(shè)備驅(qū)動(dòng)軟件與真實(shí)的儀器系統(tǒng)進(jìn)行通訊,并以虛擬儀器面板的形式在計(jì)算機(jī)屏幕上顯示與真實(shí)儀器面板操作元素相對(duì)應(yīng)的各種控件。用戶用鼠標(biāo)操作虛擬儀器的面板就如同操作真實(shí)儀器一樣真實(shí)與方便。
     與傳統(tǒng)儀器相比,虛擬儀器其有下面一些特點(diǎn):
(1)虛擬儀器的軟硬件都具有開放性、模塊化、互換性、可重復(fù)使用等特點(diǎn)。
(2)大大地降低了測(cè)試成本。
(3)使用效率高。
(4)功能更強(qiáng)大,處理能力更強(qiáng)。
(5)遠(yuǎn)程訪問和交互式操作。
(6)測(cè)量精度更高。
本次的虛擬電壓表設(shè)計(jì)就是采用了虛擬儀器設(shè)計(jì),硬件只完成數(shù)據(jù)測(cè)量和把測(cè)量的數(shù)據(jù)傳入計(jì)算機(jī)的任務(wù)。然后對(duì)數(shù)據(jù)的處理,顯示,判斷,報(bào)警等操作都由LABVIEW程序完成。這樣可以盡量減少硬件器件間的干擾,參數(shù)誤差等原因造成的誤差,還能降低購(gòu)買元件的成本等,能夠帶來很大的方便。
第二章需求分析2.1 設(shè)計(jì)目的
    本次課程設(shè)計(jì)的任務(wù)是設(shè)計(jì)虛擬電壓表。設(shè)計(jì)一個(gè)智能化的虛擬電壓采集、測(cè)量、監(jiān)控系統(tǒng),該系統(tǒng)以單片機(jī)和虛擬儀器技術(shù)為核心并具有如下功能:
(1)能對(duì)0-10V范圍變化的模擬信號(hào)進(jìn)行連續(xù)采樣,并在PC機(jī)中進(jìn)行實(shí)時(shí)顯示,采樣頻率不低于10Hz;
(2)具有數(shù)據(jù)記錄功能,能夠?qū)⒉杉降臄?shù)據(jù)以文件形式保存在PC機(jī)中;
(3)能對(duì)系統(tǒng)存在的隨機(jī)誤差和系統(tǒng)誤差進(jìn)行校正;
(4)系統(tǒng)具有自動(dòng)量程選擇功能,量程至少4檔可調(diào);
(5)具有自動(dòng)電壓監(jiān)控功能,當(dāng)采樣值大于8V時(shí),點(diǎn)亮報(bào)警指示燈。
2.2 設(shè)計(jì)要求
(1)合理設(shè)計(jì)系統(tǒng)總體方案,并畫出方框圖;
(2)正確選擇A/D和PGA,要求系統(tǒng)測(cè)量最大量程時(shí),測(cè)量分辨率達(dá)到1mV以內(nèi),最小量程時(shí)測(cè)量分辨率達(dá)到1uV以內(nèi);
(3)要求系統(tǒng)具有隨機(jī)誤差和系統(tǒng)誤差校正功能,具有自動(dòng)量程選擇功能;
(4)PC機(jī)軟件由LabVIEW或C/C++等編程實(shí)現(xiàn),要求操作方便,界面美觀;
(5)設(shè)計(jì)說明書應(yīng)詳細(xì)說明設(shè)計(jì)思路、特點(diǎn)和電路工作原理;
(6)用A3紙繪制軟件流程圖,流程圖要模塊化并具有可讀性(即根據(jù)流程圖知道程序功能的實(shí)現(xiàn)過程);編制模塊化源程序,注釋不少于1/3;
(7)硬件電路圖應(yīng)詳細(xì)標(biāo)明所采用元件的型號(hào)、連線的引腳編號(hào),要求采用專業(yè)軟件繪制硬件電路圖;
(8)設(shè)計(jì)說明書應(yīng)包括課程設(shè)計(jì)任務(wù)、總體方案設(shè)計(jì)、詳細(xì)硬件、詳細(xì)軟件設(shè)計(jì)、軟件流程圖、程序清單、元器件清單7個(gè)部分;
按照學(xué)校課程設(shè)計(jì)說明書撰寫規(guī)范提交一份課程設(shè)計(jì)說明書(6000左右)
第三章 方案設(shè)計(jì)
設(shè)計(jì)方案主要由兩部分組成。單片機(jī)和芯片部分組成下位機(jī),用于測(cè)量數(shù)據(jù)和把數(shù)據(jù)發(fā)送到計(jì)算機(jī)。LABVIEW部分組成上位機(jī)程序,主要用于測(cè)量結(jié)果的顯示和隨機(jī)誤差處理。




file:///C:/Temp/Temp/msohtmlclip1/01/clip_image003.png










                                       3.2 LABVIEW程序流程圖




圖3.1 單片機(jī)流程圖




第四章硬件設(shè)計(jì)
本次課程設(shè)計(jì)用到的硬件部分主要有C51單片機(jī)和AD7705模塊,和一個(gè)光敏電阻。AD7705芯片主要用于對(duì)電壓進(jìn)行放大采集和進(jìn)行AD轉(zhuǎn)換,對(duì)外界的輸入電壓進(jìn)行測(cè)量。單片機(jī)主要用于控制AD7705芯片的操作,對(duì)芯片進(jìn)行設(shè)置等操作。對(duì)系統(tǒng)誤差進(jìn)行處理,進(jìn)行串口通信,將數(shù)據(jù)傳入計(jì)算機(jī)中,由LABVIEW程序進(jìn)行接收,然后由程序進(jìn)行進(jìn)一步的處理和顯示等操作。
4.1 信號(hào)輸入
由于在設(shè)計(jì)要求中的輸入信號(hào)要求是0—10V的電壓測(cè)量,所以在設(shè)置AD7705芯片時(shí)可以采用單極性的工作方式。這樣有利于充分利用芯片AD的轉(zhuǎn)換精度。采用單極性輸入方式時(shí),芯片可接收的信號(hào)的范圍是從0—+20mV到0—2.5V的單極性信號(hào)。測(cè)量要求是要最大輸入0—10V的電壓信號(hào),大于芯片可接收的最大電壓,所以為了滿足設(shè)計(jì)要求需要對(duì)輸入信號(hào)進(jìn)行分壓操作,使實(shí)際輸入AD芯片的電壓為要測(cè)量電壓的四分之一,然后進(jìn)行AD轉(zhuǎn)換后對(duì)測(cè)量值乘以四倍恢復(fù)實(shí)際電壓的大小。
本次課程設(shè)計(jì)采用的是AD7705模塊,在模塊設(shè)計(jì)時(shí)對(duì)輸入電壓進(jìn)行了一次分壓,使得輸入芯片的電壓為所測(cè)量的實(shí)際電壓的一半。所以AD7705模塊的電壓輸入最大范圍是0—5V。



file:///C:/Temp/Temp/msohtmlclip1/01/clip_image005.jpg







圖4.1 AD7705模塊輸入電路
在課程設(shè)計(jì)中要求的是最大0—10V,所以需要再次進(jìn)行分壓。第二次分壓使用光敏電阻。當(dāng)光照強(qiáng)度高時(shí)光敏電阻的阻值較小,光敏電阻上的分壓較小。當(dāng)光照強(qiáng)度較低時(shí),光敏電阻的阻值較大,光敏電阻的分壓較大。所以當(dāng)改變光照的強(qiáng)度時(shí),電壓就會(huì)發(fā)生變化。方便改變輸入的電壓,對(duì)不同的電壓值進(jìn)行測(cè)量。檢驗(yàn)電壓表設(shè)計(jì)的精度,判斷設(shè)計(jì)是否正確。且使用光敏電阻方便快捷適合對(duì)設(shè)計(jì)進(jìn)行檢驗(yàn)。

4.2信號(hào)放大
選用的TM7705芯片模塊具有16位的AD轉(zhuǎn)換功能和可編程放大器功能?梢赃x擇1,2,4,8,16,32,64,128倍的增益,通過軟件編程進(jìn)行控制放大。通過軟件編程直接測(cè)量傳感器輸出的各種微小信號(hào),并將不同幅度范圍的各類輸入信號(hào)放大到接近A/D轉(zhuǎn)換器的滿標(biāo)度電壓再進(jìn)行A/D轉(zhuǎn)換,充分利用A/D的轉(zhuǎn)換精度,減小誤差。
file:///C:/Temp/Temp/msohtmlclip1/01/clip_image006.png
圖4.3 AD7705內(nèi)部結(jié)構(gòu)圖
因?yàn)樵谶M(jìn)行A/D轉(zhuǎn)換時(shí)要選擇合適的增益對(duì)輸入信號(hào)進(jìn)行放大,充分利用A/D轉(zhuǎn)換的精度,減小誤差。所以在設(shè)計(jì)方案時(shí)需要對(duì)輸入信號(hào)的大小進(jìn)行判斷,選擇合適的增益。
當(dāng)檢測(cè)到輸入信號(hào)時(shí)先設(shè)置增益為一,芯片對(duì)輸入信號(hào)進(jìn)行A/D轉(zhuǎn)換,得到一個(gè)16為的二進(jìn)制轉(zhuǎn)換數(shù)值。然后對(duì)轉(zhuǎn)換值的大小進(jìn)行判斷。若轉(zhuǎn)換值在
1—10V之間,則對(duì)信號(hào)放大1倍。若在0.1—1V之間,則對(duì)信號(hào)放大8倍。若在0.01—0.1之間,則對(duì)信號(hào)放大64倍。若在0到0.01之間,則對(duì)信號(hào)放大128倍。當(dāng)放大倍數(shù)確定后,先對(duì)增益進(jìn)行設(shè)置,根據(jù)程序選擇合適的放大倍數(shù),然后將放大后的信號(hào)進(jìn)行A/D轉(zhuǎn)換。放大后的信號(hào)更加接近A/D的滿標(biāo)度電壓,充分利用A/D的精度。
   在進(jìn)行芯片的增益設(shè)置時(shí)需要用到芯片內(nèi)部的各種寄存器。A/D7705的工作方式,增益選擇等設(shè)置都是通過改變寄存器內(nèi)的參數(shù)來實(shí)現(xiàn)的。
AD7705/7706 片內(nèi)包括 8 個(gè)寄存器,這些寄存器通過器件的串行口訪問。第一個(gè)是通信寄存器,它管理通道選擇,決定下一個(gè)操作是讀操作還是寫操作,以及下一次讀或?qū)懩囊粋(gè)寄存器。 所有與器件的通信必須從寫入通信寄存器開始。上電或復(fù)位后,器件等待在通信寄存器上進(jìn)行一次寫操作。這一寫到通信寄存器的數(shù)據(jù)決定下一次操作是讀還是寫,同時(shí)決定這次讀操作或?qū)懖?作在哪個(gè)寄存器上發(fā)生。所以,寫任何其它寄存器首先要寫通信寄存器,然后才能寫選定的寄存器。所有的寄存器(包括通信寄存器本身和輸出數(shù)據(jù)寄存器)進(jìn)行讀操作之前,必須先寫通信寄存器,然后才能讀選定的寄存器。此外,通信寄存器還控制等待模式和通道選擇,此外  DRDY狀態(tài) 也可以從通信寄存器上讀出。
所以在對(duì)增益進(jìn)行設(shè)置前需要先對(duì)通信寄存器進(jìn)行寫操作。
file:///C:/Temp/Temp/msohtmlclip1/01/clip_image007.png表4.1 通信寄存器

                   表4.2 設(shè)置寄存器



file:///C:/Temp/Temp/msohtmlclip1/01/clip_image008.png



先對(duì)通信寄存器寫入0x38,選擇數(shù)據(jù)寄存器,選擇通道一,下一步進(jìn)行讀操作。然后調(diào)用編寫的A/D7705讀函數(shù)。讀取轉(zhuǎn)換結(jié)果輸出端口DOUT。然后對(duì)轉(zhuǎn)換結(jié)果的大小進(jìn)行判斷。再對(duì)通信寄存器進(jìn)行操作,寫入0x10。選擇設(shè)置寄存器,選擇通道一,下一步進(jìn)行寫操作。根據(jù)對(duì)轉(zhuǎn)換結(jié)果大小的判斷,對(duì)設(shè)置寄存器寫入數(shù)據(jù)。如第一次轉(zhuǎn)換值在1—10V,則增益選擇應(yīng)為一倍。在設(shè)置寄存器中寫入0x46。選擇自校準(zhǔn)模式,增益設(shè)置為一倍,單極性工作模式,緩沖模式。將下一次的A/D轉(zhuǎn)換設(shè)置合理的增益,使下一次的A/D轉(zhuǎn)換輸入盡量達(dá)到滿標(biāo)度值,增加精度。

4.3 A/D轉(zhuǎn)換
在選擇合適的增益后需要對(duì)放大后的電壓進(jìn)行A/D轉(zhuǎn)換。A/D轉(zhuǎn)換是由A/D7705模塊內(nèi)部的ε—Δ調(diào)制器完成。
AD7705是一種16位A/D轉(zhuǎn)換器,可以用于測(cè)量低頻模擬信號(hào)。當(dāng)電源電壓為5V、基準(zhǔn)電壓為2.5V時(shí),AD7705可直接接收0-2.5V擺幅范圍的單極性信號(hào)和-2.5V-2.5V范圍內(nèi)的雙極型信號(hào)。器件帶有增益可編程放大器,可選擇1、2、4、8、16、32、64、128等8中增益之一,通過軟件編程可以直接測(cè)量傳感器輸出的各種微小的信號(hào),并將不同幅度范圍的各種輸入信號(hào)放大到接近AD轉(zhuǎn)換器的滿量程電壓進(jìn)行AD 轉(zhuǎn)換。
AD7705是應(yīng)用于低頻測(cè)量的2/3通道的模擬前端。該器件可以接受直接來自傳感器的低電平的輸入信號(hào),然后產(chǎn)生串行的數(shù)字輸出。利用Σ-∆轉(zhuǎn)換技術(shù)實(shí)現(xiàn)了16位無丟失代碼性能。選定的輸入信號(hào)被送到一個(gè)基于模擬調(diào)制器的增益可編程專用前端。片內(nèi)數(shù)字濾波器處理調(diào)制器的輸出信號(hào)。通過片內(nèi)控制寄存器可調(diào)節(jié)濾波器的截止點(diǎn)和輸出更新速率,從而對(duì)數(shù)字濾波器的第一個(gè)陷波進(jìn)行編程。AD7705/7706只需2.7~3.3V或4.75~5.25V單電源。AD7705是雙通道全差分模擬輸入,它帶有一個(gè)差分基準(zhǔn)輸入。當(dāng)電源電壓為5V、基準(zhǔn)電壓為2.5V時(shí),這種器件都可將輸入信號(hào)范圍從0~+20mV到0~+2.5V的信號(hào)進(jìn)行處理。還可處理±20mV~±2.5V的雙極性輸入信號(hào),對(duì)于AD7705是以AIN(-)輸入端為參考點(diǎn),而AD7706是COMMON輸入端。當(dāng)電源電壓為3V、基準(zhǔn)電壓為1.225V時(shí),可處理0~+10mV到0~+1.225V的單極性輸入信號(hào),它的雙極性輸入信號(hào)范圍是±10mV到±1.225V。因此,AD7705可以實(shí)現(xiàn)2/3通道系統(tǒng)所有信號(hào)的調(diào)理和轉(zhuǎn)換。A/D7705是用于智能系統(tǒng)、微控制器系統(tǒng)和基于DSP系統(tǒng)的理想產(chǎn)品,其串行接口可配置為三線接口。增益值、信號(hào)極性以及更新速率的選擇可用串行輸入口由軟件來配置。該器件還包括自校準(zhǔn)和系統(tǒng)校準(zhǔn)選項(xiàng),以消除器件本身或系統(tǒng)的增益和偏移誤差。CMOS結(jié)構(gòu)確保器件具有極低功耗,掉電模式減少等待時(shí)的功耗至20μW(典型值)。AD7705采用16腳塑料雙列直插(DIP)和16腳寬體(0.3英寸)SOIC封裝和16腳TSSOP封裝。
file:///C:/Temp/Temp/msohtmlclip1/01/clip_image010.jpg
圖4.4 A/D7705引腳分配圖
A/D7705是完整的16位低成本Σ-Δ調(diào)制器,用于直流測(cè)量和低頻交流測(cè)量應(yīng)用,其具有低功耗(3 V時(shí)最大1m W)特性。
A/D7705擁有兩個(gè)差分通道,在實(shí)際設(shè)置時(shí)由于只需要一個(gè)輸入電壓,所以固定選擇通道一,每次設(shè)置通信寄存器時(shí)將最后兩位設(shè)置為00。當(dāng)電壓經(jīng)過A/D7705模塊內(nèi)的PGA進(jìn)行放大后,進(jìn)入Σ-Δ調(diào)制器進(jìn)行轉(zhuǎn)換。然后由程序讀函數(shù)(AD7705_Read())讀DOUT(轉(zhuǎn)換結(jié)果輸出端),得到一個(gè)16為的二進(jìn)制數(shù)。將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)。



  4.4 單片機(jī)
本次課程設(shè)計(jì)中還用到了C51單片機(jī)。單片機(jī)的主要作用是對(duì)A/D7705芯片進(jìn)行控制,消除系統(tǒng)誤差和進(jìn)行串口通訊將數(shù)據(jù)發(fā)送到計(jì)算機(jī)。將編寫好的程序?qū)雴纹瑱C(jī)中,通過程序給芯片寫入各種數(shù)據(jù),引導(dǎo)芯片動(dòng)作,得到A/D轉(zhuǎn)換的結(jié)果。然后對(duì)數(shù)據(jù)進(jìn)行系統(tǒng)誤差處理。系統(tǒng)誤差處理是通過誤差模型校正系統(tǒng)誤差。假設(shè)實(shí)際值x與測(cè)量值y是線性關(guān)系,建立系統(tǒng)誤差模型x=a*y+b。然后將輸入值接0和輸入最大值10,然后用萬用表測(cè)出輸出輸出值,求出a和b。然后將A/D轉(zhuǎn)換值帶入公式,進(jìn)行系統(tǒng)誤差校正。
進(jìn)行系統(tǒng)誤差校正后需要將轉(zhuǎn)換數(shù)據(jù)發(fā)送到計(jì)算機(jī)中,但為了充分利用A/D的轉(zhuǎn)換精度,輸入電壓通過PGA進(jìn)行過放大。所以數(shù)據(jù)在發(fā)送前需要除以放大的倍數(shù),然后再將數(shù)據(jù)進(jìn)行發(fā)送。
在數(shù)據(jù)發(fā)送時(shí)要用到串口通訊,所以在單片機(jī)程序中需要對(duì)串口進(jìn)行設(shè)置。設(shè)置SCON 和TMOD 寄存器。允許串口接收,設(shè)置串口工作方式等。選定工作的定時(shí)器,選擇定時(shí)器工作方式。然后給低八位和高八位賦值,設(shè)置波特率。完成對(duì)串口的設(shè)置。



第五章 LABVIEW軟件設(shè)計(jì)5.1 串口通訊
單片機(jī)與計(jì)算機(jī)的通訊用VISA來完成,VISA是虛擬儀器軟件體系結(jié)構(gòu)的縮寫,實(shí)質(zhì)上是一個(gè)I/O口軟件庫及其規(guī)范的總稱。VISA是應(yīng)用于儀器編程的標(biāo)準(zhǔn)I/0應(yīng)用程序接口,是工業(yè)界通用的儀器驅(qū)動(dòng)器標(biāo)準(zhǔn)API(應(yīng)用程序接口),采用面向?qū)ο缶幊,具有很好的兼容性、擴(kuò)展性和獨(dú)立性。用戶可用一個(gè)API控制包括VXI、GPIB及串口儀器在內(nèi)的不同種類的儀器。它還支持多平臺(tái)工作、多接口控制,是一個(gè)多類型的函數(shù)庫。在LabVIEW中編寫的VISA接口程序,當(dāng)外部設(shè)備變更時(shí),只需要更換幾個(gè)程序模塊即可使用,簡(jiǎn)單方便而且開發(fā)效率高。在LabVIEW 中利用VISA節(jié)點(diǎn)進(jìn)行串行通信編程。





file:///C:/Temp/Temp/msohtmlclip1/01/clip_image011.png










圖5.1 串口配置
在VISA資源名稱端連接串口選擇輸入端口,方便在運(yùn)行程序時(shí)選擇USB接口。配置串口時(shí)還連接了波特率和數(shù)據(jù)比特輸入控件,方便對(duì)VISA串口進(jìn)行配置。在VISA讀取時(shí)需要對(duì)每次讀取的字節(jié)數(shù)進(jìn)行設(shè)置。在單片機(jī)程序中,波特率設(shè)置為9600,每次發(fā)送兩個(gè)數(shù)據(jù),每個(gè)數(shù)據(jù)為8比特,。所以在LABVIEW程序中,設(shè)置要與單片機(jī)保持一致,保證通訊的正常進(jìn)行,得到正確的數(shù)據(jù)。如果需要對(duì)數(shù)據(jù)通訊方面進(jìn)行更改時(shí),需要對(duì)單片機(jī)程序和LABVIEW程序都進(jìn)行更改,保證設(shè)置的匹配。

5.2 報(bào)警模塊
報(bào)警模塊是一個(gè)簡(jiǎn)單的比較程序,串口讀取的電壓與設(shè)置的報(bào)警電壓值進(jìn)行比較,若串口的電壓值較大,則“大于等于”輸出的結(jié)果為真,報(bào)警燈的顏色改變,蜂鳴器報(bào)警。設(shè)置蜂鳴器報(bào)警頻率為2Hz,每次持續(xù)時(shí)間為5ms。
file:///C:/Temp/Temp/msohtmlclip1/01/clip_image012.png

                       圖5.2 報(bào)警模塊
5.3 存入數(shù)據(jù)
存入數(shù)據(jù)時(shí)先在前面板選擇文件存入路徑,點(diǎn)擊存入“數(shù)據(jù)按鈕”,開始存入數(shù)據(jù)。按鈕的屬性設(shè)置為釋放時(shí)轉(zhuǎn)換,所以當(dāng)點(diǎn)擊按鈕后,電壓數(shù)據(jù)會(huì)不斷存入文件中,再次點(diǎn)擊按鈕后停止。





file:///C:/Temp/Temp/msohtmlclip1/01/clip_image013.png


file:///C:/Temp/Temp/msohtmlclip1/01/clip_image014.png




圖5.3 存入數(shù)據(jù)(后面板)                      圖5.4 存入數(shù)據(jù)(前面板)
5.4 數(shù)據(jù)顯示
數(shù)據(jù)顯示時(shí)應(yīng)用了數(shù)值顯示控件以數(shù)字的形式顯示電壓,還有一個(gè)波形圖表顯示控件,顯示電壓值與時(shí)間的變化關(guān)系。前面板還有一個(gè)儀表顯示控件,用指針的形式顯示數(shù)值。



file:///C:/Temp/Temp/msohtmlclip1/01/clip_image016.jpg










圖5.5 數(shù)據(jù)顯示(前面板)



file:///C:/Temp/Temp/msohtmlclip1/01/clip_image018.jpg










圖5.6 數(shù)據(jù)顯示(后面板)
進(jìn)行平均值濾波后的數(shù)據(jù)先進(jìn)入“判定范圍并強(qiáng)制轉(zhuǎn)換”控件,判斷電壓的范圍。因?yàn)槊總(gè)判斷控件的上下限判斷范圍不重合,所以四個(gè)判斷控件中只有一個(gè)判斷控件的輸出結(jié)果為真,其余輸出結(jié)果為假且只有輸出為“真”的判斷控件對(duì)應(yīng)的圓形指示燈會(huì)亮。四個(gè)控件的輸出結(jié)果進(jìn)入條件結(jié)構(gòu)。只有一個(gè)條件結(jié)構(gòu)執(zhí)行“真”分支,將電壓數(shù)據(jù)乘以對(duì)應(yīng)的倍數(shù)輸出。執(zhí)行“假”分支的條件結(jié)構(gòu)都會(huì)輸出0。然后將所有條件結(jié)構(gòu)輸出的結(jié)果相加,輸入儀表顯示控件,用指針顯示。由于儀表顯示控件是顯示范圍只能設(shè)置一個(gè)范圍。所以將每個(gè)量程范圍內(nèi)的電壓值乘以合適的倍數(shù)都轉(zhuǎn)化到0-10V的范圍顯示。實(shí)際值根據(jù)哪一個(gè)圓形指示燈亮判斷在那個(gè)范圍。









第六章測(cè)量誤差處理6.1 系統(tǒng)誤差處理
測(cè)量數(shù)據(jù)的系統(tǒng)誤差處理在單片機(jī)程序內(nèi)進(jìn)行。系統(tǒng)誤差處理是通過誤差模型校正系統(tǒng)誤差。假設(shè)實(shí)際值x與測(cè)量值y是線性關(guān)系,建立系統(tǒng)誤差模型x=a*y+b。然后將輸入值接0和輸入最大值10,然后用萬用表測(cè)出輸出輸出值,求出a和b。然后將A/D轉(zhuǎn)換值帶入公式,進(jìn)行系統(tǒng)誤差校正。   

6.2 隨機(jī)誤差處理
隨機(jī)誤差處理采用算數(shù)平均值濾波的方法處理。這種濾波方法的實(shí)質(zhì)是把N個(gè)數(shù)據(jù)的值相加,再求其平均值。顯然N的值越大,結(jié)果越準(zhǔn)確,但計(jì)算的時(shí)間越長(zhǎng)。這種濾波方法適用于對(duì)周期脈動(dòng)的數(shù)據(jù)進(jìn)行平滑加工,但對(duì)脈沖性干擾的平滑作用不理想,不宜用于脈沖性干擾較嚴(yán)重的場(chǎng)合。在對(duì)電壓值進(jìn)行平均值濾波時(shí),采用N為5,每五個(gè)數(shù)據(jù)計(jì)算平均值輸出,對(duì)隨機(jī)誤差進(jìn)行處理。



file:///C:/Temp/Temp/msohtmlclip1/01/clip_image020.jpg









圖5.7 隨機(jī)誤差處理
第七章小結(jié)
通過此次課程設(shè)計(jì),使我更加扎實(shí)的掌握了有關(guān)智能儀器方面的知識(shí),知道了還有許多東西我們沒有學(xué)到。在設(shè)計(jì)過程中雖然遇到了一些問題,但經(jīng)過一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我在這方面的知識(shí)欠缺和經(jīng)驗(yàn)不足。實(shí)踐出真知,通過親自動(dòng)手編程,使我們掌握的知識(shí)不再是紙上談兵。在課程設(shè)計(jì)過程中,我們不斷發(fā)現(xiàn)錯(cuò)誤,不斷改正,不斷領(lǐng)悟,不斷獲取。最終的檢測(cè)調(diào)試環(huán)節(jié),本身就是在踐行過而能改,善莫大焉的知行觀。這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多問題,最后在查找資料后,許多問題終于游逆而解,但也有的沒有弄懂。在今后社會(huì)的發(fā)展和學(xué)習(xí)實(shí)踐過程中,一定要不懈努力,不能遇到問題就想到要退縮,一定要不厭其煩的發(fā)現(xiàn)問題所在,然后一一進(jìn)行解決,只有這樣,才能成功的做成想做的事,才能在今后的道路上劈荊斬棘,而不是知難而退,那樣永遠(yuǎn)不可能收獲成功,收獲喜悅,也永遠(yuǎn)不可能得到社會(huì)及他人對(duì)你的認(rèn)可!















參考文獻(xiàn)
[1] 微機(jī)原理與接口技術(shù)[M]/周鵬編著.--機(jī)械工業(yè)出版社.2001
[2] 智能儀器設(shè)計(jì)基礎(chǔ)/史健芳等編著.—2版.—北京:電子工業(yè)出版社,2012.9
[3]虛擬儀器測(cè)試技術(shù)/屈有安,陳雪敏主編.—北京:北京理工大學(xué)出版社,2016.1
[4] 智能化測(cè)量控制儀表原理與設(shè)計(jì)(第二版)/徐愛均編著.--北京:北京航空航天大學(xué)出版.2004.3
[5] 智能儀器原理及設(shè)計(jì)技術(shù)/劉大茂編著.—國(guó)防工業(yè)出版社.2014.5





















附錄
LABVIEW前面板程序:



file:///C:/Temp/Temp/msohtmlclip1/01/clip_image022.jpg














LABVIEW后面板程序:



file:///C:/Temp/Temp/msohtmlclip1/01/clip_image024.jpg













單片機(jī)程序:
#include<reg51.h>  
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int         

sbit CS=P1^0;            //AD7705使能端
sbit DIN=P1^1;                  //單片機(jī)給AD7705數(shù)據(jù)輸入端
sbit DRDY=P1^2;               //AD7705邏輯輸出端,用于控制結(jié)果是否輸出

sbit RST=P1^3;          //AD7705復(fù)位端
sbit SCLK=P1^4;                 //AD7705外部時(shí)鐘信號(hào)輸入端
sbit DOUT=P1^5;              //AD7705模數(shù)轉(zhuǎn)換結(jié)果輸出端

uchar tab[]={0x00,0x00};          //串口輸出數(shù)組
void delay1ms(uint z);              //延時(shí)函數(shù),最小延時(shí)1ms
void AD7705_Reset();               //AD7705復(fù)位函數(shù)
void AD7705_Init();   //AD7705初始化函數(shù),包括各種寄存器設(shè)置與初始化
void AD7705_Write(uchar dat);                          //AD7705的DIN端口數(shù)據(jù)輸入函數(shù)
uint AD7705_Read();                                                      //AD7705的DOUT端口讀取模數(shù)轉(zhuǎn)換數(shù)據(jù)的函數(shù)
void UART_Init();                                   //串口初始化函數(shù)
void UART_SendByte(uchar dat);                       //串口發(fā)送1字節(jié)函數(shù)
float AD_adjust(uint num_ad);            //系統(tǒng)誤差模型矯正函數(shù)

uint AD_choose(uint num);                             //量程選擇函數(shù)
uint  deal(uintflags,uint Nums);
/*主函數(shù)設(shè)計(jì)*/
void main()      
{           
            uintFLAG;
            uintnData;
            UART_Init();          //串口初始化
            AD7705_Reset();            //端口復(fù)位與函數(shù)復(fù)位共同執(zhí)行保證芯片正常運(yùn)行
            AD7705_Init();         //AD7705初始化函數(shù),包括各種寄存器設(shè)置與初始化
            delay1ms(500);               
    while(1)   
    {      
                   while(DRDY);                               //當(dāng)DRDY置1時(shí),即數(shù)據(jù)轉(zhuǎn)換結(jié)束后開始運(yùn)行下一步程序 ,DRDY=0表示數(shù)據(jù)寄存器中的數(shù)據(jù)可讀
       AD7705_Write(0x38);  //寫通信寄存器,選擇下一步讀、通道CH
                   nData=AD7705_Read();
                   nData=AD_adjust(nData);                //系統(tǒng)誤差處理
                   /**********************************量程選擇處理****************/
                   FLAG=AD_choose(nData);
                   /**********************************量程選擇之后再次讀數(shù)據(jù)*******/
                   while(DRDY);
                   AD7705_Write(0x38);  //寫通信寄存器,選擇下一步讀、通道CH
                   nData=AD7705_Read();
                   nData=deal(FLAG,nData);
                   nData=AD_adjust(nData);                //系統(tǒng)誤差處理

                   tab[0]=nData/256;           //通過數(shù)據(jù)讀取函數(shù)將16位數(shù)據(jù)拆成2個(gè)8位數(shù)據(jù)賦給數(shù)組tab[]
                   tab[1]=nData%256;
                   UART_SendByte(tab[0]);           //將數(shù)據(jù)的兩個(gè)位數(shù)分別通過串口函數(shù)傳輸給電腦形成16位數(shù)
                   UART_SendByte(tab[1]);
                   while(!DRDY);   //
    }  
}

/*延時(shí)函數(shù)設(shè)計(jì),最小延時(shí)1ms*/
void delay1ms(uint z)                //延時(shí)z ms
{
            uintx,y;
            for(x=z;x>0;x--)
                   for(y=115;y>0;y--);
}

/*AD7705復(fù)位函數(shù)設(shè)計(jì),通過給DIN輸入持續(xù)32個(gè)脈沖周期(SCLK)以上的高電平將復(fù)位AD7705的數(shù)字接口,
復(fù)位之后要等待500us以上才能訪問AD7705芯片,這種復(fù)位方式不會(huì)影響AD7705內(nèi)部的任何寄存器,
所有的寄存器將保持復(fù)位之前的內(nèi)容,這種操作可以防止AD7705出現(xiàn)端口迷失*/
void AD7705_Reset()
{
            uchari;
            CS=0;
            RST=1;   
    DRDY=1;//設(shè)置DRDY為輸入         
    DOUT=1;//設(shè)置DOUT為輸入        
    DIN=1;     
   for(i=0;i<40;i++)//DIN口高電平持續(xù)至少32個(gè)時(shí)鐘后芯片復(fù)位        
    {  
        SCLK=0;   
        _nop_();   
        SCLK=1;   
        _nop_();   
    }  
}
/*AD7705初始化函數(shù)設(shè)計(jì)*/
void AD7705_Init()  //gain為增益的指數(shù)值,范圍0-7,代表1、2、4、8、16、32、64、128倍;CH為通道,1為通道1,2為通道2
{

            AD7705_Write(0x20);            //寫通信寄存器,選擇通道一,選擇下一步寫時(shí)鐘寄存器
            AD7705_Write(0x08);            //晶振二分頻,選擇輸出更新率分別為20Hz(0x00),25Hz(0x01),100Hz(0x02),200Hz(0x03)————默認(rèn)輸出更新率為20Hz
            AD7705_Write(0x10);            //寫通信寄存器,選擇通道一,選擇下一步寫設(shè)置寄存器
            AD7705_Write(0x46);   //*****************************
            //單極性,自校準(zhǔn),有緩沖,增益指數(shù)值
}
/*AD7705的DIN端口指令輸入函數(shù)設(shè)計(jì)*/         
void AD7705_Write(uchar dat)        //設(shè)定形參為8位數(shù)據(jù)
{         
    uchar i;   
    SCLK=1;   
   for(i=8;i>0;i--)  //將8位形參從高到低按位分8次輸給AD7705
    {      
        SCLK=0;                       //時(shí)鐘脈沖SCLK=0時(shí)才能給DIN輸入數(shù)據(jù)使DIN端發(fā)生改變
        _nop_();   
       if(dat&0x80)   
           DIN=1;     
        else  
           DIN=0;     
        _nop_();   
        SCLK=1;                       //SCLK=1時(shí)允許DIN的數(shù)據(jù)寫入到TM7705中
        _nop_();   
       dat<<=1;  
    }  
    DIN=1;                 //寫入結(jié)束使DIN=1和SCLK=1以防端口迷失
    SCLK=1;   
}           
/*AD7705的DOUT端口數(shù)據(jù)讀取函數(shù)設(shè)計(jì)*/
uint AD7705_Read()                  //返回一個(gè)8位的數(shù)據(jù)轉(zhuǎn)換結(jié)果
{         
        uchar i;
            uintdd=0;
    SCLK=1;  
   for(i=0;i<16;i++)       //分八次將8位數(shù)據(jù)結(jié)果從高位到低位逐位讀取
    {  
        SCLK=0;                       //SCLK=0允許DOUT端口數(shù)據(jù)發(fā)生改變
        _nop_();   
       dd=dd<<1;            
        if(DOUT)  
                 dd|=0x01;         
        SCLK=1;              //SLCK=1時(shí)使DOUT端口數(shù)據(jù)穩(wěn)定
        _nop_();   
    }      
    SCLK=1;          //讀出結(jié)束使SCLK=1以防端口迷失   
    return dd;                    //返回函數(shù)數(shù)據(jù)
}
void UART_Init() //串口初始化
{
            SCON=0x50;//設(shè)置串口方式1且允許串口接收。串口工作方式一,8位異步工作方式,波特率可變,由定時(shí)器設(shè)置
            TMOD=0x20;//設(shè)置定時(shí)器T1,工作方式2,八位自動(dòng)裝入計(jì)數(shù)初值工作方式。
            TL1=0xfd;
            TH1=0xfd;// TH1:重裝值9600波特率晶振11.0592MHz
            TR1=1;//   TR1=1,打開定時(shí)器T1
}
void UART_SendByte(uchar dat)
{
            SBUF=dat;               //將八位數(shù)據(jù)dat直接賦值給SBUF寄存器
            while(!TI);               //串口發(fā)送中斷產(chǎn)生時(shí)TI=1,否則TI=0;
            TI=0;                 //串口發(fā)送成功后必須將TI軟件置0
}
uint  deal(uintflags,uint Nums)
{
            if(flags==1)
            {
                   Nums=Nums/1.0;
            }
            elseif(flags==2)
            {
                   Nums=Nums/8.0;
            }
            elseif(flags==3)
            {
                   Nums=Nums/64.0;
            }
            elseif(flags==4)
            {
                   Nums=Nums/128.0;
            }
            returnNums;
}


float AD_adjust(uint num_ad)           //系統(tǒng)誤差模型矯正函數(shù)
{
            floatad_vo;

            ad_vo=4.88*num_ad/4.84125952;
            returnad_vo;
}
uint AD_choose(uint num)                              //量程選擇函數(shù)
{
            uintflag=0;                                                           //量程轉(zhuǎn)換標(biāo)志
            if(num>1&&num<=10)
            {
                    AD7705_Write(0x10);   //寫通信寄存器,選擇通道一,選擇下一步寫設(shè)置寄存器
                    AD7705_Write(0x46);                       //放大倍數(shù)1倍
                    flag=1;
            }
            elseif(num>0.1&&num<=1)
            {
                    AD7705_Write(0x10);   //寫通信寄存器,選擇通道一,選擇下一步寫設(shè)置寄存器
                    AD7705_Write(0x5e);                       //放大倍數(shù)8倍
                    flag=2;
            }
            elseif(num>0.01&&num<=0.1)
            {
                   AD7705_Write(0x10);      //寫通信寄存器,選擇通道一,選擇下一步寫設(shè)置寄存器
                   AD7705_Write(0x76);                         //放大倍數(shù)64倍
                   flag=3;
            }
            elseif(num>=0&&num<=0.01)
            {
                   AD7705_Write(0x10);      //寫通信寄存器,選擇通道一,選擇下一步寫設(shè)置寄存器
                   AD7705_Write(0x7e);                         //放大倍數(shù)128倍
                   flag=4;
            }
            returnflag;
}


回復(fù)

使用道具 舉報(bào)

ID:311928 發(fā)表于 2018-5-1 10:45 | 顯示全部樓層
感謝,很有幫助
回復(fù)

使用道具 舉報(bào)

ID:366390 發(fā)表于 2018-7-6 16:26 | 顯示全部樓層
圖片打不開
回復(fù)

使用道具 舉報(bào)

ID:427971 發(fā)表于 2019-6-20 14:33 | 顯示全部樓層
運(yùn)行后串口接收不到,改了改又亂碼
回復(fù)

使用道具 舉報(bào)

ID:655863 發(fā)表于 2019-12-21 22:54 | 顯示全部樓層
到stm32怎么改
回復(fù)

使用道具 舉報(bào)

ID:663503 發(fā)表于 2023-3-9 22:31 | 顯示全部樓層
之前的一些圖片看不到了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表