從超聲波的工作原理其實(shí)只要單片機(jī)的兩個(gè)引腳就足夠,一個(gè)引腳接發(fā)送端,一個(gè)引腳接接收端即可。工作時(shí),發(fā)送端引腳置高電平10us時(shí)間的脈沖,這將激發(fā)超聲波模塊發(fā)送8個(gè)40khz周期的電平信號(hào),然后模塊的收端開始檢測回波(實(shí)際上,兩個(gè)眼睛,一個(gè)是發(fā)送的,一個(gè)是用來接收的)。一旦發(fā)現(xiàn)有回波信號(hào),就會(huì)輸出一個(gè)響應(yīng)給接收端引腳,這個(gè)響應(yīng)是一個(gè)高電平脈沖。所以,我們只要在接收端去檢測是否有高電平脈沖即可。
但從程序編寫與調(diào)試的過程來看,并沒有那么簡單。因?yàn)槌暡ǖ谝淮伟l(fā)送40KHZ的信號(hào)出去后反射回來,有可能又被反彈回去,這樣以來,相當(dāng)于超聲波在兩個(gè)障礙物之間不斷地來回反彈,導(dǎo)致接收端不斷地收到”回波信號(hào)“——實(shí)際上第一次反彈回來的才是回波信號(hào),其他的都是二次、三次...的反彈回波信號(hào)。如果每次檢測到回波就讓蜂鳴器響一次,那么,我們程序運(yùn)行時(shí),可能會(huì)聽到蜂鳴器不斷地響,可能就是這個(gè)原因。
另外,需要關(guān)注的是,超聲波如果前面沒有障礙物,也會(huì)在接收端引腳上故意輸出140us的電平,以”防止發(fā)射信號(hào)對回響信號(hào)的影響“。
從上面的分析看來,不管超聲波前面有無障礙物,接收端引腳肯定都會(huì)出現(xiàn)高電平脈沖。所以我們在編程時(shí),必須過濾掉這140us。
講完超聲波的工作原理,我們來看下編寫程序的思路。
由于超聲波可能會(huì)連續(xù)收到回響信號(hào),導(dǎo)致接收端不斷出現(xiàn)高電平脈沖,而實(shí)際上,我們有用的僅僅是第一次反射回來的回響信號(hào),因此,使用”查詢接收端引腳是否出現(xiàn)高電平“的方法行不通?梢允褂猛獠恐袛啵粰z測第一次反射回來的信號(hào),后續(xù)的反射信號(hào)全部丟棄不管。
下面看下140us的處理。根據(jù)公式us/58 = 厘米,140us就是約2cm的距離。因此在超聲波前2cm有障礙物,剛好也會(huì)返回140us的高電平,而超聲波的測量范圍是3-4.5米,因此可以不考慮140us。
最后總結(jié)一下思路,發(fā)送端隨便選一個(gè)引腳,這里選擇P1.0,接收端使用外部中斷0引腳P3.2。程序一開始,我們做定時(shí)器、中斷的初始化,然后給發(fā)送端引腳一個(gè)高電平10us。
接下來,我們不斷查詢接收引腳是否有高電平出現(xiàn),一旦出現(xiàn)高電平,立即啟動(dòng)定時(shí)器。選擇單片機(jī)的外部中斷0為下跳沿中斷,因此當(dāng)高電平一過,立即進(jìn)入中斷,此時(shí)關(guān)掉定時(shí)器,就OK了。后面再發(fā)現(xiàn)接收引腳跳變也不要進(jìn)中斷。
|