郭寧,郭志成
(蘭州工業學院 電氣工程學院,甘肅蘭州,730050)
工業機器人作為現代制造業的重要組成部分,不斷得到廣泛的應用。工業機器人控制系統的設計和實現對于提高機器人的精度、靈活性和效率起著至關重要的作用[1]。本文基于STM32單片機、微型計算機和移動終端,設計了一套低成本、移植性好的工業機器人控制系統。本文介紹了控制系統的總體方案和重點模塊設計,包括MCU模塊、電機模塊、測距反饋模塊等。在硬件設計中,重點介紹了單片機基本電路和步進電機控制電路。在單片機軟件設計中,分析了系統功能、通信協議和電機控制程序。編程語言及控制軟件設計部分介紹了編程語言概述和程序語言代碼實現,旨在降低工業機器人控制系統的使用門檻,服務更多的制造企業。
工業機器人控制系統是一種典型的實時控制系統,其主要功能包括位置控制、速度控制、力控制、軌跡規劃等。其中位置控制和速度控制是最基本的控制功能。位置控制是指通過控制機器人的運動軌跡,將機器人末端的位置移動到目標位置,實現定位、取放和裝配等操作[2]。速度控制是指通過控制機器人的運動速度,控制機器人的運動過程,實現快速準確地到達目標位置。力控制是指通過控制機器人的輸出力矢量,實現對工作件施加恰當的力,以實現切割、壓合和拆卸等操作。軌跡規劃是指通過給定機器人末端的起始位置和目標位置,計算機器人的運動軌跡,以實現平滑的運動過程,避免碰撞和抖動等不良影響。綜上所述控制系統功能如圖1所示。

圖1 控制系統功能圖
首先參考市場上已有的工業機器人控制系統的功能,提出了一個低成本、移植性好的控制系統。該系統采用了STM32單片機、微型計算機和移動終端,實現了電機控制、信號采集、信號輸出和通信任務[3]。同時,對各種工業機器人結構和控制系統組成方案進行了分析,以便更好地設計出適合實際應用的控制系統。在具體實現上,設計了硬件和軟件兩部分。硬件部分包含了步進電機驅動器控制、TTL轉串口、輸入輸出信號以及AD信號采集等功能。軟件部分則由三個模塊組成:單片機程序、計算機程序和手機APP。單片機程序負責電機控制、信號采集和通信等任務;通過計算機軟件,可以方便地對工業機器人的編程語言進行編輯和執行,對平臺位置進行演示,對信號、點位等進行人機交互。根據以上功能需求設計系統方案如圖2所示。

圖2 系統方案圖
(1)MCU 模塊
MCU模塊是工業機器人控制系統的核心模塊,主要負責電機控制、信號采集、信號輸出和通信任務。本文選用STM32單片機作為MCU模塊的核心控制芯片,具有高性能、低功耗、易擴展等優點。MCU模塊的主要功能如下:
① 電機控制:控制步進電機和伺服電機的運動,實現位置控制和速度控制;
② 信號采集:采集編碼器反饋信號、光電傳感器信號等,實現位置和速度的反饋控制;
③ 信號輸出:控制輸出各種信號,如蜂鳴器、LED指示燈等;
④ 通信任務:與計算機程序和手機APP進行通信,實現工業機器人編程語言的編輯和執行、平臺位置示教、信號和點位信息的人機交互。
(2)電機模塊
電機模塊是工業機器人控制系統中非常重要的一個部分,其主要作用是控制電機或伺服電機的運動,實現機器人的位置和速度控制。在本文中,所使用的電機型號為宇輝電機42BYGH47-401A,它是一種具有結構簡單、驅動方式簡單、適合低速大扭矩等特點的步進電機,具體參數如表1所示。

表1 步進電機參數
42BYGH47-401A電機具有扭矩大、精度高、運動平穩等特點,適用于一些要求精度較低的場合。在電機模塊中,為了實現步進電機的最佳驅動效果,采用A4988芯片作為步進電機驅動器。A4988芯片具有驅動能力強、運動平穩、精度高等特點,能夠更好地滿足工業機器人的控制需求。同時,還采用伺服電機控制程序,通過控制伺服電機的PWM信號,實現機器人的位置控制和速度控制[4]。
(3)測距反饋模塊
由以上的分析可知,該裝置必須對XYZ三個軸線中的一些部位進行探測。伺服電機使用相對數值編碼器和一個光敏轉換器來完成,而步進電動機則不適用于另配編碼器和探測轉換器。因此,距離測量元件的選取就必須加以考量。測距傳感器有以下類型[5]。
①激光測距傳感器是一種使用激光技術進行距離測量的傳感器,利用激光束發射出去并經過反射后返回傳感器,測量出激光束的往返時間,從而計算出物體與傳感器之間的距離。激光測距傳感器通常使用的激光波長為紅外線或可見光范圍內的波長。其測距精度通常能夠達到幾毫米到幾厘米的范圍,可以用于測量室內和室外的距離,例如在機器人導航、無人駕駛車輛、測量建筑物高度等領域中廣泛應用。激光測距傳感器的優點包括高精度、測量速度快、可靠性高、不受環境影響等。缺點則包括成本較高、易受光線干擾、測量距離有限等。
②超聲波測距傳感器是一種使用超聲波技術進行距離測量的傳感器,利用超聲波發射出去并經過反射后返回傳感器,測量出超聲波的往返時間,從而計算出物體與傳感器之間的距離。超聲波測距傳感器通常使用的頻率為20kHz至200kHz之間的超聲波。其測距精度通常能夠達到幾毫米到幾厘米的范圍,可以用于測量室內和室外的距離,例如在智能家居、機器人導航、無人駕駛車輛等領域中廣泛應用。
③紅外線測距傳感器是一種使用紅外線技術進行距離測量的傳感器。它利用紅外線發射出去并經過反射后返回傳感器,測量出紅外線的往返時間,從而計算出物體與傳感器之間的距離。紅外線測距傳感器通常使用的波長為850nm至940nm之間的紅外線。其測距精度通常能夠達到幾毫米到幾厘米的范圍,可以用于測量室內和室外的距離,例如在智能家居、機器人導航、自動售貨機等領域中廣泛應用。本系統最終選擇SHARP/夏普GP2Y0A41SK0F紅外線測距傳感器。
STM32單片機外圍電路設計主要用于控制系統硬件電路,實現與手機或計算機通信、根據指令控制步進電機驅動器以驅動電機運動,以及處理IO信號輸入輸出。
單片機基本電路是控制系統硬件設計的核心之一,包括主晶振電路、復位電路、電源電路、ISP下載電路等。主晶振電路的選取直接影響單片機的時鐘信號,因此需要考慮穩定性、頻率等因素。復位電路通過一個復位電路芯片,實現單片機的復位功能,需要考慮復位脈沖的穩定性和電路的可靠性。電源電路包括5V電源、3.3V電源和12V電源,需要考慮電源噪聲和紋波等因素,以確保單片機和外圍電路的穩定工作。ISP下載電路通過一個串口芯片,實現單片機程序的下載和調試功能,需要考慮串口通信的穩定性和速度等因素。整個單片機基本電路的設計需要考慮多種因素,并進行充分測試和優化,以確保控制系統的穩定性和可靠性,電路原理圖如圖3所示。

圖3 電源電路
步進電機控制電路是工業機器人控制系統中的重要組成部分之一,其主要作用是控制步進電機的運動,實現機器人的位置控制和速度控制。步進電機控制電路包括步進電機驅動器、電流調節電路和控制信號電路。其中,步進電機驅動器采用A4988芯片,具有驅動能力強、運動平穩、精度高等特點。電流調節電路采用電位器調節電流大小,以實現步進電機的最佳驅動效果。控制信號電路通過單片機控制步進電機的運動,實現機器人的位置控制和速度控制。在實際應用中,步進電機控制電路的設計需要根據具體機器人的需求進行合理地調整和優化。步進電機驅動器內部帶有兩個普通光耦EL817和一個高速光耦6N137,其電路原理圖如圖4所示。

圖4 步進電機驅動器接線圖
單片機作為控制系統底層元件,負責操作執行部件、信號采集與輸出。在軟件設計中,采用了STM32F103系列芯片的庫函數。當應用場景變化時,只需調整部分代碼,而無需更改計算機端控制程序。為了減少代碼量并便于針對特定應用場景進行控制系統移植開發,在單片機程序設計中采用了裸機開發方法(不使用實時操作系統)。主要技術包括STM32芯片的串口、ADC、定時器、PWM、中斷和GPIO等。
控制器單片機軟件包含電機控制程序和通信程序兩部分。電機控制程序實現步進電機和伺服電機的運動,實現機器人的位置控制和速度控制。通信程序實現與計算機程序和手機APP的通信功能,實現工業機器人編程語言的編輯和執行、平臺位置示教、信號和點位信息的人機交互。具體來說,電機控制程序采集編碼器反饋信號和光電傳感器信號,實現位置和速度的反饋控制,通過控制步進電機的脈沖信號和伺服電機的PWM信號,實現機器人的位置控制和速度控制。通信程序則采用串口通信,數據傳輸格式為ASCII碼,通過與計算機程序和手機APP的通信,實現工業機器人編程語言的編輯和執行、平臺位置示教、信號和點位信息的人機交互。根據以上功能設計軟件,如圖5所示。

圖5 單片機軟件功能圖
在工業機器人控制系統中,通信協議是控制器單片機與計算機程序和手機APP進行通信的重要手段。本文采用了串口通信,并將數據傳輸格式設定為ASCII碼。具體的通信協議相關信息如表2所示。

表2 通信數據協議相關信息
其中,幀頭固定為0xAA,用于表示數據的開始;數據長度表示數據內容的長度,通過此值可以確定整個數據的長度;命令表示通信的具體命令;數據是通信的具體數據內容;校驗和用于檢查數據傳輸是否出現錯誤,采用簡單的異或校驗方式。通過上述通信協議,控制器單片機可以與計算機程序和手機APP進行可靠的通信,實現工業機器人編程語言的編輯和執行、平臺位置示教、信號和點位信息的人機交互。同時,該協議簡單易懂,易于實現。
PD_1~PD_6是利用步進電機的針腳分布,來控制電機啟動的方向端口。對管腳 GPIO進行配置過程如下:①為GPIO的配置定義結構變量。②在GPIO_Pin的 structural變量中設定要進行配置的端口;③將端口的輸出方式設定為推挽式模式;④ 配置端口速度。STM32F103系列芯片內置了豐富的功能模塊,為用戶提供強大功能。定時器是嵌入式系統中常用的一種功能模塊,其具有輸入捕獲、輸出比較、PWM和直流電機控制等多種功能。其中,PWM功能在電子產品中應用廣泛,可用于控制電機轉速、LED亮度、音頻輸出等。在STM32單片機中,使用定時器的PWM功能需要將TIM3管腳復用映射到PC6-PC8引腳上。為了使定時器正常工作,還需要配置相關中斷。配置步驟包括定義相關結構體變量和設置端口輸出模式為復用推挽輸出。在具體操作中:
①需要先定義TIM_HandleTypeDef結構體變量,并調用HAL_TIM_PWM_Init函數初始化定時器。②使用HAL_TIM_PWM_ConfigChannel函數配置PWM輸出通道,設置占空比等參數。③ 設定PWM端口輸出速度為50MHz;④ 配置定時器:重裝載寄存器值設為1249,分頻系數為71,時鐘分割為0,計數方式為向上計數;⑤ 將定時器輸出模式設置為TIM_OCMode_PWM1;⑥ 啟用PWM輸出,設置輸出極性為低,CCR寄存器值設為625;⑦ 配置定時器的中斷功能。
通過以上步驟,能成功地配置STM32F103的定時器,實現PWM功能,并利用管腳復用功能在PC6-PC8端口進行輸出,為開發人員節省了資源,簡化了開發過程,部分代碼如下所示:
// 定義電機引腳
int motorPin1 = 2; // 接 L293D 1 號引腳
int motorPin2 = 3; // 接 L293D 2 號引腳
int enablePin = 9; // 接 L293D 使能引腳
void setup() {
// 將引腳設置為輸出模式
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(enablePin, OUTPUT);
// 設置初始電機方向
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
// 啟動電機
analogWrite(enablePin, 200);
}
上述代碼是一個基于STM32單片機的步進電機控制程序的示例代碼。其中,Motor_Init函數用于初始化步進電機控制IO口;Motor_Run函數用于控制步進電機的運動,實現機器人的位置控制和速度控制;Motor_Stop函數用于停止步進電機的運動;Motor_MoveTo函數用于控制機器人的移動到指定位置;Motor_MoveBy函數用于控制機器人在當前位置的基礎上移動指定的距離。其中,Motor_Run函數的實現是步進電機控制程序的核心部分,它通過控制步進電機的脈沖信號實現機器人的位置控制和速度控制。在該函數中,首先判斷電機運動的方向,然后通過GPIO控制端口產生相應的脈沖信號,控制電機的運動。在每個脈沖信號后,通過delay_us函數控制脈沖的時間長度,從而控制電機的速度。
計算機軟件在控制系統軟件領域發揮著核心作用,與單片機模塊共同組成工業機器人控制系統,如圖6所示。

圖6 模塊關系圖
工業控制機軟件設計選擇Windows作為開發平臺,采用基于C++的Qt集成開發環境,能夠滿足工業控制機的軟件設計需求,使其更加穩定、高效和易于維護。Windows平臺在工業控制領域被廣泛應用,具有良好的兼容性及豐富的開發資源。而Qt則是一種跨平臺的應用程序開發框架,提供了豐富的圖形界面和工具庫,使得開發者可以更加方便地創建和管理軟件系統。工業機器人控制系統軟件的總體設計分為三個步驟。首先,需要安裝Win7操作系統并配置Qt開發環境。其次,將DMC-2163控制卡的動態鏈接庫、頭文件以及實現文件加入新建工程。最后,利用QMainWindow作為主類,運用QWidget類和QDialog類的派生類來實現各功能模塊,并通過Qt的信號/槽機制、全局變量、事件處理、配置文件等來實現模塊間的通信。
軟件系統的功能模塊包括:指令程序管理、控制卡操作、機器人操作、軌跡規劃、示教再現和系統設置。指令程序管理模塊用于管理機器人的運動指令,包括創建、編輯、保存和執行指令程序。控制卡操作模塊用于控制機器人的運動,包括設置控制卡參數、啟動/停止機器人等。機器人操作模塊用于控制機器人的姿態和位置,包括機器人的運動學分析、逆運動學求解、坐標變換等。軌跡規劃模塊用于生成機器人的運動軌跡,包括直線軌跡、圓弧軌跡、樣條曲線等。示教再現模塊用于通過示教器來控制機器人的運動,包括手動示教和自動再現。系統設置模塊用于設置軟件系統的參數和配置文件,包括機器人的參數、控制卡的參數、通信協議等。
本文設計了一個低成本、移植性好的工業機器人控制系統,該系統采用STM32單片機、微型計算機終端實現了電機控制、信號采集、信號輸出和通信任務。系統設計了一門簡單的工業機器人編程語言,實現了位置控制和速度控制等功能。未來的工業機器人控制系統應該繼續提高控制精度和穩定性,加強機器人的力控制和軌跡規劃功能,以滿足更高的工業生產需求。