![]() |
發(fā)布時間: 2017-5-28 15:57
正文摘要:我是用的at89s52單片機(jī),一個水位傳感器,范圍0~5mm和ADC0832數(shù)模轉(zhuǎn)換芯片,進(jìn)行液位測量時,測出的數(shù)據(jù)偏大而且大于3 的時候,結(jié)果保持在3.0.鍵盤是對預(yù)設(shè)值加減,有超限報警。實物圖如下: C語言 ... |
樓主來一份 |
ahshmj 發(fā)表于 2017-5-29 15:54 我用的是ADC0832芯片,它是8位的,經(jīng)過轉(zhuǎn)換就是0~255.我又改了一下程序,雖然還是有誤差,但是整數(shù)位測量的比較準(zhǔn)確了 void convdata(uchar i) { /* dis[0]=i/100; //gewei dis[1]=((i)%100)/10; //小數(shù)點后1位 dis[2]=((i)%100)%10; //小數(shù)點后2位*/ //AD轉(zhuǎn)換值檢測,測出整數(shù)位對應(yīng)的8位數(shù)據(jù) if((110<dat)&&(dat<=140)) { dis[0]=(i-110)/30; //gewei dis[1]=((i-110)%30)*10/30; //小數(shù)點后1位 dis[2]=(((i-110)%50)*10%30)*10%30; //小數(shù)點后2位 //0~1mm } if((140<dat)&&(dat<=160)) { dis[0]=((i-140)/20)+1; //gewei dis[1]=((i-140)%20)*10/20; //小數(shù)點后1位 dis[2]=(((i-140)%20)*10%18)*10%20; //小數(shù)點后2位 //1~2mm } if((160<dat)&&(dat<=170) ) { dis[0]=((i-160)/10)+2; //gewei dis[1]=((i-160)%10)*10/10; //小數(shù)點后1位 dis[2]=(((i-160)%10)*10%6)*10%10; //小數(shù)點后2位 //2~3mm } if((170<dat)&&(dat<=175)) { dis[0]=((i-170)/5)+3; //gewei dis[1]=((i-170)%5)*10/5; //小數(shù)點后1位 dis[2]=(((i-170)%5)*10%5)*10%5; //小數(shù)點后2位 //3~4mm } if((175<dat)&&(dat<=180)) { dis[0]=((i-175)/5)+4; //gewei dis[1]=((i-175)%5)*10/5; //小數(shù)點后1位 dis[2]=(((i-175)%5)*10%5)*10%5; //小數(shù)點后2位 4~5mm } } |
“ 剛測量ad轉(zhuǎn)換得到的數(shù)據(jù)就有100了,最多也就180. 0~255的測量范圍達(dá)不到 ”是什么意思? 程序是自己寫的嗎? 許多這類的測量,傳感器給出的信號一般不可能剛剛和和理想的結(jié)果相對應(yīng),往往是一個線性數(shù)值(有時僅僅是一個相關(guān)的曲線),需要通過程序用一個系數(shù)進(jìn)行矯正。有時還要進(jìn)行插值計算。 |
yzwzfyz 發(fā)表于 2017-5-28 21:51 是一種簡單易用的水位傳感器,該傳感器的工作原理是通過電路板上一系列裸露的印刷平行導(dǎo)線測量水量的大小。水量越多,就會有更多的導(dǎo)線被聯(lián)通,隨著導(dǎo)電的接觸面積增大,輸出的電壓就會逐步上升。 但是實際檢測的時候,剛測量ad轉(zhuǎn)換得到的數(shù)據(jù)就有100了,最多也就180. 0~255的測量范圍達(dá)不到。 所以我先測出整數(shù)位對應(yīng)的數(shù)字量,然后分為五段了。雖然還是有偏差,但是整數(shù)位測出來比較準(zhǔn)確了 |
1、液位檢測的原理是什么? 2、液位是如何圍成電壓信號的? 能說清楚以上兩點,估計問題就解決得差不多了。 |
急求急求! |
Powered by 單片機(jī)教程網(wǎng)