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