K800/Marlin設定ファイルの編集
アクセスカウンター
●K800/Marlin設定ファイルの編集

設定ファイルをK800にあわせる必要があります。
一から設定するのは大変そうだと思いましたが、デルタ型の設定例がMarlinに含まれていたのでそれをベースにする事にします。
"Marlin-Marlin_v1/Marlin/example_configurations/Configuration.h"ファイルを、1つ上の"Marlin-Marlin_v1/Marlin/"フォルダーに移動する。

Arduino IDEを起動する。
[ファイル]-[開く]メニューを選んで、"Marlin-Marlin_v1/Marlin/Marlin.ino"を開く。
"Marlin.ino"を開くと関連するファイルがタブに並ぶので、"Configuration.h"を選択する。
以下をK800にあわせて書き換える。


78行
#define MOTHERBOARD 33
マザーボードの設定ですが、これはこのままでいいでしょう。


100-126行
//===========================================================================
//============================== Delta Settings =============================
//===========================================================================
// Enable DELTA kinematics and most of the default configuration for Deltas
#define DELTA

// Make delta curves from many straight lines (linear interpolation).
// This is a trade-off between visible corners (not enough segments)
// and processor overload (too many expensive sqrt calls).
#define DELTA_SEGMENTS_PER_SECOND 50

// NOTE NB all values for DELTA_* values MUST be floating point, so always have a decimal point in them

// Center-to-center distance of the holes in the diagonal push rods.
#define DELTA_DIAGONAL_ROD 208.9 // mm

// Horizontal offset from middle of printer to smooth rod center.
#define DELTA_SMOOTH_ROD_OFFSET 0.0 // mm

// Horizontal offset of the universal joints on the end effector.
#define DELTA_EFFECTOR_OFFSET 0.0 // mm

// Horizontal offset of the universal joints on the carriages.
#define DELTA_CARRIAGE_OFFSET 0.0 // mm

// Effective horizontal distance bridged by diagonal push rods.
#define DELTA_RADIUS 104.5 //mm (DELTA_SMOOTH_ROD_OFFSET-DELTA_EFFECTOR_OFFSET-DELTA_CARRIAGE_OFFSET)
アームのセッティングです。これがデルタ型の肝です。
直交型とちがって、デルタ型はモーター座標とホットエンドの座標が1:1に対応しておらず複雑な座標計算が必要なので、アームのディメンションを正確に設定しないとまともな座標に誘導されません。
それぞれのパラメーターが何を意味しているかはhttp://3dptb.blogspot.jp/2013/11/firmware-und-slicer-beim-rostock.htmlこちらに図解があります。
上の値は私の場合で、組み立て方によっても変わりますので、上記の通り入力すればK800の設定が完了するわけではありません。各自計測した上で、細かくは動かして設定を詰めます(後述)。

なお、ロッドに関わる4つのパラメーターは実は2つに集約され、ロッドの長さDELTA_DIAGONAL_RODと、126行の式で導かれるDELTA_RADIUSの2つだけが座標計算に使用されます。
つまりDELTA_SMOOTH_ROD_OFFSET、DELTA_EFFECTOR_OFFSET、DELTA_CARRIAGE_OFFSETは実は一体のもので、プログラムが使ってもいないのに3つを別々に計測して入力するのはアホ臭いので、私は上のようにいきなりDELTA_RADIUSを設定しています(常道では無いでしょうw)。
ロッドの長さについては、K800はマグネチックジョイントで、先に玉が付いているタイプですから、有効長はロッドの端から端の長さから各端の玉の半径(両端同じ玉なので1個分の直径に同じ)を引いた値となります。

順番が戻りますが、DELTA_SEGMENTS_PER_SECONDは曲線の分割数です。曲線を直線の集まりとして近似し、各座標点を計算して行く(デルタ型では直線上の座標も計算が必要)のですが、どの程度の点に分割するかというパラメーターのようです。
当然ながら、細かく分割するほど滑らかになりますが、座標計算が増えるので処理に時間がかかります。指定した移動速度内に計算が終わらないと、終わるまでそこで止まることになり、動きがガクガクして結局なめらかに動きません。
初期値は200でしたが、およそ2cmごとにグーガッ、グーガッっとシャックリする症状が見られたので、100を試しましたが、それでもたまに止まるので、50にしました。segment/secと有りますから、1秒に50分割という事になるのでしょうか。この値で成型品の形状が妙な事になったりはしていないようなので差し当たり問題ないと思います。


166-169行
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_BED 0
サーミスタの設定です。
ホットエンド0,1,2号およびヒートベッドです。当然、今のところホットエンド0号のみの実装です。
サーミスタは謎の100kサーミスタなのでとりあえず"1"にしました。


350-359行
// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
const bool X_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
const bool Y_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
const bool Z_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
//#define DISABLE_MAX_ENDSTOPS
// Deltas never have min endstops
#define DISABLE_MIN_ENDSTOPS
エンドストップ(リミットスイッチ)の設定です。MINが下方で、MAXが上方です。
MAX側のエンドストップはN.C.側(常時閉で検出時開)に配線されているので、falseを設定します。
MIN側はデルタ型では付いていませんので無効に設定されています。


396-402行
// Travel limits after homing
#define X_MAX_POS 95
#define X_MIN_POS -95
#define Y_MAX_POS 95
#define Y_MIN_POS -95
#define Z_MAX_POS MANUAL_Z_HOME_POS
#define Z_MIN_POS 0
トラベルリミットの設定です。
K800の印刷範囲は造形ベッドの直径が200mmなので、XYは±95を設定しました。
Z方向のMAXはホームポジションの方で設定されています(後述)。


409行
//#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
オートレベリングの設定です。
K800にはオートレベリング機能があり、行頭のコメントアウト"//"をはずせば有効になりますが、素の状態でセッティングを煮詰めるべくまずは使用しないことにします。自動キャリブレーション機能があるのに手で調整することに意味があるのかどうかわかりませんが、基本調整をまずはしてみたいので私は手で調整することにします。


507-511行
#define MANUAL_HOME_POSITIONS // MANUAL_*_HOME_POS below will be used
// For deltabots this means top and center of the Cartesian print volume.
#define MANUAL_X_HOME_POS 0
#define MANUAL_Y_HOME_POS 0
#define MANUAL_Z_HOME_POS 310.0 // For delta: Distance between nozzle and print surface after homing.
ホームポジションの設定です。
MANUAL_Z_HOME_POSに、ホーミング(上方のリミット検出)した時のホットエンド端からベッドまでの距離を入れます。定規で測ってだいたい(多めに)入れて、最終的に微調整してつめます。紙一枚挟まる程度の隙間に設定するのがよいとされているようです。隙間が詰まり過ぎると最初の樹脂が出ませんし、遠すぎると接着しない事になります。詳しくは後述します。


520-527行
// delta speeds must be the same on xyz
#define DEFAULT_AXIS_STEPS_PER_UNIT {100, 100, 100, 160} // default steps per unit for Kossel (GT2, 20 tooth)
#define DEFAULT_MAX_FEEDRATE {500, 500, 500, 25} // (mm/sec)
#define DEFAULT_MAX_ACCELERATION {9000,9000,9000,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot.

#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for printing moves
#define DEFAULT_RETRACT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for retracts
ステッピングモーターのステップと速度の設定です。
DEFAULT_AXIS_STEPS_PER_UNITに1mm駆動するのに何ステップ要するかを設定します。例によって本当の値は謎ですから推測から実証するしかない。
推察としては、K800に付属するのは16Tの駆動ギアでGT2のベルトですから、1回転32mmの移動量。モーターを200step/revと仮定するなら、6.25step/mmです。しかしモータードライバーは1ステップを1,2,4,8,16分割まで出来、RAMPS上で16分割を指定しているので、100step/mmとなります。0.01mmの解像度を有するということですが、どうも0.1mm単位でしか動いていないような気もします。
エクストルーダーは駆動ローラーがフィラメントに食い込んで駆動するので、正確には後ほど実測して確かめる必要がありますが、ローラーの直径を6.3mmと見て外周長は約20mm。200step/revのモーターとするなら10step/mmとなりますが、16分割されているので160step/mmが設定値です。


597-601行
// The RepRapDiscount FULL GRAPHIC Smart Controller (quadratic white PCB)
// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
//
// ==> REMEMBER TO INSTALL U8glib to your ARDUINO library folder: http://code.google.com/p/u8glib/wiki/u8glib
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
LCDパネルの設定です。
601行のコメントアウト"//"を外して機能を有効にします。
パネルはなんのコピーなのか何も記述が無いのですが、どうもこれで表示が出ました。
LCDパネルの制御ライブラリーが別途必要なので、Arduinoにインストールする必要があります(前述)。

ちなみに付属のArduinoはMADE in ITALYのArduino MEGA2560でした。??1枚5千円もする純正Arduinoが中国製の激安キットに付いてくるか?嘘くせぇw 互換基板は作っていいのだからコピーならオリジネーターの名前を書く意味は無いと思うんですが、真贋はよく解りません。


219行から
// K800
#define DEFAULT_Kp 33.99
#define DEFAULT_Ki 3.86
#define DEFAULT_Kd 62.2
ホットエンドの調温はPID制御されますが、そのPID係数を指定します。この値は私の場合です。オートチューン機能があるので、係数は実働後それで調べて値を書き戻しますので(後述)、ここでは書き換えなくてかまいません。


<=[戻る]    <==[戻る:目次]

 <===[戻る:ホーム] (C)2014 by Shimanagasi