本文是以簡易數字歐姆表的設計為研究內容,本系統主要包括三大模塊:轉換模塊、數據處理模塊及顯示模塊。其中,AD轉換采用ADC0808對輸入的模擬信號進行轉換,控制核心AT89C51再對轉換的結果進行運算處理,最后驅動輸出裝置LED顯示數字電阻值信號。
附件包含原理圖,完整程序,PCB布局。
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (16.73 KB, 下載次數: 104)
下載附件
2019-3-16 01:48 上傳
0.png (40.51 KB, 下載次數: 104)
下載附件
2019-3-16 01:48 上傳
0.png (9.11 KB, 下載次數: 108)
下載附件
2019-3-16 01:49 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (17.66 KB, 下載次數: 120)
下載附件
2019-3-16 01:49 上傳
1 引言
2 方案論證
3 系統設計
3.1 系統要求
3.2 總體設計
4 硬件設計
4.1 主控模塊
4.1.1 時鐘電路
4.1.2 復位電路
4.1.3 單片機電路
4.2 從控模塊
4.2.1 被測電阻電壓測量電路
4.2.2 模數ADC轉換電路
4.2.3 數碼管顯示電路
5 軟件設計
5.1 軟件開發語言
5.2 系統開發工具的選擇
5.3 主控單片機軟件設計
5.3.1 主控單片機整體流程圖
5.3.2 單片機模塊流程圖
5.3.3 ADC0809模數轉換模塊流程圖
6 系統組裝調試
6.1 調試儀器
6.2 調試方法
6.3 調試步驟
7 數據測試及分析
7.1 仿真軟件下調試
7.2 實際歐姆表調試
8 結論
引言數字歐姆表,它是采用數字化測量技術,把連續的模擬量轉換成不連續、離散的數字形式并加以顯示的儀表。由于數字式儀器具有讀數準確方便、精度高、誤差小、測量速度快等特而得到廣泛應用。 傳統的指針式刻度歐姆表功能單一,精度低,容易引起視差和視覺疲勞,而采用單片機的數字歐姆表,將連續的模擬量如直流電壓轉換成不連續的離散的數字形式并加以顯示,從而精度高、抗干擾能力強,可擴展性強、集成方便,還可與PC實時通信。數字歐姆表是以數字電壓表為核心,可以擴展成各種通用數字儀表、專用數字儀表及各種非電量的數字化儀表。目前,由各種單片機和AD轉換器構成的數字歐姆表作全面深入的了解是很有必要的。 近年來,隨著半導體技術、集成電路(IC)和微處理器技術的發展,數字電路和數字化測量技術也有了巨大的進步,從而促使了數字歐姆表的快速發展,并不斷出現新的類型。 目前,數字歐姆表的內部核心部件是AD轉換器,轉換的精度很大程度上影響著數字歐姆表表的準確度,因而,以后數字歐姆表的發展就著眼在高精度和低成本這兩個方面 本文是以簡易數字歐姆表的設計為研究內容,本系統主要包括三大模塊:轉換模塊、數據處理模塊及顯示模塊。其中,AD轉換采用ADC0808對輸入的模擬信號進行轉換,控制核心AT89C51再對轉換的結果進行運算處理,最后驅動輸出裝置LED顯示數字電阻值信號
2 方案論證為了用數字的辦法測量電阻,首先需要將被測電阻值以某種方式輸入AD轉換器。根據測量原理的不同,其輸入方法有很多,如直接法、電橋法和充放電法。通過網上查找資料,得到以下幾種具體方案: 方案一 電壓比例輸入法 電壓經過基準電阻R1和被測電阻Rx接到地,通過OUT輸出被測電阻Rx上的電壓,經過ADC0809的轉換,最后運用單片機根據電壓比例計算得出被測電阻,最后通過數碼管顯示出來。 方案二 通過555單穩態觸發器轉換
利用單穩或電容充放電規律等,可以把被測電阻量的大小轉換成脈沖的寬窄,即脈沖的寬度Tx與Rx成正比。只要把此脈沖和頻率固定不變的方波相與,便可以得到計數脈沖,將它送給數字顯示器。如果時鐘脈沖的頻率等參數合適,便可實現測量電阻。 方案三 恒流源電路輸入法 運用TL431ACLPR提供恒定電壓,用恒定電壓除以標準電阻可以使ADOP07AH得到想要的恒定電流,因為被測電阻和標準電阻串聯,電流相等,固只需要測出待測電阻得電壓,用電壓除以電流即可得到被測電阻。 方案比較 方案一 本方案原理較易理解,實現也很方便簡單,成本低,測量精確,而且利用標準電阻得更換讓測量更具有靈活性。 方案二 用555構成的單穩態電路在正常工作條件下輸出脈沖的寬度Tx與Rx的函數關系是:Tx=R*Cx*ln3,所產生的時間誤差可能達到百分之五,再加上其他原因產生的誤差,測量是的時間延遲太大。 方案三 運用恒流源電路測量電阻,測量精確,但實現比方案一難,成本高。 所以本實驗選取第一種方案。 3 系統設計3.1 系統要求運用C51單片機設計一個測量電阻的歐姆表,測量電阻范圍在10K~100K之間,測量誤差不超過5%,盡可能的提高精確度。 3.2 總體設計
時鐘電路和復位電路提供89C51單片機工作,ADC0809測得待測電阻的電壓之后發送給單片機,單片機經過數據處理得到被測電阻阻值,經I/O口輸出給數碼管顯示。 4 硬件設計
4.1 主控模塊
4.1.1 時鐘電路XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅動器件,XTAL2應不接。因為一個機器周期含有6個狀態周期,而每個狀態周期為2個振蕩周期,所以一個機器周期共有12個振蕩周期,如果外接石英晶體振蕩器的振蕩頻率為12MHZ,一個振蕩周期為1/12us,故而一個機器周期為1us。 
如圖4-1所示為時鐘電路。圖4-1-1 4.1.2復位電路復位方法一般有上電自動復位和外部按鍵手動復位,單片機在時鐘電路工作以后,在RESET端持續給出2個機器周期的高電平時就可以完成復位操作。例如使用晶振頻率為12MHz時,則復位信號持續時間應不小于2us。本設計采用的是外部手動按鍵復位電路。 如圖4-2所示為復位電路 
圖4-1-2 4.1.3 單片機電路STC89C51RC是采用8051核的ISP(In System Programming)在系統可編程芯片,最高工作時鐘頻率為80MHz,片內含4K Bytes的可反復擦寫1000次的Flash只讀程序存儲器,器件兼容標準MCS-51指令系統及80C51引腳結構,芯片內集成了通用8位中央處理器和ISP Flash存儲單元,具有在系統可編程(ISP)特性,配合PC端的控制程序即可將用戶的程序代碼下載進單片機內部,省去了購買通用編程器,而且速度更快。STC89C51RC系列單片機是單時鐘/機器周期(1T)的兼容8051 內核單片機,是高速/ 低功耗的新一代8051 單片機,全新的流水線/精簡指令集結構,內部集成MAX810 專用復位電路

如圖4-1-3所示圖4-1-3 4.2 從控模塊
4.2.1 被測電阻電壓測量電路
如圖4-1-4所示為被測電阻電壓測量。電壓經過已知電阻和被測電阻Rx接到地。通過OUT輸出被測電阻Rx上的電壓。送到ADC0809的IN0口。圖4-1-4 4.2.2 模數ADC轉換電路本設計采用ADC0809作為模數轉換芯片,ADC0809是美國國家半導體公司生產的CMOS工藝8通道,8位逐次逼近式A/D模數轉換器。其內部有一個8通道多路開關,它可以根據地址碼鎖存譯碼后的信號,只選通8路模擬輸入信號中的一個進行A/D轉換。 主要特性: (1)8路輸入通道,8位A/D轉換器,即分辨率為8位。 (2)具有轉換起停控制端。 (3)轉換時間為100μs(時鐘為640KHz時),130μs(時鐘為500KHz時)。 (4)單個+5V電源供電。 (5)模擬輸入電壓范圍0~+5V,不需零點和滿刻度校準。 (6)工作溫度范圍為-40~+85攝氏度。 (7)低功耗,約15mW。 內部結構: ADC0809是CMOS單片型逐次逼近式A/D轉換器,內部結構如圖所示,它由8路模擬開關、地址鎖存與譯碼器、比較器、8位開關樹型A/D轉換器、逐次逼近寄存器、邏輯控制和定時電路組成。 外部結構: 
ADC0809芯片有28條引腳,采用雙列直插式封裝,如圖4-1-5所示。圖4-1-5-1 下面說明各引腳功能: IN0~IN7:8路模擬量輸入端。 2-1~2-8:8位數字量輸出端。 ADDA、ADDB、ADDC:3位地址輸入線,用于選通8路模擬輸入中的一路。 ALE:地址鎖存允許信號,輸入端,產生一個正脈沖以鎖存地址。 START: A/D轉換啟動脈沖輸入端,輸入一個正脈沖(至少100ns寬)使其啟動(脈沖上升沿使0809復位,下降沿啟動A/D轉換)。 EOC: A/D轉換結束信號,輸出端,當A/D轉換結束時,此端輸出一個高電平(轉換期間一直為低電平)。 OE:數據輸出允許信號,輸入端,高電平有效。當A/D轉換結束時,此端輸入一個高電平,才能打開輸出三態門,輸出數字量。 CLK:時鐘脈沖輸入端。要求時鐘頻率不高于640KHz。 REF(+)、REF(-):基準電壓。 Vcc:電源,單一+5V。 GND:地。 電路如圖4-1-5-2所示

圖4-1-5-2 4.2.3 數碼管顯示電路 四位數碼管是一種半導體發光器件,其基本單元是發光二極管。能顯示4個數碼管叫四位數碼管。數碼管按段數分為七段數碼管和八段數碼管,八段數碼管比七段數碼管多一個發光二極管單元(多一個小數點顯示); 按發光二極管單元連接方式分為共陽極數碼管和共陰極數碼管。共陽數碼管是指將所有發光二極管的陽極接到一起形成公共陽極(COM)的數碼管。共陽數碼管在應用時應將公共極COM接到+5V,當某一字段發光二極管的陰極為低電平時,相應字段就點亮。當某一字段的陰極為高電平時,相應字段就不亮。共陰數碼管是指將所有發光二極管的陰極接到一起形成公共陰極(COM)的數碼管。共陰數碼管在應用時應將公共極COM接到地線GND上,當某一字段發光二極管的陽極為高電平時,相應字段就點亮。當某一字段的陽極為低電平時,相應字段就不亮。 
本設計采用四位一體共陰極數碼管,管腳圖如圖4-1-6所示圖4-1-6 5 軟件設計5.1 軟件開發語言本此設計運用C語言進行編程。 5.2 系統開發工具的選擇此次設計采用的軟件有:Keil5、ISIS仿真軟件、stc-isp單片機燒錄軟件。
5.3.2 單片機模塊流程圖
6 系統組裝調試6.1 調試儀器(1)5V直流電源1臺。 (2)萬用表一臺。 (3)100k電位器一個。 (4)keil5。 (5)stc-isp。 (6)ISIS仿真軟件。 6.2 調試方法本設計應用ISIS和keil5軟件,首先根據自己設計的電路圖用ISIS軟件畫出電路模型,然后用keil5軟件編寫程序并進行編譯,在根據錯誤提示修改錯誤直至編譯通過,再生成hex文件,將此文件加到電路圖中的單片機里面進行仿真測試, (1)不斷嘗試換用不同的標準電阻,找到誤差最小時的標準電阻。 (2)修改數據處理的程序,提高測量電阻的精確度。 6.3 調試步驟(1)根據分壓原理,在測量10K~100K電阻時,選用50K標準電阻最合適。 (2)用萬用表測量,將電位器調節至10k (3)用本課程設計的歐姆表測量其電阻。若與10K相差較大,則修改數據處理部分的程序,如:或者擴大0809的電壓測量的精確度(將測得的電壓擴大100倍)來達到擴大電阻的精確度。直至誤差在5%之內,接著在調節電位器到20k,測量其電阻,若誤差在5%之內,則繼續調節電阻,否則修改程序。電阻的取值為10K,20K,30K…100K,直至所有的誤差都在5%之內即可。 (4)在達到5%的精確誤差后,可以通過在單片機中int型最大不超過65536,適當的擴大標準電阻的倍數再縮小,從而提高精確度。 7 數據測試及分析歐姆表原理是基于電壓測電阻,所以最終測得的電壓的精度決定了電阻的精度。由于采用了ADC0809為8位處理器,當輸入電壓為5.00V時,輸出數據值為255(FFH),因此ADC0809最大的數值分辨率為0.0196V(5/255)。這就決定了電壓表的最大分辨率(精度)只能達到0.0196V,從而歐姆表的精度也有了限制。測試時電壓數值的變化一般以0.02V的電壓幅度變化,如果要獲得更高的精度要求,應采用12位、13位的A/D轉換器。 7.1 仿真軟件下調試在ISIS仿真軟件下,用50K的標準電阻下,分別將待測電阻取10K,20K,30K~100K時,得到的數據如表1: 表1 從表中可看出,在ISIS仿真軟件下,試驗所得的電阻值與標準值之間的誤差沒有超過2%,符合設計所要求的誤差不超過5%。而產生誤差的原因,最主要就是電壓的精確度,電壓的精確度越高,測得的電阻阻值越接近標準值。 7.2 實際歐姆表調試實際用本次設計的歐姆表測量表阻值,用50K的標準電阻下,分別將待測電阻取10K,20K,30K~100K時,得到的數據如下表2: 表2 從表中可以看出,實際測得的值和仿真值有所出入,原因是電阻的實際阻值與標稱值會有所偏差,會在標稱值的附近。還有電路也會產生一定的電阻,故會引起誤差,不過誤差并沒有超過3%。
8結論為期兩周設計就此結束,我深切的體會到電路理論與實際相結合的重要。以及用電腦仿真與電腦理論及電路實際的不同。起初剛剛拿到題目時一直在糾結這電阻應該怎么測才能使電阻數值更精確,當時想到了比例法和恒流源的方法,經過網上的查閱資料和與同學得到討論,最終選定了比例法測電阻。經過兩周的努力終于成功地設計出了誤差低于5%的歐姆表,最終在4位一體數碼管上顯示的結果和直接用萬用表測試的結果幾乎一致,誤差完全在合理的范圍。由于儀器而引起的誤差也在誤差范圍內,達到預期設計的目的,設計成功。
本設計參考了單片機原理與接口技術教材中的89C51與ADC0809轉換的接口連線,設計出電路圖的連線,并從中理解了許多基本的知識和接線的方法,在程序的設計與歐姆表調試的過程中遇到了很多的問題,剛開始調試時4位一體的數碼管完全不亮,檢查發現是數碼管引腳接反了,改正后測試數碼管有所顯示,但是只有第一位顯示較亮,其余3位很暗,經過在程序中加長延時的時間,四位數碼管全部點亮。在測試50K的電阻時問題又出現了,顯示的電阻值僅僅只有幾千歐,經過檢查發現實ADC0809的8位輸出接反了,在改正了電路后數碼管顯示正確,最終在測試了多個不同的電阻,數值均正確且在誤差允許的范圍內,本次設計最終調試成功。
單片機程序
- #include<reg51.h>
- sbit CLK=P3^4;
- sbit OE=P3^6;
- sbit ST=P3^0;
- sbit EOC=P3^7;
- unsigned int dian;
- unsigned int diann;
- unsigned int dianya;
- unsigned char code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f};
-
- void delay(unsigned int z)
- {
- while(z--);
- }
-
- void init()
- {
- EA = 1;
- TMOD = 0x02;
- TH0=216;
- TL0=216;
- TR0=1;
- ET0=1;
- ST=0;
- OE=0;
- }
-
- void t0(void) interrupt 1 using 0
- {
- CLK=~CLK;
- }
-
- void ADC_0809()
- {
- unsigned char temp;
- ST=0;
- OE=0;
- ST=1;
- ST=0;
- CLK=1;
- CLK=0;
- CLK=1;
- CLK=0;
- while(0==EOC)
- {
- };
- OE=1;
- temp=P2;
- dian=temp*1.0/255*500;
- diann=(150*dian)/(500-dian);
- dianya=diann*100/3;
- OE=0;
- }
-
- void Vpp_Show()
- {
- unsigned char qian,bai,shi,ge;
- qian=(dianya/1000)%10;
- bai=(dianya/100)%10;
- shi=(dianya/10)%10;
- ge=dianya%10;
-
- P1=0xfe;
- P0=table[qian];
- delay(500);
-
- P1=0xfd;
- P0=table[bai]|0x80;;
- delay(500);
-
- P1=0xfb;
- P0=table[shi];
- delay(500);
-
- P1=0xf7;
- P0=table[ge];
- delay(500);
- }
- void main()
- {init();
- while(1)
- {
-
- ADC_0809();
- Vpp_Show();
-
- }
- }
復制代碼


全部資料51hei下載地址:
電壓表程序.zip
(198.56 KB, 下載次數: 299)
2019-3-15 10:14 上傳
點擊文件名下載附件
歐姆表程序 下載積分: 黑幣 -5
15008.zip
(71.96 KB, 下載次數: 196)
2019-3-15 10:14 上傳
點擊文件名下載附件
歐姆表仿真 下載積分: 黑幣 -5
電壓表原理.zip
(192.77 KB, 下載次數: 171)
2019-3-15 10:12 上傳
點擊文件名下載附件
原理圖 下載積分: 黑幣 -5
電壓表設計報告.docx
(406.96 KB, 下載次數: 144)
2019-3-15 10:12 上傳
點擊文件名下載附件
設計報告 下載積分: 黑幣 -5
|