3Dプリンタに改造したCNCフライスのLinuxCNC設定データとtips
ここに3dプリンタで使用した設定とその簡単な説明を書きます
設定データのパックはページの一番下に.
基本はコブラを動作させたときと同様です.
iniファイルへの追加部分はフィラメントを送り出すエクストルーダです,これは第4軸としますが,
通常の4軸工作機械と異なりANGULARではなくLINEAR軸(直動軸)です.
これはフィラメント送り量の計算がどうやら
「フィラメントの径」と「ノズル径」の変化をもとに,
走行量に応じた吐出に必要なフィラメント長さを指示しているのではないか,と判断したためです.
LINEAR軸に設定していれば,4軸のSCALE変数の示す値は「単位長さ送るのに必要なステップパルス数」になりますので,
ラック&ピニオン系とみなせ,フィラメントと送り出しギアの径,それからモータの分解能とマイクロステップ分割数から
計算して値をだいたい決めることができます.※
※1たぶん.手元の装置とKISSlicerの組み合わせではそれでうまくいった
※2細かい値は,上記の考えがあっているのなら,プリントしてみて樹脂の多め少なめで調節することになります.
INFILL100%でテストプリントしてみたとき,10数層プリントして行き場を失った樹脂が上にはみ出てくるようなら若干多すぎ,
スカスカになったり層間がつかなければ少なすぎです.
第4軸のMAX MIN のソフトウェアリミットの値は設定する必要がありません(無限に動いて問題ない).
HOMEも原点がとくにありませんので,画面上からHOME A AXISしたときにその場が原点になるように
原点復帰速度をゼロにしたりなどの設定が仕込んであります.
そのほか,[TRAJ]セクションのAXESとCOORDINATES変数は4軸機相当に変更してあります.
このへん設定しないと第4軸の手動ジョグ送りができなかったりエクストルーダが動作しない,起動しないといったトラブルが出るはずです.
(1-3軸はねじ送り式位置決めでパルスあたり移動量が小さすぎて速度が出ないので,
マイクロステップをCNCとして使っている時より荒くしてあるのでSCALEが先に公開したものと異なっています.
まあ,これはこの装置特有の問題)
halファイルへの変更は第4軸の出力ピンの決定とその設定の追加です.
今回は2つ目のパラレルポートから4軸の信号を引き出しています.
実際に運用する際には,あらかじめMDIモードで「G64 Pn.nnn Qn.nnn」コードを打ち込んでおくと,
連続する線分を速度維持してカーブを描いて回ってくれるようになるので,
加速度の遅い機材ではとくに造形時間や品質に効いてくると思います.
Pの後ろの数値は線分の終点からどのくらい外れて回ってよいかを決め,
Qの後ろの数値で,これより小さい距離の線分を統合して一つとみなします.
当然できる品物の角が丸くなるはずなのですが,3Dプリントの場合,
残念ながらもともとノズル径より小さい角は出やしないと考えられるので,ノズル速度維持を重視しています.
使っている装置ではたいていの品物で「G64 P0.1 Q0.05」で指示しています.
originalmind-cobra.hal
## Mod by Shimalith at 2014/05/26
loadrt trivkins
## 最大パルス数設定。
## 実際には、「.ini」設定ファイルから呼び出すため、参照先指定のみ。
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
## パラレルポートを呼ぶ。
## 端末コマンド「dmesg」のログにparport読み込みの記録がある場合、
## parport番号の指定も可。もちろんIOアドレスで0x----でも良い。
loadrt probe_parport
loadrt hal_parport cfg="0 out 1 out "
## 呼んだポートの設定。
## 最小パルス幅/パルス維持時間。短くするとppsが上がるが、モータドライバが反応できなければ意味がない。
## モータドライバデータシートを参照
setp parport.0.reset-time 5000
setp parport.1.reset-time 25000
##第4軸のドライバが遅いのでポートで変えてある
## ステップ形式設定。
loadrt stepgen step_type=0,0,0,0
## ラダーシーケンスのポート数設定
loadrt classicladder_rt numPhysInputs=15 numPhysOutputs=15 numS32in=10 numS32out=10 numFloatIn=10 numFloatOut=10
## 緊急停止の方式の設定など。
loadrt charge_pump
addf charge-pump base-thread
net notEstop iocontrol.0.user-enable-out => charge-pump.enable
#net estop-out charge-pump.enable iocontrol.0.user-enable-out
net charge-pump <= charge-pump.out
net estop-ext => iocontrol.0.emc-enable-in
## ここまでに使うことにしたfunctionがどの間隔で実行されるか.
## 即時反応しないと危険なものはbase-thread,遅れても構わない入力はservo-threadで指定
addf parport.0.read base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
addf parport.1.read base-thread
addf parport.1.write base-thread
addf parport.1.reset base-thread
addf stepgen.make-pulses base-thread
addf stepgen.capture-position servo-thread
addf stepgen.update-freq servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf classicladder.0.refresh servo-thread
## 補機類設定
net spindle-cmd <= motion.spindle-speed-out
net spindle-on <= motion.spindle-on
net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood
#********************************************************************
# ここより、ピンアサイン設定
#********************************************************************
## 出力側Hi-Lo入れ替えは行追加「setp ポート-out-invert 1」
## 入力側Hi-Lo入れ替えは行末に「-not」追加
## ステップクロック用のピンは次行に「setp ポート-out-reset 1」追加
## parport 0
net spindle-on => parport.0.pin-01-out
net xstep => parport.0.pin-02-out
setp parport.0.pin-02-out-reset 1
setp parport.0.pin-03-out 1
net xdir => parport.0.pin-03-out
net ystep => parport.0.pin-04-out
setp parport.0.pin-04-out-reset 1
setp parport.0.pin-05-out-invert 1
net ydir => parport.0.pin-05-out
net zstep => parport.0.pin-06-out
setp parport.0.pin-06-out-reset 1
net zdir => parport.0.pin-07-out
net astep => parport.0.pin-08-out
setp parport.0.pin-08-out-reset 1
net adir => parport.0.pin-09-out
net coolant-mist => parport.0.pin-14-out
net coolant-flood => parport.0.pin-16-out
net charge-pump => parport.0.pin-17-out
#net home-a <= parport.0.pin-10-in-not
net home-x <= parport.0.pin-11-in-not
net home-y <= parport.0.pin-12-in-not
net home-z <= parport.0.pin-13-in-not
net estop-ext <= parport.0.pin-15-in-not
# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
## parport 1
net astep => parport.1.pin-02-out
setp parport.1.pin-02-out-reset 1
setp parport.1.pin-03-out 1
net adir => parport.1.pin-03-out
#********************************************************************
# ピンアサイン決定ここまで ハードウェアの結線はちゃんとGNDピンも繋ぐように
# ここより、各軸設定など
#********************************************************************
## X-AXIS configure
setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 33000
setp stepgen.0.dirsetup 33000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd
net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable axis.0.amp-enable-out => stepgen.0.enable
net home-x => axis.0.home-sw-in
## Y-AXIS configure
setp stepgen.1.position-scale [AXIS_1]SCALE
#1mmの動作にどのくらいパルスが必要か.具体的な値は.iniを参照させる.
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 0
setp stepgen.1.dirhold 33000
setp stepgen.1.dirsetup 33000
setp stepgen.1.maxaccel [AXIS_1]STEPGEN_MAXACCEL
net ypos-cmd axis.1.motor-pos-cmd => stepgen.1.position-cmd
net ypos-fb stepgen.1.position-fb => axis.1.motor-pos-fb
net ystep <= stepgen.1.step
net ydir <= stepgen.1.dir
net yenable axis.1.amp-enable-out => stepgen.1.enable
net home-y => axis.1.home-sw-in
## Z-AXIS configure
setp stepgen.2.position-scale [AXIS_2]SCALE
setp stepgen.2.steplen 1
setp stepgen.2.stepspace 0
setp stepgen.2.dirhold 33000
setp stepgen.2.dirsetup 33000
setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.2.position-cmd
net zpos-fb stepgen.2.position-fb => axis.2.motor-pos-fb
net zstep <= stepgen.2.step
net zdir <= stepgen.2.dir
net zenable axis.2.amp-enable-out => stepgen.2.enable
net home-z => axis.2.home-sw-in
## A-AXIS configure
setp stepgen.3.position-scale [AXIS_3]SCALE
setp stepgen.3.steplen 15000
setp stepgen.3.stepspace 15000
setp stepgen.3.dirhold 33000
setp stepgen.3.dirsetup 33000
setp stepgen.3.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net apos-cmd axis.3.motor-pos-cmd => stepgen.3.position-cmd
net apos-fb stepgen.3.position-fb => axis.3.motor-pos-fb
net astep <= stepgen.3.step
net adir <= stepgen.3.dir
net aenable axis.3.amp-enable-out => stepgen.3.enable
#net home-a => axis.3.home-sw-in
##TOOL_CHANGER config block Tコマンド用
loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
##PLC LADDER config block (シーケンス制御用)
# Load Classicladder without GUI (can reload LADDER GUI in AXIS GUI
loadusr classicladder --nogui custom.clp
originalmind-cobra.ini
[EMC]
MACHINE = originalmind-cobra
DEBUG = 0
[DISPLAY]
DISPLAY = axis
EDITOR = gedit
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.0
INTRO_GRAPHIC = emc2.gif
INTRO_TIME = 1
PROGRAM_PREFIX = /home/linuxcnc/linuxcnc/nc_files
## NCコードファイル探索先.普通のCNCデータと混在させたくないときなどの際に変更する.
INCREMENTS = 10mm 5mm 1mm .5mm .1mm .05mm .01mm .005mm
## マニュアル相対移動時の1軸移動量リストドロップダウンリストに表示される.
PYVCP = custompanel.xml
[FILTER]
## 読み込んだファイルでNCコードでないものを、どうやって処理するか
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python
[TASK]
TASK = milltask
CYCLE_TIME = 0.010
[RS274NGC]
PARAMETER_FILE = emc.var
[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
BASE_PERIOD = 20000
## ジッタ量から決まる最小実行間隔.レイテンシテストのプログラムで確認した値をいれる.
SERVO_PERIOD = 1000000
[HAL]
HALUI = halui
HALFILE = originalmind-cobra.hal
## ピンアサイン他、もう一つの基本設定ファイルの名前.同じフォルダにいれておくこと.
HALFILE = custom.hal
POSTGUI_HALFILE = custom_postgui.hal
[HALUI]
# add halui MDI commands here (max 64)
[TRAJ]
AXES = 4
## 機械の自由度
COORDINATES = X Y Z A
LINEAR_UNITS = mm
## 直線動作の単位、mm inch から選択.この選択は移動の原単位となるので動作量に関わる
ANGULAR_UNITS = degree
## 角度の単位 degree (deg) radian (rad) grad gon(1回転を400に分割)から選択
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 10.0
## 起動時のG00速度。mm(またはinch)/sec.
## 起動後変更可だが,事故防止のためにあらかじめ節度ある設定にしておく
MAX_LINEAR_VELOCITY = 40.00
## 最高速度。mm/sec指定。多軸の合成ベクトルの値。
#[AXIS_number] 説明用ダミー
#TYPE = LINEAR
## 軸の運動形式。直線軸XYZのほか、回転軸ABCやアームのような角度軸が可能
#HOME = 130.0
## 原点復帰で拾った機械原点をいくらの座標値とするか
#MAX_VELOCITY = 15.0
## この軸の最高速度。MAX_LINEAR_VELOCITYと衝突した場合、遅い方採用と思いたい
#MAX_ACCELERATION = 490.0
## 最大加速度。mm(inch)/s^2 速すぎると脱調。モータのデータシートに記載の最大スルーイングより大きくはできない。
## クリーンな状態が最大で、設備を載せてイナーシャが増加するほど加速時に脱調しやすくなる。
## リニアガイドの運動制限もある。 *なお、未設定時も、スゲー加速悪いが動きはする
#STEPGEN_MAXACCEL = 612.5
## パルス生成上の制限。上の値より大きくないといけない。1-10%増が推奨。バックラッシュ設定がある場合は1.5-2倍を推奨
#SCALE = 2500.0
## 1unit(mm/inch)進むのに必要なパルス数。
## stepconf_wizではプーリ比やらマイクロステップやら入れましたが、最終的に必要なのはこれだけ。
#FERROR = 1
## PID制御時に許容送り誤差(mm/inch)指示座標とエンコーダの差がこれを越えるとエラーになる
#MIN_FERROR = .25
## ごく遅い送りの時の、指示座標とエンコーダ座標の偏差。
#MIN_LIMIT = 0.0
## ネガ側ソフトウェアリミット位置。Homing後有効。EMC上でカウントした原点からの距離がこれを越えないよう停止される。
#MAX_LIMIT = 140.0
## ポジ側ソフトリミット位置。ハードウェアリミットとは別動作です。
## ソフトリミットは機械原点からの距離を追った状態で減速停止します。
## ncコードがこれを超えそうなときは警告が出ます.
## ハードリミットは拾った瞬間F2停止になるので、機械は守れますがワークはゴミになります
#HOME_OFFSET = 0.000000
## 原点拾った後オフセットさせる量。オフセット後の位置がHOMEで設定した値になる。
#HOME_SEARCH_VEL = 0.050000
## 原点スイッチにHitするまでの速度。
## 設定した加速度で減速する間にセンサを通り過ぎたり端にぶつかったりしないように設定。
## 数値の前に「-」をつけるとサーチ方向を反転できる。
## 0.0にすると,EMCは軸に原点スイッチはないと判断し、その場を原点位置とする
#HOME_LATCH_VEL = 0.050000
## 原点スイッチから抜けるまでの速度。スイッチから抜けた瞬間が0となる。
## 速くすると誤差が出るので、ゆっくり。
## ここでも-符号で移動方向が変更できる。センサから抜ける方向が決まる.
#HOME_FINAL_VEL = 0.0
## オフセットする際の速度。0.0や設定なしの時はG00の速度が適用。必ず正の値であること。
#HOME_IGNORE_LIMITS = NO
## ハードウエアリミットと原点を単一スイッチが兼ねているときはYES。
#HOME_IS_SHARED = number
## 複数の軸の原点の信号を1pinにまとめて取り込むとき使用。
## 1にしておくとどこかでセンサが反応している間は原点復帰操作に入れない.
#HOME_SEQUENCE = number
## 同時に複数軸の原点復帰を行う「Home_All」とき、復帰する優先順位。0、1、2、、の順に実行される。
## 未設定の軸はスキップされる。優先順位は複数軸が同一順位でも良い。
## *Z軸は先に復帰しないとワークを引きずるとか、諸々の機械の事情を考慮する。
## 例えば一般的なフライスなら、Z(工具軸)のみを0、X、Yを1にする。
[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
[AXIS_0]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 490.0
STEPGEN_MAXACCEL = 800.0
SCALE = 800.0
FERROR = 1
MIN_FERROR = .25
MIN_LIMIT = -2.0
MAX_LIMIT = 245.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = -5.000000
HOME_LATCH_VEL = 0.050000
HOME_SEQUENCE = 1
BACKLASH = 0.005
[AXIS_1]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 490.0
STEPGEN_MAXACCEL = 800.0
SCALE = 800.0
FERROR = 1
MIN_FERROR = .25
MIN_LIMIT = -2.0
MAX_LIMIT = 195.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = -5.00000
HOME_LATCH_VEL = 0.050000
HOME_SEQUENCE = 1
BACKLASH = 0.005
[AXIS_2]
TYPE = LINEAR
HOME = 1.0
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 490.0
STEPGEN_MAXACCEL = 800.0
SCALE = 800.0
FERROR = 1
MIN_FERROR = .25
MIN_LIMIT = -55.0
MAX_LIMIT = 4.0
HOME_OFFSET = 2.500000
HOME_SEARCH_VEL = 5.000000
HOME_LATCH_VEL = 0.050000
HOME_SEQUENCE = 0
BACKLASH= 0.01
[AXIS_3]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 10.0
MAX_ACCELERATION = 490.0
STEPGEN_MAXACCEL = 800.0
SCALE = 100.0
FERROR = 1
MIN_FERROR = .25
#MIN_LIMIT =
#MAX_LIMIT = 無限に動作して良いのでコメントアウトしておく
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = 0.000000
HOME_LATCH_VEL = 0.000000
#HOME_SEQUENCE =
## 意味が無いので原点復帰動作をさせないし復帰シーケンスにも入れない
#BACKLASH= 0.0