Motion86 函式庫
86Diuno IDE 從 Coding 318 版開始加入此函式庫,利用此函式庫能讓 86Duino 成為一個簡單的多軸運動控制器 (Motion controller)。運動控制 (Motion control) 是自動化技術的一部份,產業自動化可以提升生產速度、降低生產成本、改善生產品質、增強市場競爭力,所以運動控制常被運用在包裝、印刷、紡織、半導體器件製造及生產線。
Motion86 函式庫能讓 86Duino 成為一個具備 Arduino 親切好上手特色且容易開發的運動控制器,應用於自動化領域,能加快控制器開發速度並降低開發成本。Motion86 函式庫主要特色如下:
- 至多 9 軸的步進與伺服馬達運動控制,最高 10MHz 脈波輸出。
- 最多 3 組獨立軸群。
- 支援 G-Code。
- 多軸直線、圓弧、螺旋插補,細插補週期 0.5ms。
- 支援 JOG 功能。
- 支援手搖輪 (MPG)。
- 速度前瞻 (Look Ahead),程式預讀 1024 個單節。
- 即時反應的速度重設功能 (Feedrate Override)。
- 可設定電子齒輪比的軸跟隨功能。
接線說明與示例
Motion86 函式庫最多支援 Machine0、Machine1、Machine2 三個軸群,每個軸群可連接控制一台 XYZ 三軸直角坐標系機器 ── 例如 SABLE CNC 工作室 出品的三軸 CNC 雕刻機,如下圖所示:
每個 Motion86 軸群提供 X-DIR / X-Pulse、Y-DIR / Y-Pulse、Z-DIR / Z-Pulse 六根接腳,分別連接至機器 X、Y、Z 三軸伺服馬達的方向與脈波輸入。其中,每一軸的脈波輸出皆提供 Pulse/DIR、CW/CCW、A/B Pulse 三種脈波模式,可在初始化階段透過 config_PulseMode() 函式進行組態。下面是每個軸群在不同型號 86Duino 開發板上的接腳對應表:
軸群編號 | 軸群腳位 | 86Duino Zero | 86Duino One | 86Duino EduCake |
---|---|---|---|---|
0 | X-DIR | 42 | 42 | 42 |
X-Pulse | 9 | 9 | 9 | |
Y-DIR | 43 | 43 | 43 | |
Y-Pulse | 6 | 6 | 6 | |
Z-DIR | 44 | 44 | 44 | |
Z-Pulse | 5 | 5 | 5 | |
1 | X-DIR | 不支援 | 18 | 18 |
X-Pulse | 不支援 | 13 | 13 | |
Y-DIR | 不支援 | 19 | 19 | |
Y-Pulse | 不支援 | 11 | 11 | |
Z-DIR | 不支援 | 20 | 20 | |
Z-Pulse | 不支援 | 10 | 10 | |
2 | X-DIR | 不支援 | 33 | 不支援 |
X-Pulse | 不支援 | 29 | 不支援 | |
Y-DIR | 不支援 | 34 | 不支援 | |
Y-Pulse | 不支援 | 30 | 不支援 | |
Z-DIR | 不支援 | 35 | 不支援 | |
Z-Pulse | 不支援 | 31 | 不支援 |
下面以 Maker 自製 3D 印表機及 CNC 雕刻機時常用的 A4988 步進馬達驅動器為例,提供每個軸群在不同型號 86Duino 開發板上的接線範例:
86Duino Zero | 86Duino One | 86Duino EduCake |
---|---|---|
Machine 類別
此類別提供組態與控制 XYZ 機器軸群的方法,並增加更進階的函式使運動控制更加彈性與多變。
基本方法
Machine()
~Machine()
machineOn()
machineOff()
home()
gcode()
stop()
emgStop()
clearEMGStop()
基本控制
line()
arcXY()
arcXZ()
arcYZ()
arcXY_Theta()
arcXZ_Theta()
arcYZ_Theta()
circleXY()
circleXZ()
circleYZ()
helicalXY()
helicalXZ()
helicalYZ()
寫入組態
config_MaxVelocity()
config_MaxAcc()
config_PosLimit()
config_PPU()
config_ReverseDirection()
config_MaxPulseSpeed()
config_PulseMode()
config_HomePins()
setDefaultFeedrate()
setHomeSpeed()
setRelative()
setAbsolute()
enableSoftLimit()
disableSoftLimit()
讀取組態
getMaxVelocity()
getMaxAcc()
getPPU()
getActualPos()
getPulseMode()
getCmdCount()
getFreeCmdCount()
isDirectionReversed()
isMoving()
isValid()
isCmdBufferFull()
JOG / MPG 控制
beginJog()
endJog()
setJogSpeed()
setJogOffset()
beginMpg()
endMpg()
setMpgSpeed()
setMpgAxis()
setMpgRatio()
getJogPos()
速度重設功能
feedrateOverride()
getFeedrateOverride()
軸跟隨功能
協助計算工具
computePPU_Belt()
computePPU_LeadScrew()
使用限制
Motion86 函式庫在運作時會使用 86Duino 內部的計時器 (Timer),TimerWDT 函式庫和 AIServo86 函式庫也會使用該計時器,因此為了避免函式庫彼此發生衝突,這幾個函式庫不能同時使用。
The text of the 86Duino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.