|
超聲波測距傳感器SDM-IO 本模塊最遠測試距離是1500mm,測量周期10ms專為小車設(shè)計。 1、本模塊性能穩(wěn)定,測度距離精確。能和國外的SRF05,SRF02等超聲波測距模塊相媲美。模塊高精度,首創(chuàng)無盲區(qū)(0cm開始測量),穩(wěn)定的測距是此產(chǎn)品成功走向市場的有力保障。 2 主要技術(shù)參數(shù): 1)使用電壓:DC3.8-5.5V 2)靜態(tài)電流:小于8mA 3)輸出TTL電平 4)感應(yīng)角度:不大于15度 5)探測距離:0cm-1500mm 6)高精度:可達3mm 接線方式,VCC、trig(控制端)、 echo(接收端)、 GND 模塊主要特點: (1)超微型,只相當于兩個發(fā)射,接收頭的面積,已經(jīng)沒法再小了. (2)無盲區(qū)(8mm內(nèi)成三角形誤差稍大). (3)反應(yīng)速度快,10ms的測量周期,不容易丟失高速目標。 (4)發(fā)射頭,接收頭緊靠,和被測目標基本成直線關(guān)系(8mm內(nèi)還是大三角形,這個是發(fā)射,接收頭的物理形狀決定了). (5)模塊上有LED指示,方便觀察和測試! 1:超聲波測距原理 超聲波是一種頻率比較高的聲音,指向性強.超聲波測距的原理是利用超聲波在空氣中的傳播速度為已知,測量聲波在發(fā)射后遇到障礙物反射回來的時間,根據(jù)發(fā)射和接收的時間差計算出發(fā)射點到障礙物的實際距離。由此可見,超聲波測距原理與雷達原理是一樣的。
測距的公式表示為:L=C×T
式中L為測量的距離長度;C為超聲波在空氣中的傳播速度;T為測量距離傳播的時間差(T為發(fā)射到接收時間數(shù)值的一半)。
已知超聲波速度C=344m/s (20℃室溫) 超聲波傳播速度誤差
超聲波的傳播速度受空氣的密度所影響,空氣的密度越高則超聲波的傳播速度就越快,而空氣的密度又與溫度有著密切的關(guān)系,近似公式為:C=C0+0.607×T℃
式中:C0為零度時的聲波速度332m/s;
T為實際溫度(℃)。
對于超聲波測距精度要求達到1mm時,就必須把超聲波傳播的環(huán)境溫度考慮進去。 2:超聲波模塊使用方法 使TRIG=0,最少延遲10us的時間,然后TRIG=1,超聲波模塊此時開始啟動一個測量周期,發(fā)射若干個40khz的聲波,然后啟動10ms的定時器等待反射波,如果收到反射波,模塊的ECHO輸出一個寬度為150us的負脈沖,從TRIG=1到ECHO=0的時間即為從發(fā)射到收到發(fā)射波的時間. 3:為什么距離最遠只有1500mm? 本傳感器專為智能小車等微型設(shè)備而設(shè)計,適合小范圍,小空間,封閉空間的場合,大家知道,超聲波傳輸速度低,衰減時間長,如果一味追求距離,就會導(dǎo)致響應(yīng)時間長,丟失目標,在室內(nèi)等封閉場合會形成多次發(fā)射震蕩,傳感器就無法正常工作了. 下面從傳感器的反應(yīng)時間來分析距離的問題: 超聲波空氣中速度每秒約340米,折算成毫秒,就是340mm/ms,探測距離為1500mm的話,探測到回波的距離就是3000mm,超聲波的傳輸時間是9ms,加上電路延遲,傳感器的能量延遲,再預(yù)留一些保護時間(讓上次超聲波能量消失),每次測量時間就是10ms.10ms的反應(yīng)速度對于智能小車來說是合適的,高速運動時不會丟失目標. 現(xiàn)在市面有一種傳感器是5米,這個5米是最大距離,探測目標一般是墻面等大發(fā)射面,對于小目標是不可能達到的,先不管這個小目標到底是多少距離了,我們從傳感器的反應(yīng)時間來分析.這種傳感器的時序跟我們的不同,它是先收到反饋然后再從Echo的脈寬上反饋出來的,而不是從echo和trig的時差來反饋的,這樣傳感器的反應(yīng)時間又增加了一倍!這樣5米傳感器的反應(yīng)時間最少是(上面計算1米的最少時間是6ms):5*6*2=60ms!就算最快60ms的測量周期,對于智能小車能應(yīng)用已經(jīng)太遲鈍了!當主控CPU探測到目標時,小車恐怕已經(jīng)撞上去了! 4:你的超聲波發(fā)射和接收頭靠的很近,為什么? 大家看到的超聲波傳感器一般發(fā)射和接收頭分得比較開,是因為靠的越近發(fā)射頭的橫向波能量傳遞給接收頭的越高,導(dǎo)致盲區(qū)變得很大,甚至無法正常工作,讓發(fā)射頭和接收頭分開點是不得以而為之,這樣帶為的壞處是發(fā)射頭,接收頭和測量物體之間是三角形連接!很明顯距離越近,三角形的角度就越大,這樣就帶來誤差了.而本店傳感器的發(fā)射頭和接收頭是緊密挨在一起的,和探測目標就是平行關(guān)系,而不是三角關(guān)系. 5:你的超聲波模塊真的無盲區(qū)? 千真萬確!商品圖片里帶有示波器的截圖,大家可以看到發(fā)射波和反射波的時間關(guān)系,反射波只有一個!本超聲波傳感器獨創(chuàng)性的消除了橫向干擾波,最小測量距離從0開始. 6:計算距離為什么要減去固定延遲? 超聲波發(fā)射頭和接收頭的內(nèi)部晶體和外體有一個固定距離,電路也有固定延遲,總延遲時間為250us,當減去這個250us延遲時程序要做一些容錯判斷,因為近距離(10mm內(nèi))誤差較大(距離在10mm范圍內(nèi),發(fā)射頭,接收頭,和目標形成大三角形,測量誤差大),t2-t1非常接近250us時當作0距離處理,當t2-t1>250us時可線性處理. 7:不同物體測量距離不同? 對!因為超聲波就是頻率高些的聲音,不同材料,形狀的物體對聲音的吸收率不同,反射角度不同,只有反射到接收頭(也就是超聲波發(fā)射的方向)的能量才會被探測到,所以不同物體測量的有效測量距離不同.一般來說,平面光滑的物體(如鏡面)反射距離最遠,通常說的最大探測距離指的就是這類物體,細小的物體探測距離很近很多,如細棉線,面積小,而且吸收聲音,就探測不到. 下面列舉實際物體的最大探測距離: 1.圓珠筆,200mm 2.手,400mm 3.1mm粗帶塑料套的電線,30mm 4.游標卡尺,450mm 5.人體(穿厚衣服),400mm 6.墻面,1200mm(最大1500mm左右,需要垂直測量) 7.1mm粗細棉線,探測不到 8.竹牙簽,40mm 8:有應(yīng)用例程嗎? 有,下面引用一個位網(wǎng)友的程序,用51單片機做的控制,功能是每隔12ms重復(fù)測量,并把測量結(jié)果發(fā)送到串口,在PC上用sscom32程序觀察.在這個例子中,用到了兩個IO,一個做輸入,一個做輸出,如果IO緊張,能不能用更少的IO呢?可以的,具體見下一個問答. #include "reg51.h"
#include "sio.h"
sbit TRIG = P2^7;
sbit ECHO = P2^6; #define XTAL 19660800L
#define PERIOD12MS (12L * XTAL / 12L / 256L / 1000L)
#define DISTANCE_PARAM (XTAL / 10000L) void delay(unsigned int t)
{ while(t--) ;
} void main (void)
{
EA = 0;
TMOD &= ~0x0F; // clear timer 0 mode bits
TMOD |= 0x01; // put timer 0 into MODE 1, 16bit
com_initialize (); /* initialize interrupt driven serial I/O */
com_baudrate (14400); /* setup for 14400 baud */
EA = 1; // Enable Interrupts
while (1)
{ unsigned int distance;
unsigned char dh, dl;
START: TR0 = 0;
TH0 = 0;
TL0 = 0;
TRIG = 0; //發(fā)出一個負脈沖,啟動一個測量周期
delay(100);
TRIG = 1; //開始測量
TR0 = 1; //同時啟動定時器0
while (ECHO) //監(jiān)視ECHO信號
{
if (TH0 >= PERIOD12MS) //一個測量周期超時
goto START;
}
TR0 = 0; //停止計時 //計算距離:為了提高精度,分母分子取合適的數(shù)值,定時器計數(shù)換算成時間*聲速(340),得到以mm為單位
distance = ((TH1 * 256 + TL1) * 12L * 34L) / DISTANCE_PARAM / 2; if (distance >= 30)
distance -= 30;
else
distance = 0;
dh = distance >> 8;
dl = distance; com_putchar(dh);
com_putchar(dl);
TR0 = 1;
while (TH0 < PERIOD12MS) ; //保持大約12ms的測量周期
}
} 9:IO緊張,可以用更少的IO嗎? 可以,但需要理解,這一個IO是半雙工操作的,也就是說,主控CPU輸出的時候,模塊只能輸入,模塊輸出的時候,CPU只能輸入,為了避免出錯導(dǎo)致主控和模塊同時輸出,主控CPU的IO和模塊的TRIG,ECHO之間串聯(lián)一個合適的電阻保護,如1k,這樣即使程序出錯,硬件也不會損壞. 主控CPU----[1k電阻]-----TRIG,ECHO連接在一起. #include "reg51.h"
#include "sio.h"
sbit TRIG = P2^0; //主控單片機的P2.0同時連接模塊的TRIG,ECHO,中間串1k電阻
sbit ECHO = P2^0; #define XTAL 19660800L
#define PERIOD12MS (12L * XTAL / 12L / 256L / 1000L)
#define DISTANCE_PARAM (XTAL / 10000L)
void delay(unsigned int t)
{
while(t--) ;
}
void main (void)
{
EA = 0;
TMOD &= ~0x0F; // clear timer 0 mode bits
TMOD |= 0x01; // put timer 0 into MODE 1, 16bit
com_initialize (); /* initialize interrupt driven serial I/O */
com_baudrate (14400); /* setup for 14400 baud */
EA = 1; // Enable Interrupts
while (1)
{
unsigned int distance;
unsigned char dh, dl;
START: TR0 = 0;
TH0 = 0;
TL0 = 0;
TRIG = 0; //發(fā)出一個負脈沖,啟動一個測量周期
delay(100);
TRIG = 1; //開始測量
TR0 = 1; //同時啟動定時器0
while (ECHO) //監(jiān)視ECHO信號
{
if (TH0 >= PERIOD12MS) //一個測量周期超時
goto START;
}
TR0 = 0; //停止計時
//計算距離:為了提高精度,分母分子取合適的數(shù)值,定時器計數(shù)換算成時間*聲速(340),得到以mm為單位
distance = ((TH1 * 256 + TL1) * 12L * 34L) / DISTANCE_PARAM / 2;
if (distance >= 30)
distance -= 30;
else
distance = 0;
dh = distance >> 8;
dl = distance;
com_putchar(dh);
com_putchar(dl);
TR0 = 1;
while (TH0 < PERIOD12MS) ; //保持大約12ms的測量周期
}
}
10:需要更短周期的測量,可以嗎? 可以,模塊只捕獲第一個反射信號,ECHO輸出(150us脈沖)后馬上等待下一個測量命令(TRIG上的脈沖),如果主控CPU監(jiān)控ECHO的電平信號,在ECHO從0變到1后馬上就可以進行下一輪測量了,而不必等到10ms后再進行測量.但需要注意:超聲波有可能多次來回發(fā)射(在被測物體距離很近或很封閉的空間),連續(xù)測量如果碰到這種場合就有可能收到錯誤的信號,導(dǎo)致測得的距離不準確了. 11:抗干擾性如何? 抗干擾性能比較強.設(shè)計上有幾個措施:1.盡量降低輸入阻抗,阻抗越高越容易引入干擾;2.模塊設(shè)計的距離比較近,信號放大倍數(shù)只滿足此距離;3.一般干擾源離模塊越近,越容易干擾,模塊對近距離的信號進行了衰減.經(jīng)實際測試,模塊對近距離的噪音(擊掌,口哨,音頻喇叭)干擾不產(chǎn)生動作,但較強機械震動有時會產(chǎn)生干擾(有較強諧波,含40khz成分),因此超聲波模塊避免跟可能產(chǎn)生振動的物體硬連接,中間可以用橡膠等減震,這樣就能可靠工作了. 12:探測角度? 近距離探測角度比較大,約60度,越遠距離,探測角度越小,最遠處接近0度. 13:模塊有其他接口方式嗎? 有.另有TTL串口模式.其他如IIC,SPI可以定做,但最常用的是IO和TTL接口方式,具體咨詢店主.
|