今天,正運動小助手給大家分享一下步進控制的光柵尺全閉環EtherCAT運動控制器ZMC432CL-V2的二維螺距補償的功能的驗證。
更多關于ZMC432CL-V2運動控制器的詳情點擊→步進控制的光柵尺全閉環解決方案:32軸EtherCAT總線運動控制器ZMC432CL-V2 查看。
01
產品簡介
ZMC432CL-V2高性能多軸運動控制器是一款兼容EtherCAT總線和脈沖型的獨立式運動控制器,具備高速實時反饋功能,支持脈沖全閉環控制,能夠實現高精度、高響應速度的運動控制。高精度定位,有效消除機械傳動誤差,滿足高精密加工場景應用要求。
ZMC432CL-V2硬件功能:
豐富的運動控制功能:支持直線、圓弧、空間圓弧、螺旋插補等。
硬件接口豐富:支持脈沖軸(帶編碼器反饋)和EtherCAT總線軸,具備24路輸入和12路輸出的通用IO,部分為高速IO,2路模擬量輸出(DA)。
EtherCAT刷新周期最快達250us,滿足高速通信需求。
支持4通道硬件比較輸出、硬件定時器、運動中精準輸出,適用于多通道視覺飛拍等場合。
支持掉電檢測、掉電存儲,多種程序加密方式,能夠有效防止系統故障,保護項目工程文件數據,并提高系統的可靠性。
通過純國產IDE開發環境RTSys進行項目開發,可實時仿真、在線跟蹤以及診斷與調試,簡便易用,支持多種高級上位機語言聯合編程進行二次開發。
ZMC432CL-V2產品介紹視頻請點擊→步進控制的光柵尺全閉環解決方案:32軸EtherCAT總線運動控制器ZMC432CL-V2
02
硬件接口
03
硬件接線
1.數字量輸入口IN接線
圖1 輸入口通用接線圖
圖2 輸入口單端編碼器接線圖
2.數字量輸出口接線
圖3 輸出口通用接線圖
圖4 輸出口單端脈沖軸接線圖
04
控制器開發
1.PC開發
支持以下語言進行開發,我們所有的開發語言和所有控制器提供的都是同一套API接口。
2.脫機開發
使用自主自研的IDE RTSys進行開發,支持Basic、梯形圖開發。
05
二維螺距補償應用場景
06
二維螺距補償指令說明
正運動二維螺距補償指令使用的注意點:
1.必須先設置ATYPE,然后設置補償;修改ATYPE時,必須先關閉補償!
2.設置補償時,軸要位于IDLE的停止狀態!
3.開始補償點的坐標填寫的是軸的MPOS坐標!
4.帶編碼器反饋的軸類型,不同位置補多少個脈沖,是根據編碼器位置確定脈沖補償的個數的,所以一定要保證編碼器的反饋是正確的!
5.機臺斷使能前,需先關掉二維螺距補償功能,否則如果斷使能的情況下機臺有移動,會造成dpos跟mpos的數據對不上。
6.如下圖假設開始補償點是坐標系的原點,補償間距分別是【DisX,DisY】補償的點是【4*4】的話,螺距補償表存儲的點位數據就是以下【點1】到【點16】的位置下的補償數據。
07
二維螺距算法通過Basic編程快速驗證效果
假設工況1:X軸和Y軸的絲桿螺距正常,但X軸和Y軸安裝不垂直,假設安裝夾角是135度。
步驟一:
規劃開始補償點,補償間距,補償的行數和列數。
'初始化二維螺距補償的相關參數TableId = 1000
'補償數據的Table起始點StartMposX = 0
'X軸開始補償的位置StartMposY = 0
'Y軸開始補償的位置DisX = 0.5
'X軸方向補償的間距DisY = 0.5
'Y軸方向補償的間距ColNumX = 50
'X軸方向補償的點數RowlNumY = 50
'Y軸方向補償的點數
步驟二:
根據該工況的測試環境,計算各個補償點的X方向和Y方向的改補償的脈沖數,并更新到TABLE。
'更新該工況下二維補償表的TABLE數據
FOR i=0 to RowlNumY-1
'先按行填寫該行的每一列的數據
FOR j=0 to ColNumX-1
'【工況一:XY軸螺距正常,但X軸和Y軸安裝不垂直,假設安裝夾角是135度】
'一定是先運動到補償點位位置然后通過其他定位方式(如視覺)實際定位出來的差值
IF i=0 and j=0 THEN
Angle=135 'X軸和Y軸的安裝夾角
ENDIF
LOCAL ActPosX,ActPosY '實際位置
'計算實際位置
ActPosX = 1 + (COS(Angle*PI/180))
ActPosY = (SIN(Angle*PI/180))
'計算各個補償點需要補償的X和Y方向的脈沖數
Table(TableId+2*(i*ColNumX+j)) = DisX*(1+i)*(1- ActPosX) * UNITS(AxisX)
Table(TableId+2*(i*ColNumX+j)+1) = DisY*(1+i)*(1- ActPosY) * UNITS(AxisY)
NEXT
NEXT
步驟三:
調用二維螺距補償指令啟用二維螺距補償功能。
'開始2D螺距補償
WAIT IDLE
PITCH2SET(1,StartMposX ,StartMposY,,DisX,DisY,ColNumX,RowlNumY,TableId)
步驟四:
發送運動指令,根據實際的編碼器反饋來驗證控制器實際上發的脈沖數是否正確。
'開始運動
MoveTest(1,1.1,RunMode)
MoveTest(2,1.1,RunMode)
MoveTest(2,2.1,RunMode)
步驟五:
驗證效果。(PS:x軸和Y軸的脈沖當量均設置的是100000)
根據以上數據啟用二維螺距補償功能后,我們可以計算出運動到點【1,1,1】時,X軸和Y軸理論上補償的脈沖數分別是109999.9999個脈沖和45563.49186個脈沖,根據實際編碼器的反饋值發現X軸和Y軸實際補償的脈沖數分別是109999個脈沖和45563個脈沖,因為脈沖個數是整數,所以二維螺距補償功能正常。
假設工況2:XY軸的螺距均有異常需要補償,但X軸和Y軸安裝是垂直的。
假設X軸的激光干涉儀數據如下:
'運動到1mm處,激光干涉儀打出來實際是0.9mm處,所以需要補償的脈沖 = 0.1*units
'運動到2mm處,激光干涉儀打出來實際是1.8mm處,所以需要補償的脈沖 = 0.2*units
'運動到3mm處,激光干涉儀打出來實際是2.7mm處,所以需要補償的脈沖 = 0.3*units
'Y軸絲桿工況和X軸絲桿工況類似
步驟一:
規劃起始補償點,補償間距,補償的行數和列數。
'初始化二維螺距補償的相關參數
TableId = 1000 '補償數據的Table起始點
StartMposX = 0 'X軸開始補償的位置
StartMposY = 0 'Y軸開始補償的位置
DisX = 0.5 'X軸方向補償的間距
DisY = 0.5 'Y軸方向補償的間距
ColNumX = 50 'X軸方向補償的點數
RowlNumY = 50 'Y軸方向補償的點數
步驟二:
根據該工況的測試環境,計算各個補償點的X方向和Y方向的改補償的脈沖數,并更新到TABLE。
'假設X軸的激光干涉儀數據如下:
'運動到1mm處,激光干涉儀實際是0.9mm處,所以需要補償的脈沖 = 0.1*units
'運動到2mm處,激光干涉儀實際是1.8mm處,所以需要補償的脈沖 = 0.2*units
'運動到3mm處,激光干涉儀實際是2.7mm處,所以需要補償的脈沖 = 0.3*units
'Y軸絲桿工況和X軸絲桿工況類似
'更新該工況下二維補償表的TABLE數據
FOR i=0 to RowlNumY-1
'先按行填寫該行的每一列的數據
FOR j=0 to ColNumX-1
'【實際測試發現運動到1mm處補償的脈沖數不是0.1*units,是因為算法發現發0.1*units實際跑到不是0.1mm,發0.1111*units才跑0.1mm】
Table(TableId+2*(i*ColNumX+j)) = DisX*(j+1)*0.1*UNITS(AxisX)
Table(TableId+2*(i*ColNumX+j)+1) = DisY*(i+1)*0.1*UNITS(AxisY)
NEXT
NEXT
步驟三:
調用二維螺距補償指令啟用二維螺距補償功能。
'開始2D螺距補償
WAIT IDLE
PITCH2SET(1,StartMposX ,StartMposY,,DisX,DisY,ColNumX,RowlNumY,TableId)
步驟四:
發送運動指令,根據實際的編碼器反饋來驗證控制器實際上發的脈沖數是否正確。
'開始運動
MoveTest(1,1,RunMode)
MoveTest(2,1,RunMode)
MoveTest(2,2,RunMode)
步驟五:
驗證效果。 (PS:x軸和Y軸的脈沖當量均設置的是100000)
根據以上數據啟用二維螺距補償功能后,我們可以計算出運動到點【1,1】時,X軸和Y軸理論上補償的脈沖數分別是11111.11108個脈沖和11111.11108個脈沖,根據實際編碼器的反饋值發現X軸和Y軸實際補償的脈沖數分別是11110個脈沖和11110個脈沖,這里理論補償值和實際補償值誤差在1個脈沖我們認為二維螺距補償功能是正常的。
假設工況3:X軸和Y軸的絲桿螺距均有異常需要補償,且X軸和Y軸的安裝夾角是135度。
假設X軸的激光干涉儀數據如下:
'運動到1mm處,激光干涉儀 打出來 實際是0.9mm處,所以需要補償的脈沖 = 0.1*units
'運動到2mm處,激光干涉儀 打出來 實際是1.8mm處,所以需要補償的脈沖 = 0.2*units
'運動到3mm處,激光干涉儀 打出來 實際是2.7mm處,所以需要補償的脈沖 = 0.3*units
'Y軸 絲桿 工況和X軸 絲桿工況 類似
步驟一:
規劃起始補償點,補償間距,補償的行數和列數。
'初始化二維螺距補償的相關參數
TableId = 1000 '補償數據的Table起始點
StartMposX = 0 'X軸開始補償的位置
StartMposY = 0 'Y軸開始補償的位置
DisX = 0.5 'X軸方向補償的間距
DisY = 0.5 'Y軸方向補償的間距
ColNumX = 50 'X軸方向補償的點數
RowlNumY = 50 'Y軸方向補償的點數
步驟二:
根據該工況的測試環境,計算各個補償點的X方向和Y方向的改補償的脈沖數,并更新到TABLE。
'假設X軸的激光干涉儀數據如下:
'運動到1mm處,激光干涉儀實際是0.9mm處,所以需要補償的脈沖 = 0.1*units
'運動到2mm處,激光干涉儀實際是1.8mm處,所以需要補償的脈沖 = 0.2*units'運動到3mm處,激光干涉儀實際是2.7mm處,所以需要補償的脈沖 = 0.3*units
'Y軸工況和X軸工況類似
'更新該工況下二維補償表的TABLE數據
FOR i=0 to RowlNumY-1
'先按行填寫該行的每一列的數據
FOR j=0 to ColNumX-1
'【工況三:XY軸螺距異常,XY的夾角是135度】
'X軸螺距有問題,實際是10000個脈沖跑0.5mm
'Y軸螺距也有問題,實際是10000個脈沖跑0.9mm
IF i=0 and j=0 THEN
Angle=135'XY軸的安裝夾角
ENDIF
LOCAL ActPosX,ActPosY '實際位置
'X軸補償數據
ActPosX = 0.5*(j+1)+ (i+1)*0.9*(COS(Angle*PI/180))
Table(TableId+2*(i*ColNumX+j)) = DisX*((1+j)-ActPosX)*UNITS(AxisX)
'Y軸補償數據
ActPosY = 0.9*(SIN(Angle*PI/180))
Table(TableId+2*(i*ColNumX+j)+1) = DisY*(1+i)*(1- ActPosY)*UNITS(AxisY)
NEXT
NEXT
步驟三:
調用二維螺距補償指令啟用二維螺距補償功能。
'開始2D螺距補償
WAIT IDLE
PITCH2SET(1,StartMposX ,StartMposY,DisX,DisY,ColNumX,RowlNumY,TableId)
步驟四:
發送運動指令,根據實際的編碼器反饋來驗證控制器實際上發的脈沖數是否正確。
'開始運動
MoveTest(1,1,RunMode)
MoveTest(2,1,RunMode)
MoveTest(2,2,RunMode)
步驟五:
驗證效果。 (PS:x軸和Y軸的脈沖當量均設置的是100000)
根據以上數據啟用二維螺距補償功能后,運動到點【1,1】時,根據實際發的脈沖數推算出實際運動的位置是【0.99999,0.99999】和【1,1】的脈沖誤差也是在一個脈沖以內,所以二維螺距補償功能正常。
MoveTest函數的實現:
GLOBAL SUB MoveTest(Pos1,Pos2,RunMode)
MOVEABS(Pos1,Pos2)
DELAY(1500)
?"運動前編碼器數據",TempVarX,TempVarY
?"運動后坐標:【"+TOSTR(Pos1,4,1)+","+TOSTR(Pos2,4,1)+"】,當前XY軸的ENCODER:",ENCODER(AxisX),ENCODER(AxisY)
?"X軸實際補償值",ENCODER(AxisX)-TempVarX-DPOS(AxisX)*UNITS(AxisX)
?"Y軸實際補償值",ENCODER(AxisY)-TempVarY-DPOS(AxisY)*UNITS(AxisY)
IF RunMode=0 THEN '工況1
?"X軸理論補償值",-POS2*(COS(Angle*pi/180)/SIN(Angle*pi/180))*UNITS(AxisX),'"和實際有差值,可能是脈沖當量的問題"
?"Y軸理論補償值",POS2*(1/(SIN(Angle*pi/180)) -1)*UNITS(AxisY),'"和實際有差值,可能是脈沖當量的問題"
ELSEIF RunMode=1 THEN '工況2
?"X軸理論補償值",POS1*0.1/0.9*UNITS(AxisX),'"和實際有差值,可能是脈沖當量的問題"
?"Y軸理論補償值",POS2*0.1/0.9*UNITS(AxisY),'"和實際有差值,可能是脈沖當量的問題"
ELSEIF RunMode=2 THEN '工況3
?"X軸理論停止位:",((ENCODER(AxisX)-TempVarX)*0.5 +(ENCODER(AxisY)-TempVarY)*0.9*COS(Angle*pi/180))/UNITS(AxisX)
?"Y軸理論停止位:",((ENCODER(AxisY)-TempVarY)*0.9*SIN(Angle*pi/180))/UNITS(AxisX)
ENDIF
ENDSUB
08
二維螺距補償功能現場實戰
客戶有一個激光切割機的機臺需要使用二維螺距補償指令來解決機臺在不同位置受力不同機臺形變不同導致的精度丟失問題。
步驟一:
以軸的MPOS坐標【0,0】作為二維補償的開始補償的位置。
步驟二:
以軸的MPOS坐標【40,40】作為第一個圓的圓心,然后以陣列的方式通過激光在板子是畫出4行4列的16個圓,陣列X軸方向間距為40mm,Y軸方向間距為40mm。
步驟三:
通過視覺找出這16個圓的圓心,并把坐標填入到TABLE寄存器待處理。
startposx=0 '開始補償點X坐標
startposy=0 '開始補償點Y坐標
disonex=40 'X軸的補償點間距
disoney=40 'Y軸的補償點間距
maxpointx=4 'X軸方向補償點列數
maxpointy=4 'Y軸方向補償點行數
tableindex=1000 '存儲補償點數據的TABLE起始地址
步驟四:
通過視覺找出這16個圓的圓心,并把坐標填入到TABLE寄存器待處理。
步驟五:
計算各個補償點的X和Y方向的脈沖補償值=(理論位置-實際位置)*Units。
DIM i,j '
更新二維螺距補償表
For i=0 to maxpointy-1
For j=0 to maxpointx-1
TABLE(tableindex+2*(j+i*maxpointx)) = UNITS(0)*((40+40*j) - TABLE(tableindex+2*(j+i*maxpointx)))
TABLE(tableindex+2*(j+i*maxpointx)+1) = UNITS(1)*((40+40*i) - TABLE(tableindex+2*(j+i*maxpointx)+1))
NEXT
NEXT
步驟六:
調用二維螺距補償指令啟用二維螺距補償功能。
'啟用二維螺距補償
PITCH2SET(enable,startposx,startposy,disonex,disoney,maxpointx,maxpointy,tableindex)
步驟七:
發送運動指令,讀取編碼器的原始值驗證二維螺距補償是否正常。
'開始運動檢測是否補償成功
MOVEABS(40,40)
WAIT IDLE
DELAY(500)
?"當前坐標:",MPOS(0),MPOS(1)
?"編碼器原始值:",MPOS_ORI(0),MPOS_ORI(1)
?"補償值:",PITCH2_DIST(0),PITCH2_DIST(1)
MOVEABS(80,80)
WAIT IDLE
DELAY(1000)
?"當前坐標:",MPOS(0),MPOS(1)
?"編碼器原始值:",MPOS_ORI(0),MPOS_ORI(1)
?"補償值:",PITCH2_DIST(0),PITCH2_DIST(1)
MOVEABS(120,120)
WAIT IDLE
DELAY(1000)
?"當前坐標:",MPOS(0),MPOS(1)
?"編碼器原始值:",MPOS_ORI(0),MPOS_ORI(1)
?"補償值:",PITCH2_DIST(0),PITCH2_DIST(1)
步驟八:
測試的實際效果。
完整代碼獲取地址
▼
本次,正運動技術步進控制的光柵尺全閉環EtherCAT運動控制器ZMC432CL-V2快速入門:二維螺距補償(上),就分享到這里。
更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請咨詢正運動技術銷售工程師:400-089-8936。
正運動技術專注于運動控制技術研究和通用運動控制軟硬件產品的研發,是國家級高新技術企業。正運動技術匯集了來自華為、中興等公司的優秀人才,在堅持自主創新的同時,積極聯合各大高校協同運動控制基礎技術的研究,是國內工控領域發展最快的企業之一,也是國內少有、完整掌握運動控制核心技術和實時工控軟件平臺技術的企業。主要業務有:運動控制卡_運動控制器_EtherCAT運動控制卡_EtherCAT控制器_運動控制系統_視覺控制器__運動控制PLC_運動控制_機器人控制器_視覺定位_XPCIe/XPCI系列運動控制卡等等。