基于STM32F107的搬運機器人電機控制系統設計
2.2 μC/OS-II系統下任務(wù)的分配
成功地將μC/OS-Ⅱ系統移植到STM32F107后,基于μC/OS-II的程序設計是將一個(gè)大的應用程序分成相對獨立的多個(gè)任務(wù)來(lái)完成。定義好每個(gè)任務(wù)的優(yōu)先級,μC/OS-II內核對這些任務(wù)進(jìn)行調度和管理。
軟件設計思路是根據機器人實(shí)際運行的需要由上位機通過(guò)串口對電機轉速和舵機轉動(dòng)位置進(jìn)行給定。電機的轉速是由設定的速度值和由增量式編碼器的采集值相比較,經(jīng)過(guò)速度PID算法實(shí)現閉環(huán)控制。舵機的位置主要是由絕對值式編碼器反饋現在位置,根據動(dòng)作時(shí)間要求調節舵機轉動(dòng)的速度。本搬運機器人電機控制系統軟件要實(shí)現的功能如下:
◆上位機給定電機轉速、舵機轉動(dòng)角度和動(dòng)作時(shí)間;
◆要求電機轉速連續可調并且具有良好的靜、動(dòng)態(tài)性能,轉速沒(méi)計采用PI算法調節;
◆要求舵機快速到達指定角度,有位置反饋作為舵機給定轉速的調整;
◆具有一定的故障保護功能。當電機出現堵轉、電流過(guò)大以及舵機觸動(dòng)限位開(kāi)關(guān)時(shí),要求停止驅動(dòng)模塊工作。
針對以上要實(shí)現的功能,可以將應用程序設計分為以下幾個(gè)任務(wù):
①啟動(dòng)任務(wù)。對系統進(jìn)行初始化,創(chuàng )建初始電機狀態(tài),然后自我刪除,啟動(dòng)任務(wù)進(jìn)入睡眠狀態(tài)。
②電機和舵機保護任務(wù)。用于在過(guò)流或限位開(kāi)關(guān)動(dòng)作時(shí)響應外部中斷,進(jìn)入中斷狀態(tài)通過(guò)發(fā)任務(wù)信號量,任務(wù)程序檢測信號量有效并響應該任務(wù),停止輸出。任務(wù)優(yōu)先級設為0級。
③上位機給定任務(wù)。用于上位機控制電機和舵機,任務(wù)優(yōu)先級設為1級。上位機數據輸入寄存器時(shí)將產(chǎn)生一個(gè)中斷,該中斷將收到的字節送入緩沖區并釋放上位機給定任務(wù)的信號量;任務(wù)中檢測到信號量有效便開(kāi)始執行,將對應的字節信息解析成對應的電機轉速和舵機轉角位置信息給相應變量賦值。
④電機轉速控制任務(wù)。用于電機的閉環(huán)調速,任務(wù)優(yōu)先級設為2級。
⑤舵機控制任務(wù)。用于控制舵機在規定時(shí)間內到達指定位置,任務(wù)優(yōu)先級設為3級。
2.3 啟動(dòng)任務(wù)
主程序中,在調用μC/OS-II的其他任務(wù)之前,首先調用系統初始化函數OSInit(),初始化μC/OS-II所有的變量和數據結構;同時(shí),建立空閑任務(wù)OS_TaskIdle(),這個(gè)任務(wù)總是處于就緒態(tài);調用OSTaskCreate()函數建立啟動(dòng)任務(wù);調用OSStart(),將控制權交給μC/OS-II內核,開(kāi)始運行多任務(wù)。
啟動(dòng)任務(wù)是在主程序中創(chuàng )建的,它主要有3個(gè)功能:
①用于系統初始化(PWM輸出模塊、串口、ADC模塊、輸入電平中斷功能、定時(shí)器)。
②建立系統所要用到的信號量。
③建立系統的其他任務(wù)。
最后調用OSTaskDel(OS_PRIO_SELF)進(jìn)行自我刪除,啟動(dòng)任務(wù)進(jìn)入睡眠狀態(tài)。主程序任務(wù)流程如圖4所示。本文引用地址:http://dyxdggzs.com/article/160667.htm
2.4 電機轉速控制任務(wù)
增量式編碼器每次產(chǎn)生外部中斷,在中斷狀態(tài)中發(fā)出任務(wù)信號量,任務(wù)程序檢測信號量有效并響應該任務(wù),任務(wù)中通過(guò)測得電機當前轉速和給定速度對比實(shí)現閉環(huán)控制。電機轉速控制任務(wù)流程如圖5所示。
評論