,,
(云南民族大學 電氣信息工程學院,昆明 650504)
自動導引小車(Automated Guided Vehicle, AGV)是一種能沿預先設定路徑行駛的智能化搬運設備,廣泛應用于現(xiàn)代工業(yè)自動化物流系統(tǒng)中。目前,國內(nèi)現(xiàn)有的AGV控制器仍大多采用可編程控制器或51系列單片機,通過串行處理或輪詢方式執(zhí)行AGV系統(tǒng)任務,其動態(tài)響應能力差[1-2]、系統(tǒng)運行不穩(wěn)定,實際運行過程容易引起脫軌、車身行駛異常。針對這些不足,本文以STM32F103ZET6為核心設計AGV控制器,嵌入微型實時操作系統(tǒng),采用分層模型結構,管理AGV系統(tǒng)的軟硬件資源,以并行處理方式實現(xiàn)實時任務調(diào)度,大幅度提高系統(tǒng)性能,有效克服運行過程中脫軌、車身行駛異常等不足。
AGV控制器的硬件系統(tǒng)主要包括控制系統(tǒng)單元、傳感器單元、人機交互單元、運動控制單元、電源管理單元[3],如圖1所示為AGV硬件系統(tǒng)架構。
控制系統(tǒng)單元主要由STM32單片機最小系統(tǒng)電路組成,主要完成人機交互、邏輯控制以及運動控制算法等功能。
傳感器單元主要由磁導航傳感器、地標傳感器、障礙物檢測傳感器等組成。通過傳感器單元采集磁導航信號、地標指令信號、障礙物檢測信號,然后經(jīng)過光耦隔離輸入控制器單元處理。
人機交互單元主要是在觸摸屏和控制器單元之間通過RS232串口電路建立通信,實現(xiàn)觸摸屏人機界面與控制器之間的信息交互。
運動控制單元主要由前級傳感器信號經(jīng)控制器單元運算處理后輸出控制指令,再輸入AD7225芯片進行D/A轉換,經(jīng)運算放大電路輸出模擬信號給后級驅動。
圖1 AGV硬件系統(tǒng)架構
電源管理單元主要給其它各個單元模塊進行供電以及控制器系統(tǒng)電源電量采集的模擬量信息。電源管理單元由24 V直流電源輸入,經(jīng)過TPS5450電源管理芯片生成12 V、5 V、3.3 V的直流電源。其中,24 V給觸摸屏、伺服驅動電路供電,12 V給各組傳感器供電,5 V給信號放大電路、邏輯電平轉換電路供電,3.3 V給控制芯片STM32F103ZET6供電。
μC/OS-II是專門為嵌入式系統(tǒng)設計的硬實時內(nèi)核,其內(nèi)核精簡,多任務管理功能十分完善,實時性能好,并且具有可裁剪、可固化、源碼開放、可移植性強的特點[4]。同時,μC/OS-II是搶占式的多任務操作系統(tǒng),總是運行就緒列表中優(yōu)先級最高的任務,其核心是任務調(diào)度器。μC/OS-II有5種任務狀態(tài),分別是運行態(tài)、就緒態(tài)、掛起態(tài)、睡眠態(tài)以及中斷服務態(tài),通過調(diào)度實現(xiàn)在這5種狀態(tài)之間的任務轉換。本控制器在設計系統(tǒng)任務時,通過任務調(diào)度的方式使控制器在滿足功能需求的同時實現(xiàn)程序設計的合理化、最優(yōu)化[5],從而實現(xiàn)AGV的直行、轉彎、避障、人機交互等功能。圖2所示為本文設計的控制器軟件體系架構。
本系統(tǒng)軟件平臺采用分層、模塊化結構,包括物理層、MAC層和應用層。系統(tǒng)軟件包括Cortex-M3標準外設庫、Cortex-M3內(nèi)核庫、嵌入式實時微型操作系統(tǒng)μC/OS-II。應用層包括電源管理控制庫、傳感器信號分析處理庫和運動控制庫,主要進行磁導航傳感器數(shù)據(jù)采集、數(shù)值插補計算、誤差補償、校正等任務,地標傳感器的中斷任務處理、指令采集、分析、生成和輸出任務,障礙物檢測傳感器的信號檢測和執(zhí)行任務,電量數(shù)據(jù)的采集和電源調(diào)度任務,運動控制的速度控制任務及其調(diào)度,人機交互操作任務。
圖2 軟件體系架構
通過對任務的合理劃分可以有效地簡化程序設計,提高系統(tǒng)的動態(tài)響應性能和穩(wěn)定性,本控制器根據(jù)系統(tǒng)任務需求,將系統(tǒng)任務進行劃分,采用靜態(tài)優(yōu)先級設置,賦予各個任務一定的優(yōu)先級別。如表1所列為任務的具體劃分和優(yōu)先級設置。
如圖3所示為本控制器系統(tǒng)任務調(diào)度切換示意圖。系統(tǒng)啟動后,μC/OS-II實時操作系統(tǒng)和硬件首先進行初始化配置,然后CPU的控制權由操作系統(tǒng)開始管理,CPU內(nèi)核開始對任務按優(yōu)先級循環(huán)調(diào)度。
表1 任務優(yōu)先級分配
圖3 任務調(diào)度切換示意圖
Modbus協(xié)議是Modicon公司開發(fā)的一種通信協(xié)議,采用主從問答方式工作,允許一個主機與一個從機或者多個從機通信,廣泛應用于自動化控制領域,已成為一種通用的工業(yè)標準,控制器與觸摸屏之間可以利用此協(xié)議進行通信。
FreeModbus是一位奧地利人寫的針對嵌入式應用的一種免費通用的Modbus從機協(xié)議,其代碼規(guī)范、易移植、
可裁剪、對軟硬件要求低、資源占用少[6-7]。本系統(tǒng)人機交互任務可以通過移植FreeModbus協(xié)議棧到STM32內(nèi)核,實現(xiàn)觸摸屏對系統(tǒng)信息的實時監(jiān)測和控制。本系統(tǒng)采用臺達DOP-B07系列觸摸屏,兼容Modbus RTU模式。通過臺達DOPSoft軟件設計觸摸屏界面,將觸摸屏設為主站,控制器設為從站,采用Modbus協(xié)議RTU模式進行通信。
本系統(tǒng)設計的觸摸屏主要用來監(jiān)控AGV的電量、速度、行駛狀態(tài)等信息,以及顯示主板各個傳感器和電機工作狀態(tài)是否正常。系統(tǒng)基于STM32內(nèi)核配置使用Modbus從機的 01功能和06功能,其分別在內(nèi)核開辟2個字節(jié)的離散變量地址存儲區(qū)域usDiscreteInputBuf[0]~usDiscreteInputBuf[1],以及 8個字節(jié)的保持寄存器地址存儲區(qū)域usRegHoldingBuf[0]~usRegHoldingBuf[7],然后通過配置STM32內(nèi)部的TIM2通用定時器,以及UART1寄存器進行串口通信,最終實現(xiàn)AGV行駛狀態(tài)、傳感器運行狀態(tài)等信息的人機交互。如表2所列為主機觸摸屏和從機控制器之間的存儲地址映射。
表2 主從地址映射表
障礙物檢測是通過采集激光傳感器掃描傳回的編碼信息,調(diào)用Read_Obstacle()函數(shù)對采集的編碼信息讀取分析,如果掃描的距離小于系統(tǒng)設定的安全距離,則調(diào)用Avoidance_Obstacle_Process_task()函數(shù),使電機停止運行。Obstacle_Check_task()的主要代碼如下所示:
VoidObstacle_Check_task(void *pdata){
while(1){
Read_Obstacle();
}
//讀取傳感器編碼
if(Command_Security_Obstacle==Unsafe)
//讀取編碼信息是否小于安全距離Avoidance_Obstacle_Process_task();
//執(zhí)行避障處理任務
OSTimeDlyHMSM(0, 0, 0, 20);
}
//系統(tǒng)延時20ms,讓出CPU使用權
2.3.1磁地標指令讀取時隙糾錯方法
AGV控制系統(tǒng)任務中地標指令讀取是AGV平穩(wěn)運行的關鍵任務之一,如果地標讀取錯誤,可能導致行駛異常甚至災難性后果[8]。為了提高命令地標指令讀取的準確性,本文設計了一種指令讀取時隙糾錯方法,使AGV在不同速度、不同負載的條件下,有效降低地標命令誤碼率,提高系統(tǒng)穩(wěn)定性。磁地標指令讀取主要通過觸發(fā)地標磁條,使控制器開始讀取地標指令,解析生成相應的控制指令,從而控制AGV執(zhí)行加減速、停車、轉向等功能[8]。
2.3.2軟件設計
如圖4所示為地標指令讀取流程圖。本控制器設計的地標指令讀取時隙糾錯方法,每組地標傳感器有3個磁極信號采集輸入端,分別是觸發(fā)地標南極S1、命令地標南極S2、命令地標北極N1,當S極觸發(fā)記為字符S,N極觸發(fā)記為字符N。當?shù)貥薙1被觸發(fā),產(chǎn)生上升沿信號輸入STM32的PF0口而觸發(fā)外部中斷0時,執(zhí)行中斷函數(shù)EXTI0_IRQHandler(),通過I2C總線觸發(fā)實時時鐘芯片的時鐘輸出功能,并產(chǎn)生32 Hz的脈沖輸入PB8口,觸發(fā)外部中斷8,執(zhí)行中斷函數(shù)EXTI9_5_IRQHandler(),開始計時指令讀取時間。當指令讀取時間超過設定的時隙閾值時,則判定指令讀取出錯,此時自動清除地標指令輸入存儲區(qū)的指令代碼,初始化指令存儲區(qū),重新開始讀取指令。本控制器設計的計時時隙閾值為6 s。
圖4 地標指令處理流程圖
上述兩個中斷函數(shù)主要代碼如下:
void EXTI0_IRQHandler(void){
if(EXTI_GetITStatus(EXTI_Line0)!=RESET)
//判斷外部中斷0發(fā)生{
EXTI_ClearFlag(EXTI_Line0); //清除外部中斷0 標志位
Trigger_Marker_En = 1;//觸發(fā)地標標志置位
RTC_CLKOUT_Control(Enable,Freq_32);
//使能實時時鐘產(chǎn)生32Hz時鐘
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
//清除外部中斷0標志位,退出中斷
void EXTI9_5_IRQHandler(void){
if(EXTI_GetITStatus(EXTI_Line8)!=RESET){
//判斷外部中斷8發(fā)生
EXTI_ClearFlag(EXTI_Line8);//清除外部中斷8標志位
if(Slot_Count>65534)//判斷時隙計數(shù)值
Slot_Count = 0;//計數(shù)值歸零
else Slot_Count++;//否則繼續(xù)計數(shù)
EXTI_ClearITPendingBit(EXTI_Line8);
}
}//清除外部中斷8標志位
2.4.1磁導航偱跡偏差補償控制算法
AGV控制系統(tǒng)任務中導航循跡任務也是AGV平穩(wěn)運行的關鍵任務之一[9-10]。一旦導航偏差過大,將導致AGV脫軌。本系統(tǒng)設計了磁導航偱跡偏差補償控制算法。如圖5所示的算法模型,每個點的數(shù)值為其所在位置的權值,算法表達如下所示:
(1)
式(1)中,ai為每個位置磁導航傳感器的權值,N為被觸發(fā)磁導航傳感器的個數(shù),ε為磁導航偱跡偏移值。其中,第1組為直行行駛模型,傳感器8和9感應到磁極信號而觸發(fā),ε=(8+9)/(1+1)-8.5=0。第2組為左轉彎模型,傳感器5、6感應到磁極信號而觸發(fā),ε=(5+6)/(1+1)-8.5= -3。第3組為右轉彎模型,傳感器11、12感應到磁極信號而觸發(fā),ε=(11+12)/(1+1)-8.5= 3。
圖5 偱跡算法模型
2.4.2軟件設計
本系統(tǒng)采用8位磁導航傳感器,即上述模型5、6、7、8、9、10、11、12共8個點作為磁導航傳感器的磁條信號采集點。如圖6所示為導航循跡流程圖。根據(jù)地標傳感器觸發(fā)采集到的地標指令,調(diào)用 Command_Analysis()函數(shù)解析指令,再調(diào)用Offset_Analysis()實時計算并反饋磁導航傳感器循跡偏移值,同時調(diào)用AGV_Motion_Control()函數(shù),將偏移值反饋給驅動信號輸入端進行補償計算,再調(diào)用 WR_Speed()函數(shù)將補償計算后的值經(jīng)過D/A芯片轉換,輸出相應驅動電壓信號,從而實現(xiàn)AGV直行、轉彎、加減速等功能。表3為AGV地標指令功能編碼。
圖6 導航循跡流程圖
地標指令編碼功能說明地標指令編碼功能說明NNNS高速行駛SNNS調(diào)轉行駛NNSN中速行駛SNSN左轉彎行駛NNSS低速行駛SNSS右轉彎行駛NSNN停止行駛SSNN直線行駛
圖7 AGV實驗平臺
功能測試主要對本文設計的控制器人機交互任務、障礙物檢測任務、運動控制任務、地標指令讀取任務的功能及系統(tǒng)性能驗證。如圖7所示為搭載本文設計的AGV控制器實驗平臺。當系統(tǒng)上電時,觸摸屏開啟,人機界面顯示AGV的電量、速度等狀態(tài)信息,系統(tǒng)上電默認設置為中速直行,設定地標指令讀取時隙閥值為6 s,如圖8所示為AGV運行過程中地標指令界面。通過安裝在控制器主板上的驅動電壓信號采集裝置得到各驅動電機的驅動電壓信號,如表4所列。本控制器設計了4檔(零速、低速、中速、高速)速度驅動電壓信號,充分滿足實際生產(chǎn)中的運行需求。從采集的各個驅動輪驅動電壓信號可以驗證,當AGV檢測到障礙物時,各檔速度模式下電機驅動均
立即輸出0 V的信號,使系統(tǒng)迅速停機。同時,當本系統(tǒng)采用差速驅動方式實現(xiàn)AGV轉彎時,各檔速度模式下4個電機的驅動信號值均非常穩(wěn)定。實測表明,AGV系統(tǒng)運行穩(wěn)定可靠、行駛平穩(wěn),沒有出現(xiàn)AGV脫軌、車身行駛異常的情況。
圖8 地標指令及行駛信息界面
驅動輪直行驅動電壓/V右轉驅動電壓/V左轉驅動電壓/V檢測到障礙物時驅動電壓/V零速低速中速高速零速低速中速高速零速低速中速高速零速低速中速高速前左00.61.73.601.02.14.000.31.43.00000前右00.61.73.600.21.33.200.92.13.80000后左00.61.73.601.02.14.000.41.53.10000后右00.61.73.600.21.33.201.02.13.90000