|
|
一、問題現(xiàn)象 用戶通過以下編程:
# define XCH 0 # define YCH 1
double fUnit[]={ 3200/5.0, 3200/5.0}; //脈沖當(dāng)量,每毫米脈沖數(shù) //每轉(zhuǎn)脈沖數(shù)為3200,每轉(zhuǎn)毫米數(shù)為5.0
short axisArray[]={ XCH, YCH };//選擇XY兩軸 long distArray[]={ x * fUnit[XCH], y*fUnit[YCH] }; //x和y為毫米單位的絕對位置
d1000_start_ta_line( 2, axisArray, distArray, 10, 10, 0.0);//勻速插補(bǔ)
通過實際運動發(fā)現(xiàn)以下情況: No.1 當(dāng)X=100,Y=0,即水平方向,所花時間為10.002秒 No.2 當(dāng)X=0,Y=100,即垂直方向,所花時間為10.003秒 No.3 當(dāng)X=100,Y=100,即45度斜線,所花時間為10.005秒
即三種情況下的運行時間幾乎相當(dāng)(當(dāng)中的微小時間差可能由系統(tǒng)的多任務(wù)特性引起的),而實質(zhì)上當(dāng)走45度斜線時,其距離等于100*sqrt(2) = 100*1.414=141.4毫米,由此可見距離長了許多,故其速度也快了許多。此種情況在速度慢的情況下表現(xiàn)不明顯,但是在激光切割時,速度不穩(wěn)定,同樣的能量切割出來的效果就不一致,質(zhì)量也就不能過關(guān)。
二、原因分析 DMC1000的開發(fā)較早,對于直線插補(bǔ)的算法是采用三角函數(shù)進(jìn)行合成,故以上設(shè)定的10,10,0.0的速度是對距離長的運動軸有效(即長軸),不是一個矢量的速度,由此可見,同樣的速度設(shè)定會因為直線的斜率不同而快慢不一致。
三、解決方法 解決此問題也很簡單,每次需要重新計算長軸的速度,以用于作為插補(bǔ)速度,下面給出原代碼,以對上面的代碼進(jìn)行補(bǔ)充:
double fP1 = distArray[XCH] - (double)d1000_get_command_pos(XCH); double fP2 = distArray[YCH] - (double)d1000_get_command_pos(YCH); double fLen= sqrt( fP1*fP1 + fP2*fP2 ); if( fLen < 1 )//0脈個不要 return nAxises; long nStart,nSpeed; //計算出新的速度 if( fabs(fP1)>fabs(fP2) ) { double kx = fP1 / fLen; double AP = kx * fP1; kx = AP / fP1; nStart = long(fUnit[XCH] * speed.start * kx ); nSpeed = long(fUnit[XCH] * speed.speed * kx ); } else{ double ky = fP2 / fLen; double AP = ky * fP2; ky = AP/ fP2; nStart = long(fUnit[YCH]*ky); nSpeed = long(fUnit[YCH]*ky); }
nStart和nSpeed是計算出來的最后設(shè)定的速度。 關(guān)于speed是一個速度結(jié)構(gòu),大致如下(單位:毫米/秒)
typedef struct tag_SPEED { double start; double speed; double accel; };
四、附帶聲明 在DMC1000以后的系列控制卡,如:DMC2000,DMC3000,DMC5000,對矢量速度的設(shè)定都已進(jìn)行充分的考慮,不再需要用戶添加額外的代碼進(jìn)行計算了。
|
|
狀 態(tài):
離線
公司簡介
產(chǎn)品目錄
|
|
公司名稱:
|
深圳市雷賽智能控制股份有限公司
|
聯(lián) 系 人: |
梁邦敏
|
電 話: |
755-26401178
|
傳 真: |
|
地 址: |
深圳市南山區(qū)登良路天安南油工業(yè)區(qū)2棟3樓 |
郵 編: |
518000 |
主 頁: |
|
|
|
|
|