基于51單片機(jī)數(shù)字萬用表的制作.docx_第1頁
基于51單片機(jī)數(shù)字萬用表的制作.docx_第2頁
基于51單片機(jī)數(shù)字萬用表的制作.docx_第3頁
基于51單片機(jī)數(shù)字萬用表的制作.docx_第4頁
基于51單片機(jī)數(shù)字萬用表的制作.docx_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于51單片機(jī)數(shù)字萬用表摘要:本設(shè)計采用AT89C52為主控芯片配以振蕩電路設(shè)計設(shè)計了一個數(shù)字萬用表,可用于測量直流電壓,直流電流,電阻和電容,并配以檔位轉(zhuǎn)換。本系統(tǒng)使用ADC0832作為數(shù)據(jù)轉(zhuǎn)換芯片,LM358作為放大芯片,通過LCD1602顯示,各模塊主要通過AD轉(zhuǎn)換以及電壓放大實(shí)現(xiàn)測量功能。緒論:數(shù)字多用表(GMM)就是在電氣測量中要用到的電子儀器。它可以有很多特殊功能,但主要功能就是對電壓、電阻和電流進(jìn)行測量。傳統(tǒng)的指針式萬用表功能單精度低,不能滿足數(shù)字化時代的需求,采用單片機(jī)制作的數(shù)字萬用表,具有精度高、抗干擾能力強(qiáng),可擴(kuò)展力強(qiáng)、集成方便等優(yōu)點(diǎn),目前,由各種單片機(jī)芯片構(gòu)成的數(shù)字電萬用表,已被廣泛用于電子及電工測量、工業(yè)自動化儀表、自動測試系統(tǒng)等智能化測量領(lǐng)域,顯示出強(qiáng)大的生命力??傮w設(shè)計設(shè)計方案:電壓分壓電路AD電路單片機(jī)顯示電路電流放大電路AD電路電阻晶振電路振蕩電路放大電路路路電容功能開關(guān)1.電壓測量原理與AD轉(zhuǎn)換電路ADC0832是美國國家半導(dǎo)體公司生產(chǎn)的一種8 位分辨率、雙通道A/D轉(zhuǎn)換芯片。其最高分辨可達(dá)256級,可以適應(yīng)一般的模擬量轉(zhuǎn)換要求。其內(nèi)部電源輸入與參考電壓的復(fù)用,使得芯片的模擬電壓輸入在05V之間。芯片轉(zhuǎn)換時間僅為32S,據(jù)有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗,以減少數(shù)據(jù)誤差,轉(zhuǎn)換速度快且穩(wěn)定性能強(qiáng)。獨(dú)立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過DI 數(shù)據(jù)輸入端,可以輕易的實(shí)現(xiàn)通道功能的選擇。本系統(tǒng)只對CH0 進(jìn)行單通道轉(zhuǎn)換。電壓信號輸入單片機(jī)顯示AD轉(zhuǎn)換分壓電壓測量流程圖對于本設(shè)計分壓電路模塊介紹之前首先分析以下兩種設(shè)計方案。多量程分壓電路多量程分壓器原理上述兩圖所制作的多量程電壓測量,其內(nèi)阻比較小,不能達(dá)到測量要求,對電路做以下改進(jìn)。對于本次設(shè)計的電壓模塊只設(shè)置5V,30V兩個檔位,如圖直接采用一組分壓電路既可達(dá)到要求。2.電流測量原理與放大電路對于電流模塊此處給予多種方案:(本系統(tǒng)采用的方案二)方案一:原理:通過改變檢流電阻的大小實(shí)現(xiàn)不同檔位的轉(zhuǎn)換。圖中保險絲可保護(hù)電流過大,二極管防止電壓過大,當(dāng)二極管兩端電壓達(dá)到導(dǎo)通電壓,檢流電阻連端電壓將達(dá)到穩(wěn)定,從而有效的控制輸入電壓的大小。方案二:電流測量原理與方案一基本相同,但在相同電流的測量上此電路比方案一電路的內(nèi)組更小,由于加入了運(yùn)算放大器,所以最大的輸出電壓不會超過電源電壓(實(shí)驗數(shù)據(jù)顯示不會超過3.6V)并不用擔(dān)心檢流電阻兩端電壓大小。而且此方案還有一個最大的優(yōu)勢,它的分辨率更高,理由如下:根據(jù)ADC0832的最小分辨率x可知,此方案中測量電流的最小分辨電流i滿足i*R*k=x(R為檢流電阻,k為放大器放大倍數(shù)),得到i=x/(R*k)在方案一中,i=x/R,由于電阻材質(zhì)的問題其本身電壓不能超過額定電壓,在量程相同的情況下Imax*R*k=3,Imax*RR即ii.(LM358 內(nèi)部包括有兩個獨(dú)立的、高增益、內(nèi)部頻率補(bǔ)償?shù)碾p運(yùn)算放大器,適合于電源電壓范圍很寬的單電源使用,也適用于雙電源工作模式,在推薦的工作條件下,電源電流與電源電壓無關(guān)。它的使用范圍包括傳感放大器、直流增益模塊和其他所有可用單電源供電的使用運(yùn)算放大器的場合。)單片機(jī)處理3.電阻模塊的測量原理顯示AD轉(zhuǎn)換放大電壓選擇量程接入電阻放大電路放大器的最大放大電壓為3V左右(實(shí)際放大為3.5V左右,這里取3V),則輸入電壓滿足5*10v(1010+R).v是最小輸入電壓。根據(jù)上述說明可以得出各個檔位測量范圍。檔位1(V=0.05,v=0.0003.),R148990檔位2(V=0.005, v=0.00003.),8990R1498990檔位3(V=0.0005,v=0.000003.), 98990R14998990.如果擋位1取9000,檔位2取99000,檔位3取999000.在上述電路制作成功后并沒有達(dá)到比較好的測量效果,對于大電阻的測量測量值往往會遠(yuǎn)小于實(shí)際電阻值。針對這個問題,在對放大器各級電壓比較后發(fā)現(xiàn)主要是由于大電阻測量時輸入電壓太小以至于達(dá)不到放大器的正常放大電壓,因此上述電路在很大程度上限制了測量電阻的范圍。對電路做以下改變:直接將前兩級放大合并為一級放大,達(dá)到減小放大的門款電壓。其他測量方法:原理圖如下:通過恒流源(恒流電路此處用電流源代替)給待測電阻供電,放大待測電阻的電壓,輸出給電壓表。此方法和上述方案原理上的差別在于一個利用的是電流恒定,另一個利用的是電壓恒定,對于電流的恒定,一方面,它的電路設(shè)計比較復(fù)雜,另一方面,如果電流源電路設(shè)計的不太理想,電流源的大小變化會產(chǎn)生很大的測量誤差。不過它可以使測量誤差比較穩(wěn)定,在測量誤差不大的情況下電壓恒定電路的誤差變化可以忽約嗎,因此本設(shè)計不采用這種設(shè)計思路。4.電容的測量原理與振蕩電路:單片機(jī)電容充放電選擇量程接入電容顯示根據(jù)555定時器構(gòu)成單穩(wěn)態(tài),產(chǎn)生脈沖波形,通過單片機(jī)讀取高低電平得出頻率,通過公式換算得到電容值。 總結(jié):整個設(shè)計基本上是圍繞放大器所組成的放大電路展開,放大器的放大誤差直接決定著測量的誤差。此設(shè)計設(shè)計電路簡單,測量精度比較小。而且材料成本低,對于直流電路的測量有著很好的實(shí)用性。程序主函數(shù)#includelcd.hsbit AAD_CS=P10;sbit AAD_D0=P12;sbit AAD_D1=P13;sbit AAD_CLK=P11;sbit AVD_CS=P14;sbit AVD_D0=P16;sbit AVD_D1=P17;sbit AVD_CLK=P15;sbit key_boat=P33; unsigned char AAD_read(),AVD_read();unsigned char dat4=0,0,0,0;unsigned char date=0,date1=0,key=0,time=18;unsigned long add; void main() init();TH0=0x3c;TL0=0xb0;TH1=0x3c;TL1=0xb0;TMOD=0x11;EA=1;EX0=1;EX1=1;IT0=1;IT1=1;ET0=1;ET1=1;PT0=0;PX0=0;PX1=1;TR0=1;while(1); void capac() interrupt 0 /電容測量,記數(shù)中斷add+;TR0=1; void time_ADC() interrupt 1/其他測量,數(shù)據(jù)采集周期 time-; if(time=0) if(date=1) /電壓檔位1 add=AVD_read(); dat0=add*196/10000; dat1=(add*196/1000)%10; dat2=(add*196/100)%10; writedate(0x80,dat0+0); writedate(0x81,.); writedate(0x82,dat1+0); writedate(0x83,dat2+0); if(date=2)/電壓檔位2 add=AVD_read(); dat0=add*1176/100000; dat1=(add*1176/10000)%10; dat2=(add*1176/1000)%10; dat3=(add*1176/100)%10; writedate(0x80,dat0+0); writedate(0x81,dat1+0); writedate(0x82,.); writedate(0x83,dat2+0); writedate(0x84,dat3+0); if(date1=1) /電流檔位1 add=AAD_read(); if(add163) dat0=(add*1000/163)/100; dat1=(add*1000/163)/10)%10; dat2=(add*1000/163)%10; writedate(0xc0,dat0+0); writedate(0xc1,.); writedate(0xc2,dat1+0); writedate(0xc3,dat2+0); else writedate(0xc0,1); if(date1=2) /電流檔位2 add=AAD_read(); if(add173) dat0=(add*1000/173)/100; dat1=(add*1000/173)/10)%10; dat2=(add*1000/173)%10; writedate(0xc0,dat0+0); writedate(0xc1,dat1+0); writedate(0xc2,.); writedate(0xc3,dat2+0); else writedate(0xc0,1); if(date1=3) /電流檔位3 add=AAD_read(); if(add13) dat0=(153000/add-1010)/1000; dat1=(153000/add-1010)/100)%10; dat2=(153000/add-1010)/10)%10; dat3=(153000/add-1010)%10; writedate(0xc0,dat0+0); writedate(0xc1,dat1+0); writedate(0xc2,dat2+0); writedate(0xc3,dat3+0); else writedate(0xc0,1); if(date1=5) /電阻檔位2 add=AAD_read(); if(add16) dat0=(168300/add-101)/1000; dat1=(168300/add-101)/100)%10; dat2=(168300/add-101)/10)%10; dat3=(168300/add-101)%10; writedate(0xc0,dat0+0); writedate(0xc1,dat1+0); writedate(0xc2,.); writedate(0xc3,dat2+0); writedate(0xc4,dat3+0); else writedate(0xc0,1); if(date1=6) /電阻檔位3 add=AAD_read(); if(add15) dat0=(1545300/add-101)/10000; dat1=(1545300/add-101)/1000)%10; dat2=(1545300/add-101)/100)%10; dat3=(1545300/add-101)/10)%10; writedate(0xc0,dat0+0); writedate(0xc1,dat1+0); writedate(0xc2,dat2+0); writedate(0xc3,.); writedate(0xc4,dat3+0); else writedate(0xc0,1); if(date1=7)/電容檔位1TR0=0;if(add51)dat0=(505000/add)/1000;dat1=(505000/add)/100)%10;dat2=(505000/add)/10)%10;dat3=(505000/add)%10;writedate(0x80,dat0+0); writedate(0x81,dat1+0); writedate(0x82,dat2+0); writedate(0x83,.); writedate(0x84,dat3+0); else writedate(0x80,1); add=0;if(date1=8)/電容檔位2TR0=0;if(add51)dat0=(505000/add)/1000;dat1=(505000/add)/100)%10;dat2=(505000/add)/10)%10;dat3=(505000/add)%10;writedate(0x80,dat0+0); writedate(0x81,dat1+0); writedate(0x82,dat2+0); writedate(0x83,.); writedate(0x84,dat3+0); else writedate(0x80,1); add=0; if(date1=9) /電容檔位3(此檔位不可用)TR0=0;writedate(0xc0,add/10000000+0); writedate(0xc1,(add/1000000)%10+0);writedate(0xc2,(add/100000)%10+0);writedate(0xc3,(add/10000)%10+0);writedate(0xc4,(add/1000)%10+0);writedate(0xc5,(add/100)%10+0);writedate(0xc6,(add/10)%10+0);writedate(0xc7,(add)%10+0);add=0; time=18; TH0=0x3c;TL0=0xb0; void keyboat() interrupt 2 /功能轉(zhuǎn)換開關(guān) unsigned char trange=200; if(key_boat=0) delay(50); if(key_boat=0) key+; TR0=0; if(key11)key=1;TR0=1; writeadd(1); switch(key) case 1: writedate(0x80+13,U);writedate(0x80+14,5); writedate(0x80+15,v);break; case 2: writedate(0x80+12,U) ;writedate(0x80+13,3); writedate(0x80+14,0); writedate(0x80+15,v);break; case 3: writedate(0xc0+11,I) ;writedate(0xc0+12,1); writedate(0xc0+13,0); writedate(0xc0+14,m);writedate(0xc0+15,A);break; case 4: writedate(0xc0+11,I) ;writedate(0xc0+12,8); writedate(0xc0+13,0); writedate(0xc0+14,m);writedate(0xc0+15,A);break; case 5: writedate(0xc0+10,I) ;writedate(0xc0+11,1); writedate(0xc0+12,5);writedate(0xc0+13,0); writedate(0xc0+14,m);writedate(0xc0+15,A);break; case 6:writedate(0xc0+13,R);writedate(0xc0+14,9); writedate(0xc0+15,K);break; case 7: writedate(0xc0+12,R) ;writedate(0xc0+13,9); writedate(0xc0+14,9); writedate(0xc0+15,K);break; case 8: writedate(0xc0+11,R) ;writedate(0xc0+12,9); writedate(0xc0+13,9); writedate(0xc0+14,9);writedate(0xc0+15,K);break; case 9: writedate(0x80+12,C); writedate(0x80+13,=); writedate(0x80+14,u);writedate(0x80+15,F);break; case 10:writedate(0x80+12,C); writedate(0x80+13,=); writedate(0x80+14,n);writedate(0x80+15,F);break; case 11:writedate(0x80+10,e) ;writedate(0x80+11,r); writedate(0x80+12,r);writedate(0x80+13,o); writedate(0x80+14,r);break; date=key; date1=key-2; delay(50); while(key_boat=0&trange) trange-; key_boat=1; TR0=1; unsigned char AAD_read() /電流測量端數(shù)據(jù)接收函數(shù)unsigned char dat,i,test=0,adval=0; AAD_CLK=0;/ AAD_D1=1; _nop_(); AAD_CS=0; _nop_(); AAD_CLK=1; _nop_(); AAD_CLK=0;/ AAD_D1=0; _nop_(); AAD_CLK=1; _nop_(); AAD_CLK=0; / AAD_D1=0; _nop_(); AAD_CLK=1; _nop_(); AAD_CLK=0; AAD_D1=1; for(i=0;i8;i+) _nop_(); adval=1; AAD_CLK=1;_nop_(); AAD_CLK=0; if(AAD_D0) adval|=1; for(i=0;i=1; if(AAD_D0)test|=0x80; AAD_CLK=1;_nop_(); AAD_CLK=0; if(adval=test)dat=test;_nop_();AAD_CS=1;AAD_D0=1;AAD_D1=1;AAD_CLK=1;return dat;unsigned char AVD_read() /電壓測量端ADC0832數(shù)據(jù)接收函數(shù)unsigned char dat,i,test=0,adval=0; AVD_CLK=0;/ AVD_D1=1; _nop_(); AVD_CS=0; _nop_(); AVD_CLK=1; _nop_(); AVD_CLK=0;/ AVD_D1=0; _nop_(); AVD_CLK=1; _nop_(); AVD_CLK=0; / AVD_D1=0; _nop_(); AVD_CLK=1; _nop_(); AVD_CLK=0; AVD_D1=1; for(i=0;i8;i+) _nop_(); adval=1; AVD_CLK=1;_nop_(); AVD_CLK=0; if(AVD_D0) adval|=1; for(i=0;i=1; if(AVD_D0

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論