大家好,第一次發(fā)帖求助,因?yàn)檫@個(gè)問題不知道該怎么問,所以會(huì)寫很長(zhǎng)一段描述,請(qǐng)見諒…
目標(biāo): 簡(jiǎn)單來(lái)說(shuō)就是做成紅外對(duì)射,超聲波對(duì)射,距離顯示誤差可以在±10mm之間。發(fā)射端發(fā)射紅外,接收端接收到紅外后,兩者差不多同時(shí)發(fā)射超聲波,接收端能接收到發(fā)射端發(fā)射的超聲波。
材料: 接收端:12MHz的stc89C52單片機(jī)開發(fā)板一個(gè),VS838一個(gè),SR-04一個(gè),LCD1602一個(gè) 發(fā)射端:11.0592MHz的stc89C52RC開發(fā)板一個(gè),紅外發(fā)射模塊(無(wú)晶振)一個(gè),SR-04一個(gè)
前提: 1.SR-04在Trig端提供10us左右高電平后,自動(dòng)開啟模塊內(nèi)部定時(shí)器,在接收完超聲波后,內(nèi)部定時(shí)器結(jié)束計(jì)時(shí)并通過Echo端發(fā)送內(nèi)部定時(shí)器所獲取時(shí)間的高電平,高電平持續(xù)時(shí)間即為超聲波來(lái)回一次的時(shí)間。 2.因?yàn)闀簳r(shí)缺設(shè)備,無(wú)法確定硬件是否有問題。所以只能先假設(shè)硬件都沒問題…
為了找到能差不多同步發(fā)送超聲波的時(shí)間點(diǎn),發(fā)射端用keil4測(cè)從紅外程序到超聲波發(fā)射前所用時(shí)間。接收端則用計(jì)時(shí)器多次統(tǒng)計(jì)這段時(shí)間后取平均值。然后根據(jù)兩者時(shí)間差求得補(bǔ)償值。 使用C語(yǔ)言寫的,補(bǔ)償已經(jīng)考慮到晶振、進(jìn)入外部中斷前的語(yǔ)句時(shí)間、函數(shù)調(diào)用和退出。
之前把接收端的程序稍微修改下變成發(fā)射端程序后,我也是這么計(jì)算補(bǔ)償?shù)模Y(jié)果大致符合要求。但是發(fā)射端單獨(dú)寫就出現(xiàn)這個(gè)問題了。
發(fā)射端:約68620us
接收端:約68654us 5(進(jìn)程序)+12(堆棧)+ 68571(取測(cè)得最大值)+1(TR1=0)+12(退棧)+5(再進(jìn)程序)+12(再堆棧)+12(再退棧)+7(irflag判斷前幾句)+1(irflage=0)+13(timer_init)+3(distance=0) (既然測(cè)得的最大值的補(bǔ)償都無(wú)法滿足,那平均值的補(bǔ)償就更沒有意義了)
在發(fā)射端添加補(bǔ)償+34us后,接收端顯示的距離還是小。 實(shí)際距離,mm | LCD顯示,mm | 100 | 20,34 | 150 | 88,94 | 200 | 156,162 | 250 | 196,204 | 300 | 244,250 |
如果根據(jù)數(shù)據(jù)顯示的,直接再多補(bǔ)償+50mm,差不多額外+148us那顯示可以正常。
問題: 1.是因?yàn)閷?duì)超聲波模塊的理解有問題嗎? 2.是因?yàn)槌绦蚰睦餂]有考慮到才引起的這個(gè)額外補(bǔ)償嗎?
發(fā)射和接收程序見附件:
help.rar
(84.29 KB, 下載次數(shù): 10)
2021-7-25 15:53 上傳
點(diǎn)擊文件名下載附件
|