【關鍵詞】STM32;水面無人艇;PS2 無線手柄;增量式PID 算法
引言
隨著無人車和無人機技術的成熟,越來越多的機構,包括研究所、院校和企業等,開始研究和應用水面無人艇[1]。水面無人艇是一種能夠在海洋、河流等水域環境中執行一些復雜或危險任務的平臺,如水質檢測、事故搜尋救助等,與載人船舶和浮動平臺等設備相比,無人艇具備操縱性強、部署方便、覆蓋范圍廣且成本較低的優點,這使得無人艇具有廣闊的應用前景[2]。
本文設計的水面無人艇控制系統是其核心部件,可通過PS2無線手柄或遙控實現多種航行模式,包括前進后退、轉向及固定軌跡航行,確保了方向和速度的精確控制。系統采用增量式PID算法結合霍爾編碼器測量的速度,實現對推進器轉速的閉環控制,提高了航行效率。同時,集成避障模塊以提高安全性,使無人艇能靈活、安全執行任務。
本文設計了一種基于STM32單片機的水面無人艇控制系統,包括方向控制、無線通信和緊急制動功能。如圖1所示,系統由STM32單片機、電源、PS2無線遙控、避障模塊、無刷電調和裝有霍爾編碼器的水下推進器組成。采用STM32F103ZET6單片機作為主控制核心,利用霍爾編碼器實時監測轉速,并通過增量式PID算法對無刷電調的PWM值進行精確調整,以穩定推進器速度。PS2無線手柄用于航行模式控制,紅外避障傳感器實現緊急制動,提升系統安全性能。
該系統主要硬件包括主控芯片、PS2無線手柄、電源模塊、避障模塊以及驅動模塊。如圖2所示,這些模塊之間的電路連接,構成了整個系統的硬件架構。以下針對各模塊進行說明:

1.主控芯片:采用STM32F103ZET6單片機,具有高性能、低功耗,支持多種控制指令,易實現精確控制。配備電源模塊和RTC晶振電路,確保系統穩定運行和時鐘準確性[3-4]。
2.無線手柄:PS2無線手柄的信號接收器有9個引腳,其中DI/DAT和DO/CMD用于全雙工數據通信,CS/SEL用于控制通信狀態,GND和VDD提供電源。通信啟動時,CS/SEL引腳接收低電平,通信結束后返回高電平[5]。通信初始階段,STM32單片機向手柄發送“0x01”命令請求ID信息,手柄回復“0x41”(綠燈)或“0x73”(紅燈)以確認模式。隨后,控制板發送“0x42”命令獲取數據,手柄以“0x5A”響應[6]。
3.電源模塊:本文選擇+12V的鋰電池作為系統的主電源,為無刷雙向電調供電的同時,通過直流穩壓電源轉化器將+12V電壓轉換為+5V為STM32單片機供電。
4.避障模塊:紅外避障傳感器用于檢測物體并觸發相應的操作信號[7]。傳感器有3個引腳:VCC、GND、OUT,其中OUT連接到單片機的I/O口。模塊安裝于無人艇前后端,采用交叉檢測方式。當檢測到前方障礙物時,綠色指示燈點亮,同時OUT端口輸出低電平信號[8]。STM32單片機接收到信號后執行緊急制動程序,水下推進器反向運行,提供相反推力,確保安全。
5.驅動模塊:無刷雙向電調是專為控制無刷電機而設計的裝置,可實現雙向控制功能,調節電機的轉速和運行方向。通過STM32單片機輸入的PWM控制信號實現,具有高效率、低噪音和精準控制等特點,并提供多項保護功能確保系統安全。

(一)增量式PID控制算法
增量式PID控制算法是基于比例-積分-微分控制器的閉環控制算法,通過計算當前采樣時刻的誤差值與上一采樣時刻的誤差值之差,來得到控制器的輸出增量[9]。該增量會被加到前一時刻的控制器輸出上,產生新的控制器輸出。計算公式如下[10]:
(1)式中:ΔU(k)表示當前時刻的控制器輸出增量,Kp、Ki和Kd分別代表比例、積分和微分增益,e(k)表示當前時刻的誤差值,e(k-1)表示前一時刻的誤差值,e(k-2)表示前兩個時刻的誤差值。
增量式PID控制算法相較傳統PID算法,具有更高精度和響應速度,能更快、更準確地響應系統變化,實現更穩定可靠的控制效果。
(二)仿真實驗分析
在MATLAB中進行增量式PID控制算法仿真,分為未施加干擾和施加干擾情況下的對比。圖3為增量式PID跟蹤響應曲線,描述了系統經過增量式PID控制調節后實際位置與理想位置之間的變化情況。圖4為增量式PID跟蹤誤差曲線,反映了系統在增量式PID控制調節后產生的誤差變化情況。
從圖3和圖4可以看出,在時長為1s的仿真情景下,當在0.1s施加的干擾信號出現時,系統的位置會受到一定影響,但整體上能夠較好地追蹤理想位置。圖4顯示系統加入干擾信號時,誤差會有所增加,但經過PID控制算法調節,其誤差逐漸減小,最終趨于穩定。綜合來看,該控制系統不管在面對干擾信號時,能夠較好地追蹤理想位置,調節速度快,并且具有較小的誤差。

控制系統采用模塊化編程,將系統初始化、驅動、PS2無線遙控、避障等功能分解為獨立可復用的模塊,每個模塊專注于特定任務或功能,并通過明確定義的通信方式進行交互。
(一)主程序設計
系統上電后進行初始化工作,包括對時鐘、延時函數、定時器等進行設置。系統主程序流程如圖5所示,初始化完成后,系統進入等待命令狀態。當收到無線遙控手柄指令時,執行相應程序,完成航行方式,并實時檢測是否有障礙物。如果檢測到障礙物,則立即調用避障模塊進行制動。如果沒有障礙物,則繼續執行無線遙控指令,直到任務結束。

(二)驅動模塊程序設計
驅動模塊子程序初始化后,根據電機期望轉速和狀態設置PWM值以控制電機速度和方向。使用霍爾式編碼器測量電機實際轉速,通過定時計數器捕獲脈沖信號數量,并利用增量式PID算法對速度偏差進行補償,實現閉環控制,確保電機穩定保持目標速度,使無人艇運動更加平滑和精準。
(三)避障模塊程序設計
避障模塊子程序初始化完成后,設置不同制動函數,其中包含不同的電機轉速方向和速度,避障模塊實時檢測是否有障礙物,當檢測到障礙物時,OUT端口輸出低電平信號并判斷航行方向,進而調用相應的制動函數,使水面無人艇得到相反的推力,克服慣性停止下來。

本設計旨在實現一個具備運動控制和緊急制動功能的水面無人艇,能夠根據PS2無線手柄傳輸的控制信號進行運動,并在遇到障礙物時自動實施緊急制動。為了驗證設計目標,按照以下描述進行測試:
1)進行PS2無線手柄信號穩定測試:使用手柄的搖桿、按鈕等進行連續30分鐘的操作,驗證無人艇能夠在可遙控距離內穩定受控。
2)進行避障模塊檢測區域測試并進行整體功能測試:確認避障模塊安裝后可以檢測無人艇前后端的范圍,并結合PS2無線手柄控制和緊急制動功能進行整體功能測試。
經過測試和調試,結果顯示避障模塊可檢測的范圍是無人艇前后端90°扇形區域。同時,無線手柄的控制信號穩定可靠,在30次遙控測試中,有28次能夠實現緊急制動,成功率達到93%。圖6展示了無人艇水面測試的情況。
本文設計的以STM32單片機為核心處理器的水面無人艇,能夠通過PS2無線手柄進行多種航行方式控制,結合增量式PID控制算法實現動力系統的穩定控制。此外,添加避障模塊和緊急制動功能,提升航行安全性。該系統具備簡單、低能耗和便捷操作等特點,為水面無人艇的遙控控制和安全性提供了可行解決方案,具有應用價值。