找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3809|回復(fù): 4
收起左側(cè)

STC15F2K60S2單片機(jī)調(diào)試超聲波HC-SR04測距經(jīng)驗(yàn)

[復(fù)制鏈接]
ID:235200 發(fā)表于 2019-8-5 22:27 | 顯示全部樓層 |閱讀模式
   經(jīng)過一天的調(diào)試,終于把STC15F2K60S2單片機(jī)測量超聲波HC-SR04的程序搞定,主要存在問題是:
  1、單片機(jī)時(shí)鐘設(shè)置為22.1184MHz,而且采取1T模式運(yùn)行時(shí),觸發(fā)信號維持10us以上時(shí)間要采用延時(shí)函數(shù) Delay_us(250)并一定達(dá)到10us以上。
  2、等待回聲接收的引腳echo要開啟接收,即echo=1;
  3、觸發(fā)信號發(fā)出后不能馬上開啟計(jì)數(shù)器計(jì)數(shù),一定要等到有回聲信號時(shí)(echo被置為高)才開啟,為了防止回聲信號一直不出現(xiàn),增加超時(shí)退出。
  4、測量時(shí)間(echo維持高電平時(shí)間)也增加超時(shí)退出,否則程序出現(xiàn)死機(jī)。
  5、禁止定時(shí)計(jì)數(shù)后要軟件清除一次中斷標(biāo)志,因是檢測到echo回聲停止,此時(shí)不一定出現(xiàn)中斷(默認(rèn)中斷清除)
  6、為保證測量精度,TH1TL1中的計(jì)數(shù)值要減去初值并除以22,因計(jì)數(shù)22次為1us。
具體子函數(shù)如下:
/*------------------------------------------------
     超聲波模塊觸發(fā)信號
------------------------------------------------*/
void trigger()
{
    trig=0;
          NOP(21);                             //延時(shí)  
    trig=1;
    Delay_us(250);                       //至少10us高電平
          trig=0;
}


/*------------------------------------------------
      超聲波模塊距離測試函數(shù)
------------------------------------------------*/
void measuring()      //晶振22.1184MHz
{  
           uint Return_time;                   //超聲波返回時(shí)間
    uint Wait_time;
          TL1 = 0x33;                                      //設(shè)置定時(shí)初值         2ms定時(shí)
          TH1 = 0x53;                                      //設(shè)置定時(shí)初值
          echo=1;                             //等待回聲(開啟輸入)
          trig=1;                             //初始狀態(tài)
          Ping_count=0;                       //時(shí)間計(jì)數(shù)初值
          trigger();                          //觸發(fā)
          Wait_time=0;
          while ((!echo)&(Wait_time++<10000)); //觸發(fā)后等待echo出現(xiàn)高電平或超時(shí)不出現(xiàn)高電平
    TR1 = 1;                            //啟動(dòng)定時(shí)計(jì)數(shù)器T1
          Wait_time=0;
    while((echo)&(Wait_time++<10000));  //等待echo=0或超時(shí)不出現(xiàn)低電平
    TR1 = 0;                             //停止計(jì)數(shù)
          TF1 = 0;                             //因不是響應(yīng)中斷停止,故軟件清除
    Return_time = (TH1<< 8) + TL1;
    Return_time = (Return_time - 0x5333)/22;     //多計(jì)時(shí)us部分    計(jì)數(shù)22次為1us
    Return_time = 2000*Ping_count + Return_time; //計(jì)算總時(shí)間,單位是微秒
    distance = 34.0*Return_time/200;             //計(jì)算距離為mm:(34毫米*時(shí)間/200)
}

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:586048 發(fā)表于 2019-8-5 23:16 | 顯示全部樓層
試試看,最近也在調(diào)試超聲波,隨便問一下樓主精度怎么樣
回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2019-8-6 22:37 | 顯示全部樓層
誤差2mm
回復(fù)

使用道具 舉報(bào)

ID:438451 發(fā)表于 2019-11-8 20:34 | 顯示全部樓層
樓主有沒有具體的例程啊
回復(fù)

使用道具 舉報(bào)

ID:669104 發(fā)表于 2019-12-20 22:14 來自手機(jī) | 顯示全部樓層
能具體講講怎么用keil調(diào)試的嗎
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表