Marlinの設定とConfiguration.hの変更内容。
前回のブログでMarlin_v1の導入までいったので、今回はMarlinのconfiguration.hの設定変更です。行数を入れてありますが、コメントや改行だけの行も入れた行数です。configuration.hはArduino IDEから”Marlin.ino”を開いて、上に並んでいるタブの右から4つ目を選択します。
設定を変更するのに下記のブログを参考にしました。僕も使っているエクストルーダー”Airtripper”のページです。ちょっと古いかもしれないけど分かりやすかったです。
Marlin Firmware v1, Basic Configuration Set-up Guide
Boudtrate
28行目
#define BAUDRATE 115200
PrintrunでBaudrateのエラーが出たのでまず250000→115200に変更。これできちんとconnect出来た。
【6月6日追記】ボーレート250000で接続出来ましので、デフォルトにもどしました。
(次のエントリーMarlin_v1のボーレートは250,000でOK参照)
#define BAUDRATE 250000
制御基板
76行目
#ifndef MOTHERBOARD
#define MOTHERBOARD 33
#endif
35~73行目にある制御基板のリストから自分が使っているRamps1.4の番号に書き換える。
Ramps1.4は3つあるけどそのうち33番の(Power outputs: Extruder, Fan, Bed)を選びました。
サーミスタ
135~138行目
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_BED 1
こちらもサーミスタのタイプを105~133行目のリストの中から選びます。
TEMP_SENSOR_0はホットエンドのサーミスタ、TEMP_SENSOR_BEDはヒートベッドのサーミスタです。どちらも100kΩのサーミスタということは分かっているけど型番とかは分からないからリストの”1″を設定。TEMP_SENSOR_1とTEMP_SENSOR_2は使わないので”0″。
ヒートベッドの最高温度
163行目
#define HEATER_0_MAXTEMP 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define BED_MAXTEMP 120
Airtripperのブログにはホットエンドやヒートベッドには定格温度があるからその最高温度を設定するようにと書いてある。自分のヒートベッドを調べて見たけど分からなかったのでブログに載ってたように120℃に設定しました。ホットエンドの方(HEATER_0_MAXTEMP)は300℃以下だしそのまま。
エンドストップ
282~289行目
const bool X_MIN_ENDSTOP_INVERTING = false;
const bool Y_MIN_ENDSTOP_INVERTING = false;
const bool Z_MIN_ENDSTOP_INVERTING = false;
const bool X_MAX_ENDSTOP_INVERTING = true;
const bool Y_MAX_ENDSTOP_INVERTING = true;
const bool Z_MAX_ENDSTOP_INVERTING = true;
#define DISABLE_MAX_ENDSTOPS ←コメントアウト(//)を取る
//#define DISABLE_MIN_ENDSTOPS
接点式のメカニカルエンドストップとセンサー式のオプティカルエンドストップとのどちらを使っているかで設定は変わります。今回は接点式であるマイクロスイッチを使っています。もしオプティカルエンドストップを使っている場合は260行目のエンドストップ用プルアップの行をコメントアウトします。
マイクロスイッチにも押すと”閉”になるのと”開”になるのがあるのでそれを設定します。使っているのは押すと”開”(OFF)になるものなのでconst bool ○_MIN_ENDSTOP_INVERTINGを”false”します。分かったように書いてしまったけど、これは実際にPrintrunでヘッドの位置のX軸とY軸を原点方向(HOME方向)に動かそうとした時に動かず、逆の方向には動く、すなわちヘッドが端まで行ってないのにエンドストップが作動している状態だったので、デフォルトの設定とは反対にしたというだけです。
そして、原点とは逆の端のMAX_ENDSTOPはつけてないので288行目のコメントアウトを外しておきます。後で出てきますがX,Y,Z軸の作動範囲を設定でき、原点を指定すれば(ヘッドをHOMEポジションに移動させれば)作動範囲外に出ることは無いので逆の方には付けてません。
モーターの方向
308~313行目
#define INVERT_X_DIR true
#define INVERT_Y_DIR true
#define INVERT_Z_DIR true
#define INVERT_E0_DIR true
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
コメントにMendelではfalseにしなさいとか書いてあるけど、これは各軸とエクストルーダーのモーターを実際に動かしてみて、逆に回っているところを変更するのが確実です。E0はエクストルーダーのモーター。
トラベル・リミット
325~330行目
#define X_MAX_POS 170
#define X_MIN_POS 0
#define Y_MAX_POS 180
#define Y_MIN_POS 0
#define Z_MAX_POS 105
#define Z_MIN_POS 0
各軸の移動距離で単位はmm。Printrunで1mm単位づつ動かして限界の長さを測りそれぞれの軸のMAX_POSを入れています。MIN_POSは0のまま。ちなみにz軸の長さは、Bowdenタイプのエクストルーダーに変えたら20mm位伸びました。
単位当たりのステップ数
443行目
#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,2560,146}
それぞれ1mm動くのに必要なステッピングモーターのステップ数を記入。カッコ内は{X軸,Y軸,Z軸,エクストルーダー}の順です。これらは計算しても出せるけど、”RepRap Calculator3″を使うのが簡単です。
僕のPrusa Mendel i2の場合、ステッピングモーターはステップ角1.8°、1/16のマイクロステップです。X,Y軸のベルトはGT2なのでピッチは2mm、プーリーは20歯。それらの数字を入れると結果は80と出てきます。
Z軸にはM8の寸切りボルトを使っているのでピッチは1.25で、ダイレクトドライブなので”Gear Ratio”は”1:1″のまま。結果は2560です。
そして問題なのがエクストルーダーのステップ数。これは使っているギアの径や歯の形状などによって数値は変わるので、もう実際に測ってみるしか無いと思います。例えばPrintrun上でフィラメントを50mm送ってみたとします。その時に実際にフィラメントが送り出された長さを測って、もともと書いてあった数値と比較して正しいステップ数を入力します。
例えば、今回デフォルトでは”760*1.1 (=836)”とあり、Printrunで10mmフィラメントを送ってみたところ、実際の長さを測ってみたら57mmでした。なので
836 : A = 57 : 10
となるので”A=146″としました。(計算上Aは146.6666…)
本当に正確な値を測って入れるのは難しいし、スライサー(僕はslic3rを使っています。)でフィラメントの送り量を調節出来るのでキリの良い数字でもいいのではないかとも思います。
以上です。
以上がMarlin_v1のconfiguration.hの設定を変更した箇所です。
Arduinoのファイルって名前を変えて保存していいのか良く分からないし、そのうち変更した箇所が分からなくなったりしてしまい、再度設定をするときに面倒ですよね。そんな時は”WinMerge”を使うと便利です。2つのファイルを左右に並べて変更がある行をハイライトしてくれるので、どこを変更したかすぐに分かります。このブログの内容もWinMergeを使いながら書きました。
頑張りさん says
2018年6月25日 at 10:04 PM自作3Dを作って、ArduinoボードにRamps1.4をつけて、Marlinソフトをダウンロードをしてから、
説明のように、変更をして、書き込みをしたら、
static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
のように、エラーが出ていました。
どうしたらよいですか?
私はC言語のプログラムを作るの初めてなので、わかりやすく
教えていただけませんか?
お願いいたします。
AKIRA says
2018年6月25日 at 11:14 PM頑張りさんさんこんばんは。コメントありがとうございます。
エラー内容からすると、X_MAX_LENGTHがX_BED_SIZE(もしくはY_MAX_LENGTHがY_BED_SIZE)よりも大きくなっているから同じか小さくしてくださいっていうことじゃないでしょうか。
・X_MAX_LENGTH と X_BED_SIZE
・Y_MAX_LENGTH と Y_BED_SIZE
の設定値を確認してみてください。
ただこの記事が古いから最近のMarlinにきちんと対応している分かりません。
Marlinに詳しい訳ではありませんが、またエラーが出るようならばコメントください。
よろしくお願いします。
頑張る says
2018年10月24日 at 5:59 AMLCDの表示が出るようになりました。しかし、設定でつまみを回すと、ガタガタになります。
下記のプログラムの内容です。 教えてください。
お願いいたします。
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS 170
#define Y_MAX_POS 180
#define Z_MAX_POS 105
*
*
*
#define HOMING_FEEDRATE_XY (50*60)
#define HOMING_FEEDRATE_Z (4*60)
頑張る says
2018年10月24日 at 6:05 AMARDUINOボードに書き込みをしたら、エラーが出ました。
黄色の表示が出てました。
static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
その下に、
赤の表示が出ました。
Arduino:1.8.7 (Windows Store 1.8.15.0) (Windows 10), ボード:”Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”
In file included from sketch\MarlinConfig.h:42:0,
from sketch\vector_3.cpp:42:
SanityCheck.h:378:1: error: static assertion failed: Movement bounds ([XY]_MIN_POS, [XY]_MAX_POS) are too narrow to contain [XY]_BED_SIZE.
static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
^
In file included from sketch\MarlinConfig.h:42:0,
from sketch\enum.h:26,
from sketch\parser.h:32,
from sketch\parser.cpp:27:
SanityCheck.h:378:1: error: static assertion failed: Movement bounds ([XY]_MIN_POS, [XY]_MAX_POS) are too narrow to contain [XY]_BED_SIZE.
static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
^
In file included from sketch\MarlinConfig.h:42:0,
from sketch\power.cpp:27:
SanityCheck.h:378:1: error: static assertion failed: Movement bounds ([XY]_MIN_POS, [XY]_MAX_POS) are too narrow to contain [XY]_BED_SIZE.
static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
^
exit status 1
In file included from sketch\MarlinConfig.h:42:0,
from sketch\fwretract.cpp:27:
SanityCheck.h:378:1: error: static assertion failed: Movement bounds ([XY]_MIN_POS, [XY]_MAX_POS) are too narrow to contain [XY]_BED_SIZE.
static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
^
In file included from sketch\MarlinConfig.h:42:0,
from sketch\ubl.cpp:23:
SanityCheck.h:378:1: error: static assertion failed: Movement bounds ([XY]_MIN_POS, [XY]_MAX_POS) are too narrow to contain [XY]_BED_SIZE.
static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
^
In file included from sketch\MarlinConfig.h:42:0,
from sketch\Marlin.h:35,
from sketch\Marlin_main.cpp:257:
SanityCheck.h:378:1: error: static assertion failed: Movement bounds ([XY]_MIN_POS, [XY]_MAX_POS) are too narrow to contain [XY]_BED_SIZE.
static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
^
static assertion failed: Movement bounds ([XY]_MIN_POS, [XY]_MAX_POS) are too narrow to contain [XY]_BED_SIZE.