找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于STM32的超聲波測距程序以及原理分析

[復(fù)制鏈接]
ID:588966 發(fā)表于 2021-10-24 21:06 | 顯示全部樓層 |閱讀模式
超聲波模塊以及相關(guān)引腳初始化函數(shù)void HC_Init(void)
超聲波觸發(fā)函數(shù)
void HC_pros(void)
中斷服務(wù)程序
//外部中斷讀引腳電平變化,判斷是否發(fā)生中斷
void EXTI9_5_IRQHandler(void)
{
         delay_us(10);                            //RESET=0;         
         if(EXTI_GetITStatus(EXTI_Line7) != RESET)//發(fā)出超聲波,echo輸出高電平
         {
                TIM_SetCounter(TIM2,0);//清空定時器2的值,設(shè)置定時器2的值
                TIM_Cmd(TIM2, ENABLE);                          //如果沒有接收信號,echo一直為1                    
                while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7)); //接收到信號時,echo由1變?yōu)?                        
                TIM_Cmd(TIM2, DISABLE);
                //關(guān)鍵在于計數(shù)周期值,與預(yù)分頻系數(shù)
                dis = TIM_GetCounter(TIM2)*5*34/100.0;//TIM_GetCounter獲得定時器2的計數(shù)值,//傳感器數(shù)值
//                if(dis > 0)
//                {
//                        delay_ms(200);
//                        printf("distance:%f cm", dis);
//                }                 
                EXTI_ClearITPendingBit(EXTI_Line7);
         }
}

附:定時器重裝載值以及預(yù)分頻系數(shù)

TIM_TimeBaseStructure.TIM_Period =4999; //設(shè)置在下一個更新事件裝入活動的自動重裝載寄存器周期的值         計數(shù)到5000為500ms
TIM_TimeBaseStructure.TIM_Prescaler =7199; //設(shè)置用來作為TIMx時鐘頻率除數(shù)的預(yù)分頻值  10Khz(=72M/7199+1)的計數(shù)頻率 計一個數(shù)需要                                                                                  0.00001S=1/10k,其中APB1為36M,在預(yù)分頻系數(shù)不為1時,定時器的時鐘由APB1倍頻而來,即72M

最重要的測距公式解釋:
(定時器2的計數(shù)值*計一個數(shù)所需時間*聲速)/2,聲速340m/s,發(fā)出聲波即開始計數(shù)

聲波觸發(fā)應(yīng)該大家都知道,網(wǎng)上也有相關(guān)介紹,這里不再贅述。

51hei.png

全部代碼51hei下載地址:
超聲波實(shí)驗(yàn).7z (193.73 KB, 下載次數(shù): 45)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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