自作3Dプリンタの設定データ

こちらで製作している3Dプリンタの設定データです.

基本的にはいつも使っている3軸フライスのデータをテンプレートにして構築.

ZA軸のドライバはドライバに入力するパルス幅が長いのでそれに対応したのがメインの変更点.

ベルトドライブの1mm移動するのに必要なパルス幅は,実機を0.1mmとか0.5mmとかで送りながら,

ダイヤルゲージで測定して誤差を見たり,

20x20x20の箱をプリントさせてその外形をノギスで測定してSCALE値を調整した.


3DPrinter.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 "

## 呼んだポートの設定。

## 最小パルス幅/パルス維持時間。短くするとppsが上がるが、モータドライバが反応できなければ意味がない。

## モータドライバデータシートを参照せよ

setp parport.0.reset-time 10000 #今回この設定は下のどこでも使っていないはず

## ステップ形式設定。

loadrt stepgen step_type=0,0,0,0

## ラダーシーケンスのポート数設定

loadrt classicladder_rt numPhysInputs=15 numPhysOutputs=15 numS32in=10 numS32out=10 numFloatIn=10 numFloatOut=10

## 緊急停止の方式の設定など。

## 入力のみ、ポートHi出力と入力のループ、チャージポンプイネーブルなど様々な安全装備が利用可。

## 構築労力と安全性の兼ね合いで。

#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

#net estop-out <= iocontrol.0.user-enable-out

#net estop-ext => iocontrol.0.emc-enable-in

#e-stopを「PCイネーブル信号出力-ドライバ-PCの緊急停止入力」とループさせる.

#パラレルケーブルが抜けてもどちらかの電源が落ちても動かない仕組み

net estop-dummy iocontrol.0.user-enable-out => iocontrol.0.emc-enable-in parport.0.pin-01-out

##今回は緊急停止を解除するとパラレルポートの1ピンからモータドライバにenable信号が出るようにした

## ここまでに使うことにしたfunctionがどの間隔で実行されるか.

## 即時反応しないと危険なものはbase-thread,遅れても構わない入力はservo-threadで指定

addf parport.0.read base-thread

addf parport.0.write base-thread

addf parport.0.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 #resetをコメントアウトして,下の各軸設定のところでステップパルス幅を指示するようにした

#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

setp parport.0.pin-07-out-invert 1

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-x <= parport.0.pin-10-in-not

#net home-y <= parport.0.pin-11-in-not

#net home-z <= parport.0.pin-12-in-not

#net home-a <= parport.0.pin-13-in-not

#net estop-ext <= parport.0.pin-15-in-not

# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#********************************************************************

# ピンアサイン決定ここまで ハードウェアの結線はちゃんとGNDピンも繋ぐように

# ここより、各軸設定など

#********************************************************************

## X-AXIS configure

setp stepgen.0.position-scale [AXIS_0]SCALE

setp stepgen.0.steplen 10000 #X軸パルス幅をここで指定

setp stepgen.0.stepspace 10000

setp stepgen.0.dirhold 200000 #X軸方向切替時のウェイト時間をここで指定

setp stepgen.0.dirsetup 200000

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 10000

setp stepgen.1.stepspace 10000

setp stepgen.1.dirhold 200000

setp stepgen.1.dirsetup 200000

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 10000

setp stepgen.2.stepspace 10000

setp stepgen.2.dirhold 200000

setp stepgen.2.dirsetup 200000

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 10000

setp stepgen.3.stepspace 10000

setp stepgen.3.dirhold 200000

setp stepgen.3.dirsetup 200000

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

3DPrinter.ini

[EMC]

MACHINE = 3DPrinter

DEBUG = 0

[DISPLAY]

DISPLAY = axis

## axis keystick mini tkemc xemcから選択。

EDITOR = gedit

## emcからgコード修正に入るとき利用するテキストエディタ

POSITION_OFFSET = RELATIVE

## 起動時に表示する座標系。MACHINE or RELATIVE から選択。

## 機械原点からのワールド座標系か指定したユーザ座標系か、ということ。起動後の変更も可。

POSITION_FEEDBACK = ACTUAL

## ACTUAL or COMMANDED から選択。サーボ系ドライバで,画面表示する値をコンピュータ指示値にするか、

## ドライバのポジションセンサ(エンコーダ)からの値を標示するか。起動後変更可。

## ステッピングモータにはほぼ関係ない

MAX_FEED_OVERRIDE = 3.0

## 加工移動コードでの最大オーバライド倍率。最高ステップ速度よりは速くならない。

## スライドバーで調整するので,倍率を大きく取りすぎると細かい調整ができなくなる。

INTRO_GRAPHIC = linuxcnc.gif

## 最初のペンギンさんロゴ。変更可

INTRO_TIME = 1

## ペンギンさん最小表示時間sec。ロード時間により、これよりも長くなることはある

PROGRAM_PREFIX = /home/linuxcnc/linuxcnc/3DP

## NCコードファイル探索先.デスクトップにファイルを置きたい場合などの際に変更する.

##今回は3Dプリント専用フォルダを作ってそこを指定した.

INCREMENTS = 10mm 5mm 1mm .5mm .1mm .05mm .01mm .005mm

## マニュアル相対移動時の1軸移動量リストのドロップダウンリストに表示される.

PYVCP = custompanel.xml

## カスタムUI設定ファイル

[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

RS274NGC_STARTUP_CODE = G64P0.02

[EMCMOT]

EMCMOT = motmod

COMM_TIMEOUT = 1.0

COMM_WAIT = 0.010

BASE_PERIOD = 20000

## ジッタ量から決まる最小実行間隔.レイテンシテストのプログラムで確認した値をいれる.

SERVO_PERIOD = 1000000

[HAL]

HALUI = halui

HALFILE = 3DPrinter.hal

## アサイン他、もう一つの基本設定ファイルの名前.同じフォルダにいれておくこと.

HALFILE = custom.hal

#HALFILE = analogjoypadEXPAD.hal

#HALFILE = analogjoypadBSGP1601.hal

#HALFILE = USB_Game_Device_flightstick.hal

#HALFILE = LogitechExtreme3DFlightStick.hal #コントローラ使いたければ,適宜設定する.

POSTGUI_HALFILE = custom_postgui.hal

[HALUI]

# add halui MDI commands here (max 64)

[TRAJ]

AXES = 4

## 機械の自由度

COORDINATES = X Y Z A

## 可動軸の担当位置.XYZABCUVWから,

##「JIS B 6310/ISO 841」に規定の,座標系記号に従って選択.

## よくわからなければ,JIS B 6310 付属書Aのイラストが参考になる.

##エクストルーダは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 = 20.0

MAX_ACCELERATION = 800.0

STEPGEN_MAXACCEL = 2000.0

SCALE = 470.0 #1/128マイクロステップだが,ベルトドライブなのでSCALE値はちいさめ

FERROR = 1

MIN_FERROR = .25

MIN_LIMIT = -100.0

MAX_LIMIT = 245.0

HOME_OFFSET = 0.000000

HOME_SEARCH_VEL = 0.000000

HOME_LATCH_VEL = 0.000000

#HOME_OFFSET = 0.000000

#HOME_SEARCH_VEL = -5.000000

#HOME_LATCH_VEL = 0.050000

#HOME_SEQUENCE = 1

BACKLASH = 0.05

[AXIS_1]

TYPE = LINEAR

HOME = 0.0

MAX_VELOCITY = 20.0

MAX_ACCELERATION = 800.0

STEPGEN_MAXACCEL = 2000.0

SCALE = 800.0 #ドライブプーリが小さいぶん,Y軸の分解能が高め

FERROR = 1

MIN_FERROR = .25

MIN_LIMIT = -100.0

MAX_LIMIT = 195.0

HOME_OFFSET = 0.000000

HOME_SEARCH_VEL = 0.000000

HOME_LATCH_VEL = 0.000000

#HOME_OFFSET = 0.000000

#HOME_SEARCH_VEL = -5.00000

#HOME_LATCH_VEL = 0.050000

#HOME_SEQUENCE = 1

BACKLASH = 0.35

[AXIS_2]

TYPE = LINEAR

HOME = 0.0

MAX_VELOCITY = 5.0

MAX_ACCELERATION = 300.0

STEPGEN_MAXACCEL = 800.0

SCALE = 1600.0

FERROR = 1

MIN_FERROR = .25

MIN_LIMIT = -50.0

MAX_LIMIT = 55.0

HOME_OFFSET = 0.000000

HOME_SEARCH_VEL = 0.000000

HOME_LATCH_VEL = 0.000000

#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 = 105.0 #送りギアの径から1mm送るのに必要なパルス数をだいたい計算して入れる.テストプリントの充填状況に応じて適宜調整する

FERROR = 1

MIN_FERROR = .25

#MIN_LIMIT = -55.0

#MAX_LIMIT = 4.0

HOME_OFFSET = 0.000000

HOME_SEARCH_VEL = 0.000000

HOME_LATCH_VEL = 0.000000

#HOME_SEQUENCE =

#BACKLASH= 0.0