久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2370|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

關(guān)于單片機(jī)紅外對(duì)射和超聲波對(duì)射程序編寫的疑問

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:944755 發(fā)表于 2021-7-25 15:56 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
大家好,第一次發(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)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:123289 發(fā)表于 2021-7-26 09:55 | 只看該作者
1、看了,還不知道你問題的是什么問題?
2、【兩者差不多同時(shí)發(fā)射超聲波】收發(fā)雙方都發(fā)超波嗎?
3、你的【目標(biāo)】不是已實(shí)現(xiàn)了嗎?該發(fā)的發(fā)了,該收的收了。
【發(fā)射端發(fā)射紅外,接收端接收到紅外后,兩者差不多同時(shí)發(fā)射超聲波,接收端能接收到發(fā)射端發(fā)射的超聲波。】
4、你提供的表中,我算了一下,用本次值 - 上次值,
分別是:68.600,67.222,40.042,48.046
同樣相差50mm,但顯示之差卻不同。
建議:先不要補(bǔ)償,單獨(dú)驗(yàn)證:同樣相差50mm,結(jié)果差值是否一樣?如果不一樣就必須有一個(gè)規(guī)律,否則就不用再做了,永遠(yuǎn)做不準(zhǔn)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:944755 發(fā)表于 2021-7-28 22:45 | 只看該作者
yzwzfyz 發(fā)表于 2021-7-26 09:55
1、看了,還不知道你問題的是什么問題?
2、【兩者差不多同時(shí)發(fā)射超聲波】收發(fā)雙方都發(fā)超波嗎?
3、你的 ...

首先感謝您的回復(fù)。
其次表示抱歉,我還以為沒人回復(fù)才沒收到消息或者提醒。

先回答您第二個(gè)問題:
我超聲波的對(duì)射是通過接收端是把SR-04的發(fā)射口擋住,發(fā)送端把另個(gè)一個(gè)SR-04接收口擋住實(shí)現(xiàn)的。但這個(gè)模塊要從Echo得到高電平的前提是自身Trig高電平維持10us左右。所以才會(huì)有發(fā)射端和接收端同時(shí)寫了Sonar_Send()。發(fā)射端是真正的發(fā)射超聲波,接收端只是為了讓接收端能觸發(fā)Echo,使它可以輸出高電平。

表中的LCD顯示這一列可能讓您誤解了。那是兩個(gè)值,22和34,測(cè)得的大多數(shù)情況下是在這兩個(gè)值跳。

       一開始,我并沒有加任何補(bǔ)償直接運(yùn)行,于是得到了表中LCD顯示值。
       那我想可能是發(fā)射端(從紅外發(fā)射到Sonar_Send()之前)和接收端(從紅外接收到Sonar_Send()之前)時(shí)間差太多,使得無(wú)法同步Sonar_Send(),才導(dǎo)致距離顯示小的問題。
      于是根據(jù)上面計(jì)算的時(shí)間得到補(bǔ)償,并加在發(fā)射端中,結(jié)果和沒有補(bǔ)償值得到的顯示距離一樣。如果根據(jù)顯示的值,在原本補(bǔ)償?shù)幕A(chǔ)上再加+50mm的補(bǔ)償,那確實(shí)可以得到。

所以,我的問題就是,為什么會(huì)有這額外的補(bǔ)償?先假設(shè)硬件本身沒問題,是我程序哪里沒有考慮到?
回復(fù)

使用道具 舉報(bào)

地板
ID:844772 發(fā)表于 2021-7-29 11:05 | 只看該作者
firm 發(fā)表于 2021-7-28 22:45
首先感謝您的回復(fù)。
其次表示抱歉,我還以為沒人回復(fù)才沒收到消息或者提醒。

是挺有意思的,一開始還以為是溫度造成的呢。總之,我覺得,如果發(fā)射端補(bǔ)償,必須在接受端發(fā)出信號(hào)后,而發(fā)射端發(fā)出紅外后,發(fā)出超生前補(bǔ)償,才會(huì)有效。我感興趣的是148us的構(gòu)成? 不過你這么玩,系統(tǒng)延時(shí)都超過了實(shí)際計(jì)時(shí)時(shí)間,可能很難找到延時(shí)原因。
回復(fù)

使用道具 舉報(bào)

5#
ID:944755 發(fā)表于 2021-7-30 23:24 | 只看該作者
glinfei 發(fā)表于 2021-7-29 11:05
是挺有意思的,一開始還以為是溫度造成的呢。總之,我覺得,如果發(fā)射端補(bǔ)償,必須在接受端發(fā)出信號(hào)后,而 ...

感謝您的回復(fù),看到您的第一句,確實(shí)可以改進(jìn)程序中一些問題了。

先說(shuō)結(jié)論:額外補(bǔ)償?shù)恼`差在重新調(diào)整后減少了大約10us,變?yōu)轭~外補(bǔ)償132us。

1.當(dāng)初寫的時(shí)候?yàn)榱藴p少代碼和內(nèi)存,(340m/s-->0.34mm/us)時(shí)間轉(zhuǎn)為距離的函數(shù)拆成多段乘除法處理了。
這就導(dǎo)致了第一層誤差。現(xiàn)在直接用 time * 34 /100寫了。
2.聲速溫度的問題沒有考慮到,當(dāng)默認(rèn)340考慮了。
這就導(dǎo)致第二層誤差。現(xiàn)在以30度,聲速350m/s處理。
總的可以減少大約10us。不過還是和之前測(cè)試一樣得額外補(bǔ)償+50mm(即+132us)

總之,我覺得,如果發(fā)射端補(bǔ)償,必須在接受端發(fā)出信號(hào)后

您這句話我不太明白...接收端發(fā)出哪個(gè)信號(hào)后?接收端的Sonar_Send?還是Sonar_Receive?
我來(lái)解釋一下我怎么寫的吧。接收端在沒有紅外前,在main里循環(huán)。發(fā)射端在按鍵按下后發(fā)送紅外,此時(shí)接收端中斷開啟,開始接受紅外數(shù)據(jù),等全部接收完之后返回主程序,并初始化超聲波用計(jì)時(shí)器,然后運(yùn)行Sonar_Send。而接收端在紅外發(fā)送完畢之后延時(shí),等待接收端運(yùn)行到Sonar_Send前,然后幾乎同時(shí)啟動(dòng)Sonar_Send。

148us的構(gòu)成
:
50mm--[0.34mm/us]-->148us
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天干亚洲 | 欧美精品在线观看 | 成人不卡 | 亚洲日本中文 | 国产日产欧产精品精品推荐蛮挑 | 亚洲一区二区三区四区在线观看 | 欧美在线一区二区三区 | 精品视频一区二区三区四区 | 福利电影在线 | 在线观看av网站永久 | 超碰在线97国产 | 国产精品日产欧美久久久久 | 国产午夜精品一区二区三区四区 | 成人在线观看免费爱爱 | 亚洲视频中文字幕 | 在线观看一区 | 日韩欧美成人精品 | 久久久精品一区二区三区 | 日韩在线视频网址 | 精品视频在线观看 | 91国产视频在线观看 | 在线免费观看欧美 | 国产一区二区三区 | 久久精品黄色 | 国产激情一区二区三区 | 亚洲第一色av | 欧美性猛交一区二区三区精品 | 一区二区三区国产 | 日一区二区| 一区二区三区视频免费看 | 国产伦精品一区二区三区高清 | 日韩高清在线 | 欧美成人一区二免费视频软件 | 亚洲综合日韩精品欧美综合区 | 欧美日韩国产精品一区二区 | 完全免费在线视频 | 精品一区久久 | 成人黄色三级毛片 | 一级二级三级黄色 | 99精品国产一区二区三区 | 欧美综合一区 |