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