張偉偉 丁宇豪

摘 要
本設計以安徽省機器人競賽為背景,采用STM32單片機為核心微處理器。本設計采用模塊化的設計方法,對應用于接力賽的智能小車軟件部分進行設計,主要設計內容包括:信息采集模塊,尋跡模塊,接力模塊,電機驅動模塊以及控制算法的設計。在實際比賽過程中,智能小車能夠自動適應直道、彎道、接力區、停止區等各種路況。通過PID算法實現智能變速,在實際行駛過程中的行進速度達到1.2m/s,達到智能小車接力賽的設計目標和要求。
關鍵詞
智能小車;單片機;PID;STM32
中圖分類號: TP242 ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼: A
DOI:10.19694/j.cnki.issn2095-2457.2020.07.052
0 引言
智能小車是機器人的一個分支,是一項涉及到計算機技術、傳感器技術、自動控制技術、通信技術、人工智能技術等相關技術的綜合性系統。它是輪式機器人的一種,很適合在人類無法生存的環境下工作。本課題 “應用于接力賽的智能小車軟件部分設計”,是針對于“恩智浦智能車大賽”的要求所設計的軟件系統,希望在比賽之外它也可以用于眾多領域解決現實問題。
1 本課題研究的內容
本設計所述的智能車是一種循跡小車,能夠在一定的區域內沿著給定的軌跡自動行駛(采用與白色地毯相反的黑色引導線作為行駛軌跡),運行過程由信息采集模塊、循跡控制模塊和電機控制模塊三個部分完成。此外,還需要完成兩輛小車之間的接力棒傳遞過程。小車的硬件控制核心選用的是STM32F103VET6微處理器。軟件平臺為Keil MDK開發環境。在本次設計中使用了數字PID軟件算法來調節左右輪的轉速差,實現智能小車的平滑轉彎與平穩循跡。一號智能小車沿著黑色軌跡線運行,并在接力區域傳遞接力棒,由二號車完成到終點的運行。
2 系統軟件設計
2.1 開發環境
本設計選用的微控制芯片是STM32F103VET6,該芯片基于ARM核,所以有很多基于ARM嵌入式的開發環境都適用于本設計的軟件程序開發。本設計選擇由德國ARM公司開發的微控制軟件開發平臺Keil MDK作為軟件開發環境。MDK-ARM軟件為基于Cortex-M、Cortex-R4、ARM7、ARM9處理器設備提供了一個完整的開發環境。下面介紹軟件開發的整個過程:
2.1.1 USB接口
智能車通過USB接口將程序下載到主控制芯片。使用一個連接PC機USB接口與智能車的USB接口相連。通過此接口將程序下載到智能車中。支持下載目標程序、檢查內車寄存器、單步運行程序、在程序中插入斷點運行等一系列操作。
2.1.2 Keil MDK環境下的軟件開發
首先在Keil MDK中創建一個新的工程,在新的工程中選擇智能車使用的主控制芯片,并進行相關配置;然后開始編寫程序;程序編寫完成后,在MDK中進行程序編譯;如果有錯誤發生,則修改源程序文件,直到程序無誤,此時將程序文件燒錄到芯片中。
2.2 系統程序設計
智能小車的控制主程序的主要任務是完成系統的初始化、處理信息采集、小車的循跡控制、電機的控制、舵機轉動、紅外對管檢測。當檢測到一號車到達接力區的時候應該停在接力區,將接力棒傳給二號車。當檢測二號車接收到接力棒的時候,二號車啟動循跡前進。當檢測到二號車到達停止區時,二號車停在停止區內。
2.3 信息采集模塊
智能車要實現循跡功能,就需要采集賽道上的黑色引導線的軌跡信息,這部分就需要信息采集模塊來實現。通過光電傳感器采集道路上的黑白線位置信號,根據采集到的信號將不同的信號的電壓值輸入到主控制器內,在主控制器內將輸入的電壓信號轉化為所需要的工程值,根據不同的工程值大小判斷黑白線。
2.4 循跡控制模塊
該模塊根據道路信息模塊所采集的道路信息和判斷的黑白線信息來判斷小車在賽道中的位置,根據小車在賽道中的位置通過調節左右輪電機的轉速差來控制小車的行動方向從而調節小車位置。當檢測到小車在賽道偏左位置時,左電機的轉速大于右電機;當檢測到小車在賽道偏右位置時,右電機的轉速大于左電機;當檢測到小車位置在賽道中間位置時,左右電機轉速一致。
2.5 接力模塊
整個設計中接力模塊分為兩個部分。
第一部分為一號車的舵機控制模塊:當一號車檢測已經到達接力區并穩定停車時,控制舵機的轉動,當舵機轉動到一定的角度的時候,接力棒完成投遞動作。
第二部分為二號車的紅外對管檢測模塊:在二號車沒有接收到接力棒的時候紅外對管是導通的,這個時候程序中該位為高電平,二號車在接力區處于停止狀態;當二號車檢測到接收到接力棒時,紅外對管是不導通的,這個時候程序中該位為低電平,二號車啟動。
2.6 電機控制模塊
在實際的軟件算法設計中,需要對參數進行先比例,后積分,再微分的整定步驟[1]。首先整定比例部分,如果調節比例調節器參數,系統控制的效果沒有達到設計要求的時候,需要使用積分環節,若同時使用比例和積分環節,能消除靜差,但調試過程仍達不到設計要求時,就需要加入微分環節。調速程序中采用的是增量式PID算法。
本設計的PID算法選取比例控制單元(Kp)和微分控制單元(Td),所以在算法程序中只需要設置比例放大系數(P)和微分時間常數(D),實際算法程序如下:
PID算法程序:
wucha_d=loc-lastloc[4];//誤差計算
pwm_out=P*loc+wucha_d*D;//誤差處理
PWM輸出:
pwm_final_L=pwm_max+pwm_out;//左電機PWM輸出
pwm_final_R=pwm_max-pwm_out;//右電機PWM輸出
一號車的參數設置:P=330,D=900,pwm_max=900;
二號車的參數設置:P=200,D=720,pwm_max=900;
首先對比例放大系數(P)進行整定,將P的值從零開始逐步增大,觀察小車循跡時翻譯的快速性,當小車循跡時反應的快速性良好時,開始對微分時間常數(D)進行整定,最終得到上述的P、D參數。
3 系統調試
通電檢查:給智能車通電,檢測各模塊是否供電正常,尤其是電機的驅動電壓和電流,需要時電機的驅動電壓和電流保持在額定范圍內,才能使電機保持正常工作。
程序調試:檢查程序是否已經燒錄到芯片中,在各模塊中能否正常運行。
整機調試:整體調試智能車的各個參數。
(1)光電傳感器的參數調節:分別讓光電傳感器在黑色和白色的區域工作采集此時7個通道的各路參數,共采集10組計算平均值,用平均值作為所需要的參數。
(2)PID參數調節:PID的參數調節需要根據參數PID參數整定的步驟一步步進行調節,直至智能車的循跡效果和轉彎效果達到設計要求。
通過優化和完善,智能車基本實現了設計和比賽的要求,在賽道上能夠正常運行,并且實現了平均1.2m/s的行駛速度。
4 結論
本文從信息采集模塊,尋跡模塊,接力模塊,電機驅動模塊以及控制算法等幾個方面完成了應用于接力賽的智能小車的軟件部分設計,給出了軟件設計流程,詳細闡述了設計思路。光電傳感器采集道路上的黑白線位置信號,通過左右電機的PWM控制來實現控制電機的正轉、反轉、停止,通過PID的參數整定一步步進行調節,直至智能車的循跡效果和轉彎效果達到設計要求。經過模塊調試和整機調試,本設計控制精確度高,可靠性強,具有一定的實用價值。
參考文獻
[1]雷慧杰.基于STM32的直流電機PID調速系統設計[J].現代電子技術2016.08:165-167.
[2]劉松斌,王海星,李碩恒.基于STM32的直流電機PWM調速系統[J].化工自動化及儀表2016.08:834-837.
[3]朱向慶,何昌毅,朱萬鴻,et al.基于STM32單片機的通信技術實驗系統設計[J].實驗技術與管理,2019(8).