日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于STM32的避障小車

          基于STM32的避障小車

          作者:MarsZ 時間:2025-04-18 來源:EEPW 收藏


          本文引用地址:http://yuyingmama.com.cn/article/202504/469573.htm

          1   概述

          基于的遙控避障循跡小車,超聲波模塊實現(xiàn)避障功能,總體來說還是比較簡單的,對初學者很友好。

          調整舵機方向:通過的GPIO引腳向舵機發(fā)送控制信號,逐步調整其轉動角度,以改變小車頭部的朝向。可以使用簡單的算法(如逐步掃描或根據(jù)超聲波傳感器數(shù)據(jù)直接調整)來確定舵機的最佳轉向角度。

          檢測新方向上的障礙物:在舵機調整方向后,再次使用超聲波傳感器測量新方向上的障礙物距離。

          選擇行駛路徑:根據(jù)新方向上的障礙物距離,決定小車是繼續(xù)在該方向上行駛、返回原方向、還是嘗試其他方向。

          控制驅動電機:根據(jù)避障決策,控制小車的驅動電機以實現(xiàn)前進、后退或原地轉向等操作。

          電機驅動模塊

          1744985368266949.png

          將GPIOA口的二號和三號引腳設置為復用推挽輸出,使其不僅具有高驅動能力還能使用引腳復用的功能,作為PWM輸出口。然后設置4、5、6、7分別為電機的方向控制引腳。

          1744985426941920.png

          開啟定時器二的時鐘(不開啟的話也是默認開啟的),配置實基單元為不分頻、向上計數(shù)、計數(shù)周期為100、預分頻為36分頻(計數(shù)周期100 是為了計算占空比的時候好計算,36分頻是為了配合計數(shù)周期讓輸出頻率達到20000Hz,從而解決電機受阻時發(fā)出噪聲)、重復計數(shù)器設置為0(只有高級定時器才有)。

          輸出比較配置:設置默認配置、比較模式為PWM1、極性選擇無、使能、CCR 值為0。

          使能定時器二。

          1744985493835644.png

          1744985525995483.png

          通過控制方向控制引腳高低電平變化來實現(xiàn)控制正轉還是反轉。

          當方向控制引腳被設置為高電平時,驅動電路內部的邏輯電路會相應地調整電流的流向,使得電機內部磁場的方向發(fā)生變化,從而驅動電機開始正轉。這一過程中,電能的轉換與傳輸效率至關重要,它決定了電機能否迅速、平穩(wěn)地響應控制指令。

          相反地,當方向控制引腳被設置為低電平時,驅動電路會接收到另一個電平信號,并據(jù)此調整電流路徑,改變電機內部磁場的方向,使電機開始反轉。這一切換過程迅速且精確,是實現(xiàn)電機雙向控制的關鍵。

          image.png

          直線行駛:當需要小車直線行駛時,同時給兩側電機發(fā)送相同的控制信號,使它們以相同的速度和方向旋轉。這樣,小車兩側的車輪就會以相同的速度和方向前進,從而保持直線行駛。

          轉向行駛:

          左轉:為了實現(xiàn)左轉,可以增加左側電機的速度或減小右側電機的速度(或使右側電機反轉,但通常不推薦這種方式,因為它可能導致小車打滑或不穩(wěn)定)。這樣,左側車輪會比右側車輪轉得更快,從而使小車向左偏轉。

          右轉:與左轉相反,為了右轉,可以增加右側電機的速度或減小左側電機的速度(或使左側電機反轉)。

          這樣,右側車輪會比左側車輪轉得更快,從而使小車向右偏轉。

          超聲波測距:

          1744985618447881.png

          1745155665394002.png

          的某個GPIO 引腳配置為推挽輸出模式,用于向HC-SR04發(fā)送觸發(fā)信號(Trig)。

          將另一個GPIO 引腳配置為浮空輸入模式,用于接收HC-SR04的回波信號(Echo)。

          2.發(fā)送超聲波

          通過向Trig 引腳發(fā)送一個至少10 微秒的高電平信號來觸發(fā)HC-SR04發(fā)送超聲波。

          發(fā)送完觸發(fā)信號后,將Trig引腳拉低,等待Echo引腳接收回波信號。

          3.接收回波并計算距離

          初始化一個定時器或計數(shù)器,用于測量Echo引腳從低電平變?yōu)楦唠娖剑ǔ暡òl(fā)出)到再次變?yōu)榈碗娖剑ǔ暡ǚ祷夭⒈唤邮眨┑臅r間差(T)。

          定時器或計數(shù)器應配置為足夠高的頻率,以便精確測量微秒級的時間差。

          使用公式距離=(T*聲速)/2來計算障礙物距離,其中聲速約為340m/s(或轉換為cm單位:距離(cm)=(T*100*聲速(cm/s)/2)。

          超聲波避障:

          1744986162238957.png

          void obstacle_avoidance(void){

          uint16_t Dis1 = 0;

          uint16_t Dis2 = 0;

          uint16_t Dis3 = 0;

          uint16_t Dis4 = 0;

          uint16_t Dis5 = 0;

          Speed1 = Motor_Speed();

          Car_ForWard(Speed1);

          Dis1 = Test_Distance();

          Serial_SnedNumber(Dis1,3);

          OLED_ShowNum(4,11,Dis1/100%10,1);

          OLED_ShowNum(4,12,Dis1/10%10,1);

          OLED_ShowNum(4,13,Dis1%10,1);

          if(Dis1 < 15){

          Car_Stop();

          Servo_SetPwm(20);

          Servo_SetPwm4(30);

          Delay_ms (1000);

          Dis2 = Test_Distance();

          Serial_SnedNumber(Dis2,3);

          if(Dis2 < 15){

          Car_Stop();

          Servo_SetPwm(160);

          Servo_SetPwm4(30);

          Delay_ms (1000);

          Dis3 = Test_Distance();

          Serial_SnedNumber(Dis3,3);

          if(Dis3 < 15){

          Car_Stop();

          Servo_SetPwm(90);

          Servo_SetPwm4(0);

          Car_Retret(Speed1);

          Servo_SetPwm(160);

          Servo_SetPwm4(90);

          Delay_ms (1000);

          Dis4 = Test_Distance();

          Serial_SnedNumber(Dis4,3);

          if(Dis4 > 15){

          Servo_SetPwm(90);

          Servo_SetPwm4(0);

          Car_Left(Speed1);

          Delay_ms (1000);

          }else{

          Servo_SetPwm(20);

          Servo_SetPwm4(30);

          Delay_ms (1000);

          Dis5 = Test_Distance();

          Serial_SnedNumber(Dis5,3);

          if(Dis5 > 15){

          Servo_SetPwm(90);

          Servo_SetPwm4(0);

          Car_Right(Speed1);

          Delay_ms (1000);

          }else{

          Servo_SetPwm(90);

          Servo_SetPwm4(0);

          Car_Right(Speed1);

          Delay_ms (4000);

          }

          }

          }else{

          Servo_SetPwm(90);

          Servo_SetPwm4(0);

          Delay_ms (1000);

          Car_Left(Speed1);

          Delay_ms (1000);

          Car_ForWard(Speed1);

          }

          }else{

          Servo_SetPwm(90);

          Servo_SetPwm4(0);

          Delay_ms (1000);

          Car_Right(Speed1);

          Delay_ms (1000);

          Car_ForWard(Speed1);

          }

          }else{

          Car_ForWard(Speed1);

          }

          }

          調整舵機方向:通過STM32的GPIO引腳向舵機發(fā)送控制信號,逐步調整其轉動角度,以改變小車頭部的朝向。可以使用簡單的算法(如逐步掃描或根據(jù)超聲波傳感器數(shù)據(jù)直接調整)來確定舵機的最佳轉向角度。

          檢測新方向上的障礙物:在舵機調整方向后,再次使用超聲波傳感器測量新方向上的障礙物距離。

          選擇行駛路徑:根據(jù)新方向上的障礙物距離,決定小車是繼續(xù)在該方向上行駛、返回原方向、還是嘗試其他方向。

          控制驅動電機:根據(jù)避障決策,控制小車的驅動電機以實現(xiàn)前進、后退或原地轉向等操作。

          (本文來源于《EEPW》20504)



          關鍵詞: 202504 STM32 避障小車

          評論


          相關推薦

          技術專區(qū)

          關閉