本節(jié)主要演示了使用自定義函數(shù)實(shí)現(xiàn)電機(jī)的運(yùn)動(梯形曲線和S曲線都有實(shí)現(xiàn)),這里的JOG+和JOG-,針對單個關(guān)節(jié)實(shí)現(xiàn)了PTP的運(yùn)動(跟貝福的MoveAbsolute功能塊實(shí)現(xiàn)效果一致),在此沒有介紹運(yùn)動控制算法的具體原理,不理解的可以網(wǎng)上搜索梯形曲線和S曲線的文章,并不只是非標(biāo)自動化需要用到控制電機(jī)的PTP運(yùn)動,比如升降機(jī),電梯,或者凡是需要勻滑啟停的電機(jī)控制,都逃不過要用到這方面的知識,讀者也可以自己測試5次或者7次等其他自定義加速曲線,每一種運(yùn)動給出的位置,速度,加速度都會有不同的效果。 上一節(jié)我們提到了使用簡單的Y=X+V*t的方式控制軸JOG正反轉(zhuǎn),并且位置曲線是折線(因?yàn)樗俣葟?直接下一個周期就是目標(biāo)速度,速度沒有一個平滑過渡,導(dǎo)致位置也是不平滑的)。這里我們除了可以監(jiān)控位置,還可以監(jiān)控速度和加速度??梢园l(fā)現(xiàn)給出的位置,速度都比較光滑,沒有銳利的過渡(加速度是三角形,如果設(shè)置為不同的A,V,J參數(shù),也可能是梯形,但是不管怎樣,這樣的運(yùn)動效果是比較穩(wěn)定可靠的) 為了讓函數(shù)更加簡單和通用,JOG運(yùn)動可以認(rèn)為是多軸聯(lián)動的一種特殊情況。比如AB兩軸,A_1和B_1是他們的起始位置,A_2和B_2是他們的結(jié)束位置,如果A_2=A_1+99999(一個很大的值),B_2=B_1,那就成了針對A軸的正向JOG運(yùn)動,而如果A_2不等于A_1,B_2也不等于B_1,那么就是最一般的多軸的聯(lián)動(可以參考機(jī)器人學(xué)導(dǎo)論,整個流程大致是計(jì)算最大關(guān)節(jié)差值,根據(jù)給定的速度,加速度,加加速度對每個軸均一化,然后在每個周期都給出針對每個軸的方程位置),因此在本程序的最后也給出了兩點(diǎn)PTP運(yùn)動的實(shí)現(xiàn)(標(biāo)記A點(diǎn),走到A點(diǎn),標(biāo)記B點(diǎn),走到B點(diǎn)以及AB兩點(diǎn)的循環(huán)運(yùn)動),當(dāng)然也可以人為的填寫一個要走的目標(biāo)位置,然后走(MOVEJHMI)。 JOG按鈕按下的時候切換到一個狀態(tài),松開的時候再切換到另一個狀態(tài)。由于沒有使用貝福的運(yùn)動功能塊,停止的時候也不再使用貝福的Halt命令。而是采集當(dāng)前的位置,速度,并以指定的加速度平滑的減速到0(讀者可以自己嘗試把減速度改大改小,看滑出去的距離,也可以取消這種平滑過渡,直接下個周期不給位置,看立即停下來的效果。尤其是當(dāng)正在進(jìn)行運(yùn)動的時候,TWINCAT每個周期都會計(jì)算出來下一個周期的位置,速度,加速度,當(dāng)切換狀態(tài)的時候,不給位置或者給的位置和當(dāng)前位置差異太大,都會造成機(jī)器的震動,停止不平滑對機(jī)器是有損傷的,不斷測試狀態(tài)切換的時候給位置的效果可以加深對運(yùn)動控制和TWINCAT實(shí)時性的理解) 比上一節(jié)有所改進(jìn),除了標(biāo)記零點(diǎn),還實(shí)現(xiàn)了位置和速度的軟限位(標(biāo)記零點(diǎn)的數(shù)據(jù)文件是Bias.txt,限位的數(shù)據(jù)文件是Limit.txt,都在C盤根目錄下,這些文件打開是亂碼,但是實(shí)際上保存的確實(shí)是要保存的數(shù)據(jù))。當(dāng)位置或者速度超差的時候(一般軟限位會做在硬限位前面一點(diǎn),如果碰到硬限位開關(guān)再停止,萬一速度太大撞過去也剎不住,還是會有損害)。需要注意的是,雖然我在控制的是直線模組,但是我還是可以認(rèn)為每個軸指定的是角度(跟機(jī)器人一樣看,我要限制的位置比如是-30弧度到50弧度,那么就是對應(yīng)幾百幾千度,也可能對應(yīng)了幾百mm,只是一個限制值而已沒有必要太精確,但是這樣卻可以統(tǒng)一單位,我控制兩軸模組到某個目標(biāo)點(diǎn),也是發(fā)給他每個關(guān)節(jié)的弧度值,顯示在HMI上是角度值) 此外還有很多其他額外的小功能可以研究,例如使用一個按鈕對所有電機(jī)全部上下使能(上使能之后等一會就執(zhí)行ExtFeed Enable),例如運(yùn)動的暫停和繼續(xù),急停和解除急停??偠允牵M(jìn)行到這里整個代碼量已經(jīng)比較大了,也比較容易構(gòu)建成一個完整的兩軸運(yùn)動的項(xiàng)目,如果要繼續(xù)擴(kuò)充三軸或者更多軸,也是比較方便的。當(dāng)然這里還沒有涉及到運(yùn)動學(xué)和動力學(xué)算法,比如沒法控制機(jī)器畫直線畫圓,這些將在下一節(jié)繼續(xù)講,有了這部分的基礎(chǔ)后續(xù)的算法就會比較好做(至少我們無須擔(dān)心算法的錯誤導(dǎo)致電機(jī)飛車,因?yàn)橛形恢煤退俣鹊谋Wo(hù)) 更多教學(xué)視頻和資料下載,歡迎關(guān)注以下信息: 我的優(yōu)酷空間: http://i.youku.com/acetaohai123 我的在線論壇: 問題交流: QQ:910358960 |
|