超聲波的移動(dòng)機(jī)器人導(dǎo)航的設(shè)計(jì)原理
利用數(shù)字示波器精確設(shè)計(jì)一個(gè)軟件計(jì)時(shí)函數(shù)usdelay (),具體實(shí)現(xiàn)如下。
則usdelay(1)既為10us,該函數(shù)用于在給出激發(fā)高脈沖后延續(xù)10us 然后關(guān)脈沖。
還要設(shè)計(jì)一個(gè)msdelay()用于控制整個(gè)測(cè)距周期的時(shí)間值。
msdelay(1000)在主函數(shù)數(shù)中用于延遲1s,這樣定時(shí)器可以完全有足夠的回波檢測(cè)時(shí)間同時(shí)也不會(huì)對(duì)其它三路超聲波信號(hào)造成干擾。
如下所示。
3.3 超聲波回波檢測(cè)的實(shí)現(xiàn)
回波檢測(cè)計(jì)算脈寬的時(shí)間需要用到定時(shí)器和外部中斷,外部中斷接超聲波的echo 并設(shè)置為下降沿觸發(fā)。定時(shí)器的初始化如下。
rTCFG0=0x9595; //預(yù)分頻值為95
rTCFG1=0x00000; //分割值1/2
rTCNTB0=10000; /
根據(jù)T=[TCNTB0*(TCFG0+1)*(1/TCFG1)]/50MHZ 得出定時(shí)器的周期為60ms 在這個(gè)時(shí)間段里足以計(jì)算回波時(shí)間。
外部中斷1 初始化如下
rGPFCON=0xaa; //GPF1 設(shè)置為EINT1
rINTMOD=0x0; //設(shè)置為普通中斷
rGPFUP=0xf; //禁止GPF0 上拉電阻
pISR_EINT1=(unsigned)Eint1Handler; //建立中斷向量
EnableIrq(BIT_EINT1); //使能中斷
rEXTINT0 =0x492; // EINT1 下降沿觸發(fā)
根據(jù)T=[TCNTB0*(TCFG0+1)*(1/TCFG1)]/50MHZ 得出定時(shí)器的周期為60ms 在這個(gè)時(shí)間段里足以計(jì)算回波時(shí)間。
評(píng)論