今天,正運動小助手給大家分享一下步進控製的光柵尺全閉環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。
正運動技術專注於運動控製技術研究和通用運動控製軟硬件產品的研發,是國家級高新技術企業。正運動技術彙集了來自華為、zhongxingdenggongsideyouxiurencai,zaijianchizizhuchuangxindetongshi,jijilianhegedagaoxiaoxietongyundongkongzhijichujishudeyanjiu,shiguoneigongkonglingyufazhanzuikuaideqiyezhiyi,yeshiguoneishaoyou、完整掌握運動控製核心技術和實時工控軟件平台技術的企業。主要業務有:運動控製卡_運動控製器_EtherCAT運動控製卡_EtherCAT控製器_運動控製係統_視覺控製器__運動控製PLC_運動控製_機器人控製器_視覺定位_XPCIe/XPCI係列運動控製卡等等。