From 84aad586b24ff5e1c07f3274ab519e9b3a20e11a Mon Sep 17 00:00:00 2001 From: Silverquark Date: Mon, 5 Jun 2017 13:24:57 +0200 Subject: [PATCH] - added custom temp option when loding/unloading filament - faster loading/unloading filament - fixed autotune not working - fixed statistics crash - increased thermal runaway tolerances (should fix prints stopping) - added a error message when thermal runaway error occurs --- LCDFirmware/DWIN_SET/043 system menu.bmp | Bin 391734 -> 391734 bytes .../DWIN_SET/044 system menu press.bmp | Bin 391734 -> 391734 bytes LCDFirmware/DWIN_SET/068_thermal_runaway.bmp | Bin 0 -> 391734 bytes .../DWIN_SET/13Touch_Control_Config.bin | Bin 3346 -> 3346 bytes LCDFirmware/DWIN_SET/14Variable_Config.bin | Bin 139264 -> 141312 bytes LCDFirmware/DWprj.hmi | 1 + LCDFirmware/TFT/033 print.bmp.tft | Bin 24113 -> 24113 bytes LCDFirmware/TFT/043 system menu.bmp.tft | Bin 20069 -> 20069 bytes LCDFirmware/TFT/068_thermal_runaway.bmp.tft | Bin 0 -> 2202 bytes Marlin/.vs/Marlin/v14/.suo | Bin 71680 -> 73728 bytes Marlin/Configuration.h | 1244 +++++++------- Marlin/Configuration_adv.h | 1448 ++++++++--------- Marlin/bi3_plus_lcd.cpp | 57 +- Marlin/temperature.cpp | 7 +- 14 files changed, 1382 insertions(+), 1375 deletions(-) create mode 100644 LCDFirmware/DWIN_SET/068_thermal_runaway.bmp create mode 100644 LCDFirmware/TFT/068_thermal_runaway.bmp.tft diff --git a/LCDFirmware/DWIN_SET/043 system menu.bmp b/LCDFirmware/DWIN_SET/043 system menu.bmp index da4f9ee7c01e6d9273c6796b9a4cecf962714b41..bbf1c3c7c708d4fa90c16284e6dfc2f00785208f 100644 GIT binary patch delta 902 zcmdn?MSR;A@eP@ElN0RNI6r^>eD2)2)2B~wZmhe;1Qg<&-jl~9J^7Y^{q*H|OvaP> zj`MH++$hE*@&EsS7Z(=>7+_*zijR-Kc=6)qK)Y*9Xqx((**15z%QHy>H32nbXJ-Q~ zxqJ8Sx^?UL`1q8SmA`-g4%BxUU0>c5(an~<0w8w?aXx(b5U97mzaNLn>2D7(b8db# zi3_ZpO-xKIG&B^4+Rc?S#6Ze;IKO@S1~j#>un?C@$$64YLO^%_{rh*{zJ1Ql&YYZ_ zH*Va(rF`dNF(!T|Cns3AFccRTPcE#PwmHGh8JqVaSBfzSwY9bN_4SpPmz$WF0Bv~s z^eNDIj8FuH#?N(1Ol(n6Q9xC=l+4@$RI+5r5}*qv2i8ddE#8OCV#{67aLv!p2P(aO z{W>l$-P|w0Bnk`xV9*y86+L_Q?CsmPvuDo+#@u$seT+A;7(O}Hj%Rc0QFbQL1q&7^ zC@8=K!`$5b=+UE?E;rlEep;J}^Zxz&J9g~2b?X*T#T|sX+kq)>10&EQ)0p82Ybc6= Za!^jYEGHunGXXI(5VLHTG`%N}NqX`v0sHC8^O%e$^Bw2k{JBw#i8&=D zWxC@pCei81Ma)|^C)g>WtL$rL+uYSI&m>V+R>r`C>mrL;{oFZxsbwrF)J9qA8#f{a>oBynnXJYg6^0Kk90Se4wWd;V(FGH+ex)K%*A8sDZtfRgl6d&=ArBAFj2Sb4(fsSz zFJLSH9n#X$0(J<{7o3}0kFqlf_4f91ad82qARsw88PiW@o7qomGjU$OetrM`{V!j> sL=B(qz~r%k5$Kj_%L6vaTvJf~fjlM#rSfS4JGS+>h^vPymg0DZ7qhX4Qo diff --git a/LCDFirmware/DWIN_SET/044 system menu press.bmp b/LCDFirmware/DWIN_SET/044 system menu press.bmp index 3e8bfda4f4e4747521f405972156edd140d2bd11..fba313b927addf8719ff86b98cf944906941ed4d 100644 GIT binary patch delta 430 zcmdn?MSR;A@eP@ElN0RNI6r^>eD2)2)2B~wZmd&a1PXC(URa;OBJuzKe-{@Q1{h#s zVv3KCzj*QD=0H1H#?5xE*(}mPB|z!y>};R`ckkX^w{9IDAD^DIGdQ5SZHV{L{MT{IY^L)^V_#?K*fcHg+OsZ#?4!2 z*Rt>ft@``-@4kKeoSmIHIXNdkoaPEtdwz51!YUSiCnqPEGZ~7DizgS>Oan?*Z+^e5 zfkmjTt*x)Gue`k6#KZ)s`RUWAKx4TXH}|aRXJLzqiUNuO1vnTtYi^pv!nS0|5};9& z8Q+)zO*p)H*YUUuyA;II8a=War66S4Ipt&&UNe70oBi)J9l&A>RGI8US3`{Ha0*t9E_VaH%($; z20D52`wmf{+UJ{hZSQ9hy>a8l;lqdjBLPoO&&lyC6@f}FZ4TT!gGJ)u!-qUPJTqp@ z00z~sU%!C<1zOS4(lR;F?$zekhZeF3_4f91ad81fAs{(987TK;bJK|pENs`WU*Erf j|MZ2rj7~r!7d6YAYnM642*gZ4%nZaV+hxwNO6dRq(eJr| diff --git a/LCDFirmware/DWIN_SET/068_thermal_runaway.bmp b/LCDFirmware/DWIN_SET/068_thermal_runaway.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5a26520eb5b4e43a3bd6b36dd675903561a8bf69 GIT binary patch literal 391734 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 HZ4mf>?87y? literal 0 HcmV?d00001 diff --git a/LCDFirmware/DWIN_SET/13Touch_Control_Config.bin b/LCDFirmware/DWIN_SET/13Touch_Control_Config.bin index 20e5adc896a39bedbbcd093266a17393268377c7..bc4b65aa06abd8a0aaf1d0eb8e683d2a96925f4d 100644 GIT binary patch delta 15 WcmbOvHA!lN6$jIQhRrq{*H{252L&Af delta 15 WcmbOvHA!lN6$cZ8?PeQ}Yb*dHd<0tn diff --git a/LCDFirmware/DWIN_SET/14Variable_Config.bin b/LCDFirmware/DWIN_SET/14Variable_Config.bin index 5d90900a47183c5b6baef3172c0edb0b94398420..1e0ea052419dd85e4d4ef66197eae973b6cfade5 100644 GIT binary patch delta 34 qcmZoTz|nAlqhSl8m&x?HL{0UvV&Qf5pKhCcapKg98B7X$rXj delta 30 mcmZp;z|nAkqhSl8m&x?HOI$UvV&Qf5pKhCJq3raS84K diff --git a/LCDFirmware/DWprj.hmi b/LCDFirmware/DWprj.hmi index 7004a4e0e..dc3236427 100644 --- a/LCDFirmware/DWprj.hmi +++ b/LCDFirmware/DWprj.hmi @@ -54,3 +54,4 @@ SPADDRESS=5000 65=065_auto_pid_graph.bmp 66=066_pid_finished.bmp 67=067_pid_finished_pressed.bmp +68=068_thermal_runaway.bmp diff --git a/LCDFirmware/TFT/033 print.bmp.tft b/LCDFirmware/TFT/033 print.bmp.tft index 97da30b5d5ab9123b4d6838fa584f8ee30d788d4..76d3cc612873d707e4fa4bf0167db1bebefbd334 100644 GIT binary patch delta 35 pcmdnEhjHT`#tpNC8679j7XHrYxOuXOlo61#&h0mlv&y|)3;+U24dVa+ delta 35 pcmdnEhjHT`#tpNC8C@sO7XHrYx_PpQlo61#&h0mlv&y|)3;+W`4f6m1 diff --git a/LCDFirmware/TFT/043 system menu.bmp.tft b/LCDFirmware/TFT/043 system menu.bmp.tft index 1edd5523c5f8eb12ca7d4c9bc87d7fc6f0153b26..5e296eaa746bf2b7a51341e06b45ec69bc7a9af3 100644 GIT binary patch delta 17 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 delta 2656 zcmd6pe@xRy6u`glXlsE2RSM!jD77k9#G=3q;HbjXxru=2h~t;wj~S661DVt)&TS?} zne=6L*)Y+HhGojI=R#bZb`z&_X3i|pWXmRqX1F+~8yX;y?p>j!It+g;*^y80-QBx) z_kHi(9d!;_U8`(gYDkzQNj}7Y)9IwjCF@RPhco%X_e1Y!a1+}JKk$caCTt&1!;^?{ zgq{c_LJ2=YOrJotf|y8z6A?rb5kkm_R6<3>6KY}x5l2iXo+C8GW3uB*br3jkSV=f8vo>G`k?Q|l8c#&8@EF>an z0vhG1iDH!k>L?_Nh*d-^QA&tas)y>eRIejmCyE=gXHTdZ8hDH9EkrG0CbnXyJlMj@ zB*c+a$0#?uk zp`cNL-Dm=ph>&2J7=0yPi@8QMZjFD(mcT5VX3ELCW7X;_ zgY}v{wj|cDDh394wCXz8YZrk`95T0UteRTS*@ACC_JVhB&%#*p-AzCiQ~6Bi$i?SM zyf1AGvzeHsbduHR4;oDz9lEILh3D3E+SILnLW21uztE8 zyO)RARx*2XIyqikWjgO2RHf{}ro9E0zqIO4Lgs8=nDx_xQ`VZU13tIcxQrdjECPEa zS!!RGN}dZTubDA-VCRY7N?Ud~cBLQtnzrV2A}^fIO{X0&%CM!PT`4Y6afIETQLLs$ zNhtPLWXiF&p>O<78@U02F_@??{W*~@xmY-onKmc3@wDRQV|E#v(!eLF&g<*o>0 z-bat(3~7^-?)%>tDsn-Y|@=j|K_n+0(eAz7A}4if1LDe+j)l zB6AheA&ft=0l)k%09&sc@WaM3lGE|=$Ez`}Cl3jK%`*b6kJ3hDX2?q>6e48ISS_t^_)ydp+HigCNj)e;fp2#Kn9_uLl@u@*-_1S$qJytz9Mu=Q*bs-1dVc{dWBjwp)q3aqXV0*Sv{ zZwAyk68N#Zm*HPA^@<<1ToQ40#aPt{8OcWaGp8pmuw7OnG!`ocz0@}NCao?R}u6U5Z yu>J2xZAL$6Wo^HYhhjO_=?$*ru=nc0ofZAPzLxvtZRHB^3v5$FLO;+;ruYXIK3J>( diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 06ea9e2e0..4ec3f6ef0 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -1,40 +1,40 @@ /** - * Marlin 3D Printer Firmware - * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] - * - * Based on Sprinter and grbl. - * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ +* Marlin 3D Printer Firmware +* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] +* +* Based on Sprinter and grbl. +* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +*/ /** - * Configuration.h - * - * Basic settings such as: - * - * - Type of electronics - * - Type of temperature sensor - * - Printer geometry - * - Endstop configuration - * - LCD controller - * - Extra features - * - * Advanced settings can be found in Configuration_adv.h - * - */ +* Configuration.h +* +* Basic settings such as: +* +* - Type of electronics +* - Type of temperature sensor +* - Printer geometry +* - Endstop configuration +* - LCD controller +* - Extra features +* +* Advanced settings can be found in Configuration_adv.h +* +*/ #ifndef CONFIGURATION_H #define CONFIGURATION_H #define CONFIGURATION_H_VERSION 010100 @@ -44,16 +44,16 @@ //=========================================================================== /** - * Here are some standard links for getting your machine calibrated: - * - * http://reprap.org/wiki/Calibration - * http://youtu.be/wAL9d7FgInk - * http://calculator.josefprusa.cz - * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide - * http://www.thingiverse.com/thing:5573 - * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap - * http://www.thingiverse.com/thing:298812 - */ +* Here are some standard links for getting your machine calibrated: +* +* http://reprap.org/wiki/Calibration +* http://youtu.be/wAL9d7FgInk +* http://calculator.josefprusa.cz +* http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide +* http://www.thingiverse.com/thing:5573 +* https://sites.google.com/site/repraplogphase/calibration-of-your-reprap +* http://www.thingiverse.com/thing:298812 +*/ //=========================================================================== //============================= DELTA Printer =============================== @@ -94,22 +94,22 @@ // @section machine /** - * Select which serial port on the board will be used for communication with the host. - * This allows the connection of wireless adapters (for instance) to non-default port pins. - * Serial port 0 is always used by the Arduino bootloader regardless of this setting. - * - * :[0, 1, 2, 3, 4, 5, 6, 7] - */ +* Select which serial port on the board will be used for communication with the host. +* This allows the connection of wireless adapters (for instance) to non-default port pins. +* Serial port 0 is always used by the Arduino bootloader regardless of this setting. +* +* :[0, 1, 2, 3, 4, 5, 6, 7] +*/ #define SERIAL_PORT 0 /** - * This setting determines the communication speed of the printer. - * - * 250000 works in most cases, but you might try a lower speed if - * you commonly experience drop-outs during host printing. - * - * :[2400, 9600, 19200, 38400, 57600, 115200, 250000] - */ +* This setting determines the communication speed of the printer. +* +* 250000 works in most cases, but you might try a lower speed if +* you commonly experience drop-outs during host printing. +* +* :[2400, 9600, 19200, 38400, 57600, 115200, 250000] +*/ #define BAUDRATE 115200 // Enable the Bluetooth serial interface on AT90USB devices @@ -118,7 +118,7 @@ // The following define selects which electronics board you have. // Please choose the name from boards.h that matches your setup #ifndef MOTHERBOARD - #define MOTHERBOARD BOARD_BI3_PLUS +#define MOTHERBOARD BOARD_BI3_PLUS #endif // Optional custom name for your RepStrap or other custom machine @@ -140,24 +140,24 @@ // Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z //#define SWITCHING_EXTRUDER #if ENABLED(SWITCHING_EXTRUDER) - #define SWITCHING_EXTRUDER_SERVO_NR 0 - #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 - //#define HOTEND_OFFSET_Z {0.0, 0.0} +#define SWITCHING_EXTRUDER_SERVO_NR 0 +#define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 +//#define HOTEND_OFFSET_Z {0.0, 0.0} #endif /** - * "Mixing Extruder" - * - Adds a new code, M165, to set the current mix factors. - * - Extends the stepping routines to move multiple steppers in proportion to the mix. - * - Optional support for Repetier Firmware M163, M164, and virtual extruder. - * - This implementation supports only a single extruder. - * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation - */ +* "Mixing Extruder" +* - Adds a new code, M165, to set the current mix factors. +* - Extends the stepping routines to move multiple steppers in proportion to the mix. +* - Optional support for Repetier Firmware M163, M164, and virtual extruder. +* - This implementation supports only a single extruder. +* - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation +*/ //#define MIXING_EXTRUDER #if ENABLED(MIXING_EXTRUDER) - #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder - #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164 - //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands +#define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder +#define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164 +//#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands #endif // Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing). @@ -167,20 +167,20 @@ //#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis /** - * Select your power supply here. Use 0 if you haven't connected the PS_ON_PIN - * - * 0 = No Power Switch - * 1 = ATX - * 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC) - * - * :{ 0:'No power switch', 1:'ATX', 2:'X-Box 360' } - */ +* Select your power supply here. Use 0 if you haven't connected the PS_ON_PIN +* +* 0 = No Power Switch +* 1 = ATX +* 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC) +* +* :{ 0:'No power switch', 1:'ATX', 2:'X-Box 360' } +*/ #define POWER_SUPPLY 0 #if POWER_SUPPLY > 0 - // Enable this option to leave the PSU off at startup. - // Power to steppers and heaters will need to be turned on with M80. - //#define PS_DEFAULT_OFF +// Enable this option to leave the PSU off at startup. +// Power to steppers and heaters will need to be turned on with M80. +//#define PS_DEFAULT_OFF #endif // @section temperature @@ -190,51 +190,51 @@ //=========================================================================== /** - * --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table - * - * Temperature sensors available: - * - * -3 : thermocouple with MAX31855 (only for sensor 0) - * -2 : thermocouple with MAX6675 (only for sensor 0) - * -1 : thermocouple with AD595 - * 0 : not used - * 1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup) - * 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) - * 3 : Mendel-parts thermistor (4.7k pullup) - * 4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! - * 5 : 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup) - * 6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup) - * 7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) - * 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) - * 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) - * 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) - * 10 : 100k RS thermistor 198-961 (4.7k pullup) - * 11 : 100k beta 3950 1% thermistor (4.7k pullup) - * 12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) - * 13 : 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" - * 20 : the PT100 circuit found in the Ultimainboard V2.x - * 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950 - * 66 : 4.7M High Temperature thermistor from Dyze Design - * 70 : the 100K thermistor found in the bq Hephestos 2 - * 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor - * - * 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k. - * (but gives greater accuracy and more stable PID) - * 51 : 100k thermistor - EPCOS (1k pullup) - * 52 : 200k thermistor - ATC Semitec 204GT-2 (1k pullup) - * 55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) - * - * 1047 : Pt1000 with 4k7 pullup - * 1010 : Pt1000 with 1k pullup (non standard) - * 147 : Pt100 with 4k7 pullup - * 110 : Pt100 with 1k pullup (non standard) - * - * Use these for Testing or Development purposes. NEVER for production machine. - * 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below. - * 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below. - * - * :{ '0': "Not used", '1':"100k / 4.7k - EPCOS", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '20':"PT100 (Ultimainboard V2.x)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '66':"Dyze Design 4.7M High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595",'998':"Dummy 1", '999':"Dummy 2" } - */ +* --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table +* +* Temperature sensors available: +* +* -3 : thermocouple with MAX31855 (only for sensor 0) +* -2 : thermocouple with MAX6675 (only for sensor 0) +* -1 : thermocouple with AD595 +* 0 : not used +* 1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup) +* 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) +* 3 : Mendel-parts thermistor (4.7k pullup) +* 4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! +* 5 : 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup) +* 6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup) +* 7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) +* 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) +* 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) +* 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) +* 10 : 100k RS thermistor 198-961 (4.7k pullup) +* 11 : 100k beta 3950 1% thermistor (4.7k pullup) +* 12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) +* 13 : 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" +* 20 : the PT100 circuit found in the Ultimainboard V2.x +* 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950 +* 66 : 4.7M High Temperature thermistor from Dyze Design +* 70 : the 100K thermistor found in the bq Hephestos 2 +* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor +* +* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k. +* (but gives greater accuracy and more stable PID) +* 51 : 100k thermistor - EPCOS (1k pullup) +* 52 : 200k thermistor - ATC Semitec 204GT-2 (1k pullup) +* 55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) +* +* 1047 : Pt1000 with 4k7 pullup +* 1010 : Pt1000 with 1k pullup (non standard) +* 147 : Pt100 with 4k7 pullup +* 110 : Pt100 with 1k pullup (non standard) +* +* Use these for Testing or Development purposes. NEVER for production machine. +* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below. +* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below. +* +* :{ '0': "Not used", '1':"100k / 4.7k - EPCOS", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '20':"PT100 (Ultimainboard V2.x)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '66':"Dyze Design 4.7M High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595",'998':"Dummy 1", '999':"Dummy 2" } +*/ #define TEMP_SENSOR_0 1 #define TEMP_SENSOR_1 0 #define TEMP_SENSOR_2 0 @@ -291,32 +291,32 @@ #define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current #define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current #if ENABLED(PIDTEMP) - //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result. - //#define PID_DEBUG // Sends debug data to the serial port. - //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX - //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay - //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders) - // Set/get with gcode: M301 E[extruder number, 0-2] - #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature - // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max. - #define K1 0.95 //smoothing factor within the PID - - // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it - // Ultimaker - #define DEFAULT_Kp 17.77 - #define DEFAULT_Ki 0.91 - #define DEFAULT_Kd 86.61 - - - // MakerGear - //#define DEFAULT_Kp 7.0 - //#define DEFAULT_Ki 0.1 - //#define DEFAULT_Kd 12 - - // Mendel Parts V9 on 12V - //#define DEFAULT_Kp 63.0 - //#define DEFAULT_Ki 2.25 - //#define DEFAULT_Kd 440 +//#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result. +//#define PID_DEBUG // Sends debug data to the serial port. +//#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX +//#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay +//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders) +// Set/get with gcode: M301 E[extruder number, 0-2] +#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature +// is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max. +#define K1 0.95 //smoothing factor within the PID + +// If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it +// Ultimaker +#define DEFAULT_Kp 17.77 +#define DEFAULT_Ki 0.91 +#define DEFAULT_Kd 86.61 + + +// MakerGear +//#define DEFAULT_Kp 7.0 +//#define DEFAULT_Ki 0.1 +//#define DEFAULT_Kd 12 + +// Mendel Parts V9 on 12V +//#define DEFAULT_Kp 63.0 +//#define DEFAULT_Ki 2.25 +//#define DEFAULT_Kd 440 #endif // PIDTEMP @@ -344,21 +344,21 @@ #if ENABLED(PIDTEMPBED) - //#define PID_BED_DEBUG // Sends debug data to the serial port. +//#define PID_BED_DEBUG // Sends debug data to the serial port. - //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) - //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) - #define DEFAULT_bedKp 10.00 - #define DEFAULT_bedKi .023 - #define DEFAULT_bedKd 305.4 +//120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) +//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) +#define DEFAULT_bedKp 10.00 +#define DEFAULT_bedKi .023 +#define DEFAULT_bedKd 305.4 - //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) - //from pidautotune - //#define DEFAULT_bedKp 97.1 - //#define DEFAULT_bedKi 1.41 - //#define DEFAULT_bedKd 1675.16 +//120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) +//from pidautotune +//#define DEFAULT_bedKp 97.1 +//#define DEFAULT_bedKi 1.41 +//#define DEFAULT_bedKd 1675.16 - // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. +// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. #endif // PIDTEMPBED // @section extruder @@ -380,16 +380,16 @@ //=========================================================================== /** - * Thermal Protection protects your printer from damage and fire if a - * thermistor falls out or temperature sensors fail in any way. - * - * The issue: If a thermistor falls out or a temperature sensor fails, - * Marlin can no longer sense the actual temperature. Since a disconnected - * thermistor reads as a low temperature, the firmware will keep the heater on. - * - * If you get "Thermal Runaway" or "Heating failed" errors the - * details can be tuned in Configuration_adv.h - */ +* Thermal Protection protects your printer from damage and fire if a +* thermistor falls out or temperature sensors fail in any way. +* +* The issue: If a thermistor falls out or a temperature sensor fails, +* Marlin can no longer sense the actual temperature. Since a disconnected +* thermistor reads as a low temperature, the firmware will keep the heater on. +* +* If you get "Thermal Runaway" or "Heating failed" errors the +* details can be tuned in Configuration_adv.h +*/ #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed @@ -429,14 +429,14 @@ #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors #if DISABLED(ENDSTOPPULLUPS) - // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined - //#define ENDSTOPPULLUP_XMAX - //#define ENDSTOPPULLUP_YMAX - //#define ENDSTOPPULLUP_ZMAX - //#define ENDSTOPPULLUP_XMIN - //#define ENDSTOPPULLUP_YMIN - //#define ENDSTOPPULLUP_ZMIN - //#define ENDSTOPPULLUP_ZMIN_PROBE +// fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined +//#define ENDSTOPPULLUP_XMAX +//#define ENDSTOPPULLUP_YMAX +//#define ENDSTOPPULLUP_ZMAX +//#define ENDSTOPPULLUP_XMIN +//#define ENDSTOPPULLUP_YMIN +//#define ENDSTOPPULLUP_ZMIN +//#define ENDSTOPPULLUP_ZMIN_PROBE #endif // Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup). @@ -458,50 +458,50 @@ // @section motion /** - * Default Settings - * - * These settings can be reset by M502 - * - * Note that if EEPROM is enabled, saved values will override these. - */ +* Default Settings +* +* These settings can be reset by M502 +* +* Note that if EEPROM is enabled, saved values will override these. +*/ /** - * With this option each E stepper can have its own factors for the - * following movement settings. If fewer factors are given than the - * total number of extruders, the last value applies to the rest. - */ +* With this option each E stepper can have its own factors for the +* following movement settings. If fewer factors are given than the +* total number of extruders, the last value applies to the rest. +*/ //#define DISTINCT_E_FACTORS /** - * Default Axis Steps Per Unit (steps/mm) - * Override with M92 - * X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]] - */ +* Default Axis Steps Per Unit (steps/mm) +* Override with M92 +* X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]] +*/ #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 94.3 } /** - * Default Max Feed Rate (mm/s) - * Override with M203 - * X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]] - */ +* Default Max Feed Rate (mm/s) +* Override with M203 +* X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]] +*/ #define DEFAULT_MAX_FEEDRATE { 450, 450, 5, 25 } /** - * Default Max Acceleration (change/s) change = mm/s - * (Maximum start speed for accelerated moves) - * Override with M201 - * X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]] - */ +* Default Max Acceleration (change/s) change = mm/s +* (Maximum start speed for accelerated moves) +* Override with M201 +* X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]] +*/ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 3000 } /** - * Default Acceleration (change/s) change = mm/s - * Override with M204 - * - * M204 P Acceleration - * M204 R Retract Acceleration - * M204 T Travel Acceleration - */ +* Default Acceleration (change/s) change = mm/s +* Override with M204 +* +* M204 P Acceleration +* M204 R Retract Acceleration +* M204 T Travel Acceleration +*/ #define DEFAULT_ACCELERATION 800 // X, Y, Z and E acceleration for printing moves #define DEFAULT_RETRACT_ACCELERATION 800 // E acceleration for retracts #define DEFAULT_TRAVEL_ACCELERATION 800 // X, Y, Z acceleration for travel (non printing) moves @@ -514,13 +514,13 @@ #define DEFAULT_PREHEAT_PRESET3_BED 60 /** - * Default Jerk (mm/s) - * Override with M205 X Y Z E - * - * "Jerk" specifies the minimum speed change that requires acceleration. - * When changing speed and direction, if the difference is less than the - * value set here, it may happen instantaneously. - */ +* Default Jerk (mm/s) +* Override with M205 X Y Z E +* +* "Jerk" specifies the minimum speed change that requires acceleration. +* When changing speed and direction, if the difference is less than the +* value set here, it may happen instantaneously. +*/ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.4 @@ -537,66 +537,66 @@ // /** - * Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN - * - * Enable this option for a probe connected to the Z Min endstop pin. - */ +* Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN +* +* Enable this option for a probe connected to the Z Min endstop pin. +*/ #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN /** - * Z_MIN_PROBE_ENDSTOP - * - * Enable this option for a probe connected to any pin except Z-Min. - * (By default Marlin assumes the Z-Max endstop pin.) - * To use a custom Z Probe pin, set Z_MIN_PROBE_PIN below. - * - * - The simplest option is to use a free endstop connector. - * - Use 5V for powered (usually inductive) sensors. - * - * - RAMPS 1.3/1.4 boards may use the 5V, GND, and Aux4->D32 pin: - * - For simple switches connect... - * - normally-closed switches to GND and D32. - * - normally-open switches to 5V and D32. - * - * WARNING: Setting the wrong pin may have unexpected and potentially - * disastrous consequences. Use with caution and do your homework. - * - */ +* Z_MIN_PROBE_ENDSTOP +* +* Enable this option for a probe connected to any pin except Z-Min. +* (By default Marlin assumes the Z-Max endstop pin.) +* To use a custom Z Probe pin, set Z_MIN_PROBE_PIN below. +* +* - The simplest option is to use a free endstop connector. +* - Use 5V for powered (usually inductive) sensors. +* +* - RAMPS 1.3/1.4 boards may use the 5V, GND, and Aux4->D32 pin: +* - For simple switches connect... +* - normally-closed switches to GND and D32. +* - normally-open switches to 5V and D32. +* +* WARNING: Setting the wrong pin may have unexpected and potentially +* disastrous consequences. Use with caution and do your homework. +* +*/ //#define Z_MIN_PROBE_ENDSTOP //#define Z_MIN_PROBE_PIN Z_MAX_PIN /** - * Probe Type - * - * Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc. - * You must activate one of these to use Auto Bed Leveling below. - */ +* Probe Type +* +* Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc. +* You must activate one of these to use Auto Bed Leveling below. +*/ /** - * The "Manual Probe" provides a means to do "Auto" Bed Leveling without a probe. - * Use G29 repeatedly, adjusting the Z height at each point with movement commands - * or (with LCD_BED_LEVELING) the LCD controller. - */ +* The "Manual Probe" provides a means to do "Auto" Bed Leveling without a probe. +* Use G29 repeatedly, adjusting the Z height at each point with movement commands +* or (with LCD_BED_LEVELING) the LCD controller. +*/ //#define PROBE_MANUALLY /** - * A Fix-Mounted Probe either doesn't deploy or needs manual deployment. - * (e.g., an inductive probe or a nozzle-based probe-switch.) - */ +* A Fix-Mounted Probe either doesn't deploy or needs manual deployment. +* (e.g., an inductive probe or a nozzle-based probe-switch.) +*/ //#define FIX_MOUNTED_PROBE /** - * Z Servo Probe, such as an endstop switch on a rotating arm. - */ +* Z Servo Probe, such as an endstop switch on a rotating arm. +*/ //#define Z_ENDSTOP_SERVO_NR 0 // Defaults to SERVO 0 connector. //#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles /** - * The BLTouch probe is a Hall effect sensor that emulates a servo. - */ +* The BLTouch probe is a Hall effect sensor that emulates a servo. +*/ //#define BLTOUCH #if ENABLED(BLTOUCH) - //#define BLTOUCH_DELAY 375 // (ms) Enable and increase if needed +//#define BLTOUCH_DELAY 375 // (ms) Enable and increase if needed #endif /* @@ -621,24 +621,24 @@ // /** - * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. - * - * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 - * - * +-- BACK ---+ - * | | - * L | (+) P | R <-- probe (20,20) - * E | | I - * F | (-) N (+) | G <-- nozzle (10,10) - * T | | H - * | (-) | T - * | | - * O-- FRONT --+ - * (0,0) - */ +* Z Probe to nozzle (X,Y) offset, relative to (0, 0). +* X and Y offsets must be integers. +* +* In the following example the X and Y offsets are both positive: +* #define X_PROBE_OFFSET_FROM_EXTRUDER 10 +* #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 +* +* +-- BACK ---+ +* | | +* L | (+) P | R <-- probe (20,20) +* E | | I +* F | (-) N (+) | G <-- nozzle (10,10) +* T | | H +* | (-) | T +* | | +* O-- FRONT --+ +* (0,0) +*/ #define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] #define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] @@ -656,19 +656,19 @@ //#define PROBE_DOUBLE_TOUCH /** - * Z probes require clearance when deploying, stowing, and moving between - * probe points to avoid hitting the bed and other hardware. - * Servo-mounted probes require extra space for the arm to rotate. - * Inductive probes need space to keep from triggering early. - * - * Use these settings to specify the distance (mm) to raise the probe (or - * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. - * Only integer values >= 1 are valid here. - * - * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. - * But: `M851 Z+1` with a CLEARANCE of 2 => 2mm from bed to nozzle. - */ +* Z probes require clearance when deploying, stowing, and moving between +* probe points to avoid hitting the bed and other hardware. +* Servo-mounted probes require extra space for the arm to rotate. +* Inductive probes need space to keep from triggering early. +* +* Use these settings to specify the distance (mm) to raise the probe (or +* lower the bed). The values set here apply over and above any (negative) +* probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. +* Only integer values >= 1 are valid here. +* +* Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. +* But: `M851 Z+1` with a CLEARANCE of 2 => 2mm from bed to nozzle. +*/ #define Z_CLEARANCE_DEPLOY_PROBE 10 // Z Clearance for Deploy/Stow #define Z_CLEARANCE_BETWEEN_PROBES 5 // Z Clearance between probe points @@ -721,7 +721,7 @@ // @section homing //#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ... - // Be sure you have this distance over your Z_MAX_POS in case. +// Be sure you have this distance over your Z_MAX_POS in case. // Direction of endstops when homing; 1=MAX, -1=MIN // :[-1,1] @@ -745,18 +745,18 @@ #define MAX_SOFTWARE_ENDSTOPS /** - * Filament Runout Sensor - * A mechanical or opto endstop is used to check for the presence of filament. - * - * RAMPS-based boards use SERVO3_PIN. - * For other boards you may need to define FIL_RUNOUT_PIN. - * By default the firmware assumes HIGH = has filament, LOW = ran out - */ +* Filament Runout Sensor +* A mechanical or opto endstop is used to check for the presence of filament. +* +* RAMPS-based boards use SERVO3_PIN. +* For other boards you may need to define FIL_RUNOUT_PIN. +* By default the firmware assumes HIGH = has filament, LOW = ran out +*/ //#define FILAMENT_RUNOUT_SENSOR #if ENABLED(FILAMENT_RUNOUT_SENSOR) - #define FIL_RUNOUT_INVERTING false // set to true to invert the logic of the sensor. - #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined. - #define FILAMENT_RUNOUT_SCRIPT "M600" +#define FIL_RUNOUT_INVERTING false // set to true to invert the logic of the sensor. +#define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined. +#define FILAMENT_RUNOUT_SCRIPT "M600" #endif //=========================================================================== @@ -765,43 +765,43 @@ // @section bedlevel /** - * Choose one of the options below to enable G29 Bed Leveling. The parameters - * and behavior of G29 will change depending on your selection. - * - * If using a Probe for Z Homing, enable Z_SAFE_HOMING also! - * - * - AUTO_BED_LEVELING_3POINT - * Probe 3 arbitrary points on the bed (that aren't collinear) - * You specify the XY coordinates of all 3 points. - * The result is a single tilted plane. Best for a flat bed. - * - * - AUTO_BED_LEVELING_LINEAR - * Probe several points in a grid. - * You specify the rectangle and the density of sample points. - * The result is a single tilted plane. Best for a flat bed. - * - * - AUTO_BED_LEVELING_BILINEAR - * Probe several points in a grid. - * You specify the rectangle and the density of sample points. - * The result is a mesh, best for large or uneven beds. - * - * - AUTO_BED_LEVELING_UBL (Unified Bed Leveling) - * A comprehensive bed leveling system combining the features and benefits - * of other systems. UBL also includes integrated Mesh Generation, Mesh - * Validation and Mesh Editing systems. Currently, UBL is only checked out - * for Cartesian Printers. That said, it was primarily designed to correct - * poor quality Delta Printers. If you feel adventurous and have a Delta, - * please post an issue if something doesn't work correctly. Initially, - * you will need to set a reduced bed size so you have a rectangular area - * to test on. - * - * - MESH_BED_LEVELING - * Probe a grid manually - * The result is a mesh, suitable for large or uneven beds. (See BILINEAR.) - * For machines without a probe, Mesh Bed Leveling provides a method to perform - * leveling in steps so you can manually adjust the Z height at each grid-point. - * With an LCD controller the process is guided step-by-step. - */ +* Choose one of the options below to enable G29 Bed Leveling. The parameters +* and behavior of G29 will change depending on your selection. +* +* If using a Probe for Z Homing, enable Z_SAFE_HOMING also! +* +* - AUTO_BED_LEVELING_3POINT +* Probe 3 arbitrary points on the bed (that aren't collinear) +* You specify the XY coordinates of all 3 points. +* The result is a single tilted plane. Best for a flat bed. +* +* - AUTO_BED_LEVELING_LINEAR +* Probe several points in a grid. +* You specify the rectangle and the density of sample points. +* The result is a single tilted plane. Best for a flat bed. +* +* - AUTO_BED_LEVELING_BILINEAR +* Probe several points in a grid. +* You specify the rectangle and the density of sample points. +* The result is a mesh, best for large or uneven beds. +* +* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling) +* A comprehensive bed leveling system combining the features and benefits +* of other systems. UBL also includes integrated Mesh Generation, Mesh +* Validation and Mesh Editing systems. Currently, UBL is only checked out +* for Cartesian Printers. That said, it was primarily designed to correct +* poor quality Delta Printers. If you feel adventurous and have a Delta, +* please post an issue if something doesn't work correctly. Initially, +* you will need to set a reduced bed size so you have a rectangular area +* to test on. +* +* - MESH_BED_LEVELING +* Probe a grid manually +* The result is a mesh, suitable for large or uneven beds. (See BILINEAR.) +* For machines without a probe, Mesh Bed Leveling provides a method to perform +* leveling in steps so you can manually adjust the Z height at each grid-point. +* With an LCD controller the process is guided step-by-step. +*/ //#define AUTO_BED_LEVELING_3POINT //#define AUTO_BED_LEVELING_LINEAR //#define AUTO_BED_LEVELING_BILINEAR @@ -809,112 +809,112 @@ //#define MESH_BED_LEVELING /** - * Enable detailed logging of G28, G29, M48, etc. - * Turn on with the command 'M111 S32'. - * NOTE: Requires a lot of PROGMEM! - */ +* Enable detailed logging of G28, G29, M48, etc. +* Turn on with the command 'M111 S32'. +* NOTE: Requires a lot of PROGMEM! +*/ //#define DEBUG_LEVELING_FEATURE #if ENABLED(MESH_BED_LEVELING) || ENABLED(AUTO_BED_LEVELING_BILINEAR) || ENABLED(AUTO_BED_LEVELING_UBL) - // Gradually reduce leveling correction until a set height is reached, - // at which point movement will be level to the machine's XY plane. - // The height can be set with M420 Z - #define ENABLE_LEVELING_FADE_HEIGHT +// Gradually reduce leveling correction until a set height is reached, +// at which point movement will be level to the machine's XY plane. +// The height can be set with M420 Z +#define ENABLE_LEVELING_FADE_HEIGHT #endif #if ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_BILINEAR) - // Set the number of grid points per dimension. - #define GRID_MAX_POINTS_X 3 - #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X +// Set the number of grid points per dimension. +#define GRID_MAX_POINTS_X 3 +#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - #define LEFT_PROBE_BED_POSITION 15 - #define RIGHT_PROBE_BED_POSITION 170 - #define FRONT_PROBE_BED_POSITION 20 - #define BACK_PROBE_BED_POSITION 170 +// Set the boundaries for probing (where the probe can reach). +#define LEFT_PROBE_BED_POSITION 15 +#define RIGHT_PROBE_BED_POSITION 170 +#define FRONT_PROBE_BED_POSITION 20 +#define BACK_PROBE_BED_POSITION 170 - // The Z probe minimum outer margin (to validate G29 parameters). - #define MIN_PROBE_EDGE 10 +// The Z probe minimum outer margin (to validate G29 parameters). +#define MIN_PROBE_EDGE 10 - // Probe along the Y axis, advancing X after each column - //#define PROBE_Y_FIRST +// Probe along the Y axis, advancing X after each column +//#define PROBE_Y_FIRST - #if ENABLED(AUTO_BED_LEVELING_BILINEAR) +#if ENABLED(AUTO_BED_LEVELING_BILINEAR) - // Beyond the probed grid, continue the implied tilt? - // Default is to maintain the height of the nearest edge. - //#define EXTRAPOLATE_BEYOND_GRID +// Beyond the probed grid, continue the implied tilt? +// Default is to maintain the height of the nearest edge. +//#define EXTRAPOLATE_BEYOND_GRID - // - // Experimental Subdivision of the grid by Catmull-Rom method. - // Synthesizes intermediate points to produce a more detailed mesh. - // - //#define ABL_BILINEAR_SUBDIVISION - #if ENABLED(ABL_BILINEAR_SUBDIVISION) - // Number of subdivisions between probe points - #define BILINEAR_SUBDIVISIONS 3 - #endif +// +// Experimental Subdivision of the grid by Catmull-Rom method. +// Synthesizes intermediate points to produce a more detailed mesh. +// +//#define ABL_BILINEAR_SUBDIVISION +#if ENABLED(ABL_BILINEAR_SUBDIVISION) +// Number of subdivisions between probe points +#define BILINEAR_SUBDIVISIONS 3 +#endif - #endif +#endif #elif ENABLED(AUTO_BED_LEVELING_3POINT) - // 3 arbitrary points to probe. - // A simple cross-product is used to estimate the plane of the bed. - #define ABL_PROBE_PT_1_X 15 - #define ABL_PROBE_PT_1_Y 180 - #define ABL_PROBE_PT_2_X 15 - #define ABL_PROBE_PT_2_Y 20 - #define ABL_PROBE_PT_3_X 170 - #define ABL_PROBE_PT_3_Y 20 +// 3 arbitrary points to probe. +// A simple cross-product is used to estimate the plane of the bed. +#define ABL_PROBE_PT_1_X 15 +#define ABL_PROBE_PT_1_Y 180 +#define ABL_PROBE_PT_2_X 15 +#define ABL_PROBE_PT_2_Y 20 +#define ABL_PROBE_PT_3_X 170 +#define ABL_PROBE_PT_3_Y 20 #elif ENABLED(AUTO_BED_LEVELING_UBL) - //=========================================================================== - //========================= Unified Bed Leveling ============================ - //=========================================================================== - - #define UBL_MESH_INSET 1 // Mesh inset margin on print area - #define GRID_MAX_POINTS_X 10 // Don't use more than 15 points per axis, implementation limited. - #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - #define UBL_PROBE_PT_1_X 39 // These set the probe locations for when UBL does a 3-Point leveling - #define UBL_PROBE_PT_1_Y 180 // of the mesh. - #define UBL_PROBE_PT_2_X 39 - #define UBL_PROBE_PT_2_Y 20 - #define UBL_PROBE_PT_3_X 180 - #define UBL_PROBE_PT_3_Y 20 - //#define UBL_G26_MESH_EDITING // Enable G26 mesh editing +//=========================================================================== +//========================= Unified Bed Leveling ============================ +//=========================================================================== + +#define UBL_MESH_INSET 1 // Mesh inset margin on print area +#define GRID_MAX_POINTS_X 10 // Don't use more than 15 points per axis, implementation limited. +#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X +#define UBL_PROBE_PT_1_X 39 // These set the probe locations for when UBL does a 3-Point leveling +#define UBL_PROBE_PT_1_Y 180 // of the mesh. +#define UBL_PROBE_PT_2_X 39 +#define UBL_PROBE_PT_2_Y 20 +#define UBL_PROBE_PT_3_X 180 +#define UBL_PROBE_PT_3_Y 20 +//#define UBL_G26_MESH_EDITING // Enable G26 mesh editing #elif ENABLED(MESH_BED_LEVELING) - //=========================================================================== - //=================================== Mesh ================================== - //=========================================================================== +//=========================================================================== +//=================================== Mesh ================================== +//=========================================================================== - #define MESH_INSET 10 // Mesh inset margin on print area - #define GRID_MAX_POINTS_X 3 // Don't use more than 7 points per axis, implementation limited. - #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X +#define MESH_INSET 10 // Mesh inset margin on print area +#define GRID_MAX_POINTS_X 3 // Don't use more than 7 points per axis, implementation limited. +#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest Z at Z_MIN_POS +//#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest Z at Z_MIN_POS #endif // BED_LEVELING /** - * Use the LCD controller for bed leveling - * Requires MESH_BED_LEVELING or PROBE_MANUALLY - */ +* Use the LCD controller for bed leveling +* Requires MESH_BED_LEVELING or PROBE_MANUALLY +*/ //#define LCD_BED_LEVELING #if ENABLED(LCD_BED_LEVELING) - #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis. - #define LCD_PROBE_Z_RANGE 4 // Z Range centered on Z_MIN_POS for LCD Z adjustment +#define MBL_Z_STEP 0.025 // Step size while manually probing Z axis. +#define LCD_PROBE_Z_RANGE 4 // Z Range centered on Z_MIN_POS for LCD Z adjustment #endif /** - * Commands to execute at the end of G29 probing. - * Useful to retract or move the Z probe out of the way. - */ +* Commands to execute at the end of G29 probing. +* Useful to retract or move the Z probe out of the way. +*/ //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" @@ -940,8 +940,8 @@ //#define Z_SAFE_HOMING #if ENABLED(Z_SAFE_HOMING) - #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28). - #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28). +#define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28). +#define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28). #endif // Homing speeds (mm/m) @@ -965,8 +965,8 @@ #define EEPROM_SETTINGS #if ENABLED(EEPROM_SETTINGS) - // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out: - #define EEPROM_CHITCHAT // Please keep turned on if you can. +// To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out: +#define EEPROM_CHITCHAT // Please keep turned on if you can. #endif // @@ -1005,114 +1005,114 @@ #define PREHEAT_2_FAN_SPEED 255 // Value from 0 to 255 /** - * Nozzle Park -- EXPERIMENTAL - * - * Park the nozzle at the given XYZ position on idle or G27. - * - * The "P" parameter controls the action applied to the Z axis: - * - * P0 (Default) If Z is below park Z raise the nozzle. - * P1 Raise the nozzle always to Z-park height. - * P2 Raise the nozzle by Z-park amount, limited to Z_MAX_POS. - */ +* Nozzle Park -- EXPERIMENTAL +* +* Park the nozzle at the given XYZ position on idle or G27. +* +* The "P" parameter controls the action applied to the Z axis: +* +* P0 (Default) If Z is below park Z raise the nozzle. +* P1 Raise the nozzle always to Z-park height. +* P2 Raise the nozzle by Z-park amount, limited to Z_MAX_POS. +*/ //#define NOZZLE_PARK_FEATURE #if ENABLED(NOZZLE_PARK_FEATURE) - // Specify a park position as { X, Y, Z } - #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 } +// Specify a park position as { X, Y, Z } +#define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 } #endif /** - * Clean Nozzle Feature -- EXPERIMENTAL - * - * Adds the G12 command to perform a nozzle cleaning process. - * - * Parameters: - * P Pattern - * S Strokes / Repetitions - * T Triangles (P1 only) - * - * Patterns: - * P0 Straight line (default). This process requires a sponge type material - * at a fixed bed location. "S" specifies strokes (i.e. back-forth motions) - * between the start / end points. - * - * P1 Zig-zag pattern between (X0, Y0) and (X1, Y1), "T" specifies the - * number of zig-zag triangles to do. "S" defines the number of strokes. - * Zig-zags are done in whichever is the narrower dimension. - * For example, "G12 P1 S1 T3" will execute: - * - * -- - * | (X0, Y1) | /\ /\ /\ | (X1, Y1) - * | | / \ / \ / \ | - * A | | / \ / \ / \ | - * | | / \ / \ / \ | - * | (X0, Y0) | / \/ \/ \ | (X1, Y0) - * -- +--------------------------------+ - * |________|_________|_________| - * T1 T2 T3 - * - * P2 Circular pattern with middle at NOZZLE_CLEAN_CIRCLE_MIDDLE. - * "R" specifies the radius. "S" specifies the stroke count. - * Before starting, the nozzle moves to NOZZLE_CLEAN_START_POINT. - * - * Caveats: The ending Z should be the same as starting Z. - * Attention: EXPERIMENTAL. G-code arguments may change. - * - */ +* Clean Nozzle Feature -- EXPERIMENTAL +* +* Adds the G12 command to perform a nozzle cleaning process. +* +* Parameters: +* P Pattern +* S Strokes / Repetitions +* T Triangles (P1 only) +* +* Patterns: +* P0 Straight line (default). This process requires a sponge type material +* at a fixed bed location. "S" specifies strokes (i.e. back-forth motions) +* between the start / end points. +* +* P1 Zig-zag pattern between (X0, Y0) and (X1, Y1), "T" specifies the +* number of zig-zag triangles to do. "S" defines the number of strokes. +* Zig-zags are done in whichever is the narrower dimension. +* For example, "G12 P1 S1 T3" will execute: +* +* -- +* | (X0, Y1) | /\ /\ /\ | (X1, Y1) +* | | / \ / \ / \ | +* A | | / \ / \ / \ | +* | | / \ / \ / \ | +* | (X0, Y0) | / \/ \/ \ | (X1, Y0) +* -- +--------------------------------+ +* |________|_________|_________| +* T1 T2 T3 +* +* P2 Circular pattern with middle at NOZZLE_CLEAN_CIRCLE_MIDDLE. +* "R" specifies the radius. "S" specifies the stroke count. +* Before starting, the nozzle moves to NOZZLE_CLEAN_START_POINT. +* +* Caveats: The ending Z should be the same as starting Z. +* Attention: EXPERIMENTAL. G-code arguments may change. +* +*/ //#define NOZZLE_CLEAN_FEATURE #if ENABLED(NOZZLE_CLEAN_FEATURE) - // Default number of pattern repetitions - #define NOZZLE_CLEAN_STROKES 12 +// Default number of pattern repetitions +#define NOZZLE_CLEAN_STROKES 12 - // Default number of triangles - #define NOZZLE_CLEAN_TRIANGLES 3 +// Default number of triangles +#define NOZZLE_CLEAN_TRIANGLES 3 - // Specify positions as { X, Y, Z } - #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} - #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)} +// Specify positions as { X, Y, Z } +#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} +#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)} - // Circular pattern radius - #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5 - // Circular pattern circle fragments number - #define NOZZLE_CLEAN_CIRCLE_FN 10 - // Middle point of circle - #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT +// Circular pattern radius +#define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5 +// Circular pattern circle fragments number +#define NOZZLE_CLEAN_CIRCLE_FN 10 +// Middle point of circle +#define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT - // Moves the nozzle to the initial position - #define NOZZLE_CLEAN_GOBACK +// Moves the nozzle to the initial position +#define NOZZLE_CLEAN_GOBACK #endif /** - * Print Job Timer - * - * Automatically start and stop the print job timer on M104/M109/M190. - * - * M104 (hotend, no wait) - high temp = none, low temp = stop timer - * M109 (hotend, wait) - high temp = start timer, low temp = stop timer - * M190 (bed, wait) - high temp = start timer, low temp = none - * - * The timer can also be controlled with the following commands: - * - * M75 - Start the print job timer - * M76 - Pause the print job timer - * M77 - Stop the print job timer - */ +* Print Job Timer +* +* Automatically start and stop the print job timer on M104/M109/M190. +* +* M104 (hotend, no wait) - high temp = none, low temp = stop timer +* M109 (hotend, wait) - high temp = start timer, low temp = stop timer +* M190 (bed, wait) - high temp = start timer, low temp = none +* +* The timer can also be controlled with the following commands: +* +* M75 - Start the print job timer +* M76 - Pause the print job timer +* M77 - Stop the print job timer +*/ #define PRINTJOB_TIMER_AUTOSTART /** - * Print Counter - * - * Track statistical data such as: - * - * - Total print jobs - * - Total successful print jobs - * - Total failed print jobs - * - Total time printing - * - * View the current statistics with M78. - */ +* Print Counter +* +* Track statistical data such as: +* +* - Total print jobs +* - Total successful print jobs +* - Total failed print jobs +* - Total time printing +* +* View the current statistics with M78. +*/ #define PRINTCOUNTER //============================================================================= @@ -1122,78 +1122,78 @@ // @section lcd /** - * LCD LANGUAGE - * - * Select the language to display on the LCD. These languages are available: - * - * en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it, - * kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, tr, uk, test - * - * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cn':'Chinese', 'cz':'Czech', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'kana':'Japanese', 'kana_utf8':'Japanese (UTF8)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'pt-br_utf8':'Portuguese (Brazilian UTF8)', 'pt_utf8':'Portuguese (UTF8)', 'ru':'Russian', 'tr':'Turkish', 'uk':'Ukrainian', 'test':'TEST' } - */ +* LCD LANGUAGE +* +* Select the language to display on the LCD. These languages are available: +* +* en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it, +* kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, tr, uk, test +* +* :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cn':'Chinese', 'cz':'Czech', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'kana':'Japanese', 'kana_utf8':'Japanese (UTF8)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'pt-br_utf8':'Portuguese (Brazilian UTF8)', 'pt_utf8':'Portuguese (UTF8)', 'ru':'Russian', 'tr':'Turkish', 'uk':'Ukrainian', 'test':'TEST' } +*/ #define LCD_LANGUAGE en /** - * LCD Character Set - * - * Note: This option is NOT applicable to Graphical Displays. - * - * All character-based LCDs provide ASCII plus one of these - * language extensions: - * - * - JAPANESE ... the most common - * - WESTERN ... with more accented characters - * - CYRILLIC ... for the Russian language - * - * To determine the language extension installed on your controller: - * - * - Compile and upload with LCD_LANGUAGE set to 'test' - * - Click the controller to view the LCD menu - * - The LCD will display Japanese, Western, or Cyrillic text - * - * See https: *github.com/MarlinFirmware/Marlin/wiki/LCD-Language - * - * :['JAPANESE', 'WESTERN', 'CYRILLIC'] - */ +* LCD Character Set +* +* Note: This option is NOT applicable to Graphical Displays. +* +* All character-based LCDs provide ASCII plus one of these +* language extensions: +* +* - JAPANESE ... the most common +* - WESTERN ... with more accented characters +* - CYRILLIC ... for the Russian language +* +* To determine the language extension installed on your controller: +* +* - Compile and upload with LCD_LANGUAGE set to 'test' +* - Click the controller to view the LCD menu +* - The LCD will display Japanese, Western, or Cyrillic text +* +* See https: *github.com/MarlinFirmware/Marlin/wiki/LCD-Language +* +* :['JAPANESE', 'WESTERN', 'CYRILLIC'] +*/ #define DISPLAY_CHARSET_HD44780 JAPANESE /** - * LCD TYPE - * - * Enable ULTRA_LCD for a 16x2, 16x4, 20x2, or 20x4 character-based LCD. - * Enable DOGLCD for a 128x64 (ST7565R) Full Graphical Display. - * (These options will be enabled automatically for most displays.) - * - * IMPORTANT: The U8glib library is required for Full Graphic Display! - * https://github.com/olikraus/U8glib_Arduino - */ +* LCD TYPE +* +* Enable ULTRA_LCD for a 16x2, 16x4, 20x2, or 20x4 character-based LCD. +* Enable DOGLCD for a 128x64 (ST7565R) Full Graphical Display. +* (These options will be enabled automatically for most displays.) +* +* IMPORTANT: The U8glib library is required for Full Graphic Display! +* https://github.com/olikraus/U8glib_Arduino +*/ //#define ULTRA_LCD // Character based //#define DOGLCD // Full graphics display /** - * SD CARD - * - * SD Card support is disabled by default. If your controller has an SD slot, - * you must uncomment the following option or it won't work. - * - */ +* SD CARD +* +* SD Card support is disabled by default. If your controller has an SD slot, +* you must uncomment the following option or it won't work. +* +*/ #define SDSUPPORT /** - * SD CARD: SPI SPEED - * - * Enable one of the following items for a slower SPI transfer speed. - * This may be required to resolve "volume init" errors. - */ +* SD CARD: SPI SPEED +* +* Enable one of the following items for a slower SPI transfer speed. +* This may be required to resolve "volume init" errors. +*/ //#define SPI_SPEED SPI_HALF_SPEED //#define SPI_SPEED SPI_QUARTER_SPEED //#define SPI_SPEED SPI_EIGHTH_SPEED /** - * SD CARD: ENABLE CRC - * - * Use CRC checks and retries on the SD communication. - */ +* SD CARD: ENABLE CRC +* +* Use CRC checks and retries on the SD communication. +*/ //#define SD_CHECK_AND_RETRY // @@ -1211,14 +1211,14 @@ //#define ENCODER_STEPS_PER_MENU_ITEM 5 /** - * Encoder Direction Options - * - * Test your encoder's behavior first with both options disabled. - * - * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION. - * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION. - * Reversed Value Editing only? Enable BOTH options. - */ +* Encoder Direction Options +* +* Test your encoder's behavior first with both options disabled. +* +* Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION. +* Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION. +* Reversed Value Editing only? Enable BOTH options. +*/ // // This option reverses the encoder direction everywhere. @@ -1416,8 +1416,8 @@ // //#define SAV_3DGLCD #if ENABLED(SAV_3DGLCD) - //#define U8GLIB_SSD1306 - #define U8GLIB_SH1106 +//#define U8GLIB_SSD1306 +#define U8GLIB_SH1106 #endif // @@ -1478,44 +1478,44 @@ //#define BLINKM /** - * RGB LED / LED Strip Control - * - * Enable support for an RGB LED connected to 5V digital pins, or - * an RGB Strip connected to MOSFETs controlled by digital pins. - * - * Adds the M150 command to set the LED (or LED strip) color. - * If pins are PWM capable (e.g., 4, 5, 6, 11) then a range of - * luminance values can be set from 0 to 255. - * - * *** CAUTION *** - * LED Strips require a MOFSET Chip between PWM lines and LEDs, - * as the Arduino cannot handle the current the LEDs will require. - * Failure to follow this precaution can destroy your Arduino! - * *** CAUTION *** - * - */ +* RGB LED / LED Strip Control +* +* Enable support for an RGB LED connected to 5V digital pins, or +* an RGB Strip connected to MOSFETs controlled by digital pins. +* +* Adds the M150 command to set the LED (or LED strip) color. +* If pins are PWM capable (e.g., 4, 5, 6, 11) then a range of +* luminance values can be set from 0 to 255. +* +* *** CAUTION *** +* LED Strips require a MOFSET Chip between PWM lines and LEDs, +* as the Arduino cannot handle the current the LEDs will require. +* Failure to follow this precaution can destroy your Arduino! +* *** CAUTION *** +* +*/ //#define RGB_LED //#define RGBW_LED #if ENABLED(RGB_LED) || ENABLED(RGBW_LED) - #define RGB_LED_R_PIN 34 - #define RGB_LED_G_PIN 43 - #define RGB_LED_B_PIN 35 - #define RGB_LED_W_PIN -1 +#define RGB_LED_R_PIN 34 +#define RGB_LED_G_PIN 43 +#define RGB_LED_B_PIN 35 +#define RGB_LED_W_PIN -1 #endif /** - * Printer Event LEDs - * - * During printing, the LEDs will reflect the printer status: - * - * - Gradually change from blue to violet as the heated bed gets to target temp - * - Gradually change from violet to red as the hotend gets to temperature - * - Change to white to illuminate work surface - * - Change to green once print has finished - * - Turn off after the print has finished and the user has pushed a button - */ +* Printer Event LEDs +* +* During printing, the LEDs will reflect the printer status: +* +* - Gradually change from blue to violet as the heated bed gets to target temp +* - Gradually change from violet to red as the hotend gets to temperature +* - Change to white to illuminate work surface +* - Change to green once print has finished +* - Turn off after the print has finished and the user has pushed a button +*/ #if ENABLED(BLINKM) || ENABLED(RGB_LED) || ENABLED(RGBW_LED) - #define PRINTER_EVENT_LEDS +#define PRINTER_EVENT_LEDS #endif /*********************************************************************\ @@ -1543,39 +1543,39 @@ //#define DEACTIVATE_SERVOS_AFTER_MOVE /** - * Filament Width Sensor - * - * Measures the filament width in real-time and adjusts - * flow rate to compensate for any irregularities. - * - * Also allows the measured filament diameter to set the - * extrusion rate, so the slicer only has to specify the - * volume. - * - * Only a single extruder is supported at this time. - * - * 34 RAMPS_14 : Analog input 5 on the AUX2 connector - * 81 PRINTRBOARD : Analog input 2 on the Exp1 connector (version B,C,D,E) - * 301 RAMBO : Analog input 3 - * - * Note: May require analog pins to be defined for other boards. - */ +* Filament Width Sensor +* +* Measures the filament width in real-time and adjusts +* flow rate to compensate for any irregularities. +* +* Also allows the measured filament diameter to set the +* extrusion rate, so the slicer only has to specify the +* volume. +* +* Only a single extruder is supported at this time. +* +* 34 RAMPS_14 : Analog input 5 on the AUX2 connector +* 81 PRINTRBOARD : Analog input 2 on the Exp1 connector (version B,C,D,E) +* 301 RAMBO : Analog input 3 +* +* Note: May require analog pins to be defined for other boards. +*/ //#define FILAMENT_WIDTH_SENSOR #define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 // (mm) Diameter of the filament generally used (3.0 or 1.75mm), also used in the slicer. Used to validate sensor reading. #if ENABLED(FILAMENT_WIDTH_SENSOR) - #define FILAMENT_SENSOR_EXTRUDER_NUM 0 // Index of the extruder that has the filament sensor (0,1,2,3) - #define MEASUREMENT_DELAY_CM 14 // (cm) The distance from the filament sensor to the melting chamber +#define FILAMENT_SENSOR_EXTRUDER_NUM 0 // Index of the extruder that has the filament sensor (0,1,2,3) +#define MEASUREMENT_DELAY_CM 14 // (cm) The distance from the filament sensor to the melting chamber - #define MEASURED_UPPER_LIMIT 3.30 // (mm) Upper limit used to validate sensor reading - #define MEASURED_LOWER_LIMIT 1.90 // (mm) Lower limit used to validate sensor reading - #define MAX_MEASUREMENT_DELAY 20 // (bytes) Buffer size for stored measurements (1 byte per cm). Must be larger than MEASUREMENT_DELAY_CM. +#define MEASURED_UPPER_LIMIT 3.30 // (mm) Upper limit used to validate sensor reading +#define MEASURED_LOWER_LIMIT 1.90 // (mm) Lower limit used to validate sensor reading +#define MAX_MEASUREMENT_DELAY 20 // (bytes) Buffer size for stored measurements (1 byte per cm). Must be larger than MEASUREMENT_DELAY_CM. - #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA // Set measured to nominal initially +#define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA // Set measured to nominal initially - // Display filament width on the LCD status line. Status messages will expire after 5 seconds. - //#define FILAMENT_LCD_DISPLAY +// Display filament width on the LCD status line. Status messages will expire after 5 seconds. +//#define FILAMENT_LCD_DISPLAY #endif #endif // CONFIGURATION_H diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index d3ee48a85..a94539942 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1,35 +1,35 @@ /** - * Marlin 3D Printer Firmware - * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] - * - * Based on Sprinter and grbl. - * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ +* Marlin 3D Printer Firmware +* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] +* +* Based on Sprinter and grbl. +* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +*/ /** - * Configuration_adv.h - * - * Advanced settings. - * Only change these if you know exactly what you're doing. - * Some of these settings can damage your printer if improperly set! - * - * Basic settings can be found in Configuration.h - * - */ +* Configuration_adv.h +* +* Advanced settings. +* Only change these if you know exactly what you're doing. +* Some of these settings can damage your printer if improperly set! +* +* Basic settings can be found in Configuration.h +* +*/ #ifndef CONFIGURATION_ADV_H #define CONFIGURATION_ADV_H #define CONFIGURATION_ADV_H_VERSION 010100 @@ -41,86 +41,86 @@ //=========================================================================== #if DISABLED(PIDTEMPBED) - #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control - #if ENABLED(BED_LIMIT_SWITCHING) - #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS - #endif +#define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control +#if ENABLED(BED_LIMIT_SWITCHING) +#define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS +#endif #endif /** - * Thermal Protection protects your printer from damage and fire if a - * thermistor falls out or temperature sensors fail in any way. - * - * The issue: If a thermistor falls out or a temperature sensor fails, - * Marlin can no longer sense the actual temperature. Since a disconnected - * thermistor reads as a low temperature, the firmware will keep the heater on. - * - * The solution: Once the temperature reaches the target, start observing. - * If the temperature stays too far below the target (hysteresis) for too long (period), - * the firmware will halt the machine as a safety precaution. - * - * If you get false positives for "Thermal Runaway" increase THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD - */ +* Thermal Protection protects your printer from damage and fire if a +* thermistor falls out or temperature sensors fail in any way. +* +* The issue: If a thermistor falls out or a temperature sensor fails, +* Marlin can no longer sense the actual temperature. Since a disconnected +* thermistor reads as a low temperature, the firmware will keep the heater on. +* +* The solution: Once the temperature reaches the target, start observing. +* If the temperature stays too far below the target (hysteresis) for too long (period), +* the firmware will halt the machine as a safety precaution. +* +* If you get false positives for "Thermal Runaway" increase THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD +*/ #if ENABLED(THERMAL_PROTECTION_HOTENDS) - #define THERMAL_PROTECTION_PERIOD 40 // Seconds - #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius - - /** - * Whenever an M104 or M109 increases the target temperature the firmware will wait for the - * WATCH_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_TEMP_INCREASE - * degrees, the machine is halted, requiring a hard reset. This test restarts with any M104/M109, - * but only if the current temperature is far enough below the target for a reliable test. - * - * If you get false positives for "Heating failed" increase WATCH_TEMP_PERIOD and/or decrease WATCH_TEMP_INCREASE - * WATCH_TEMP_INCREASE should not be below 2. - */ - #define WATCH_TEMP_PERIOD 20 // Seconds - #define WATCH_TEMP_INCREASE 2 // Degrees Celsius +#define THERMAL_PROTECTION_PERIOD 60 // Seconds +#define THERMAL_PROTECTION_HYSTERESIS 8 // Degrees Celsius + +/** +* Whenever an M104 or M109 increases the target temperature the firmware will wait for the +* WATCH_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_TEMP_INCREASE +* degrees, the machine is halted, requiring a hard reset. This test restarts with any M104/M109, +* but only if the current temperature is far enough below the target for a reliable test. +* +* If you get false positives for "Heating failed" increase WATCH_TEMP_PERIOD and/or decrease WATCH_TEMP_INCREASE +* WATCH_TEMP_INCREASE should not be below 2. +*/ +#define WATCH_TEMP_PERIOD 20 // Seconds +#define WATCH_TEMP_INCREASE 2 // Degrees Celsius #endif /** - * Thermal Protection parameters for the bed are just as above for hotends. - */ +* Thermal Protection parameters for the bed are just as above for hotends. +*/ #if ENABLED(THERMAL_PROTECTION_BED) - #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds - #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius - - /** - * Whenever an M140 or M190 increases the target temperature the firmware will wait for the - * WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE - * degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190, - * but only if the current temperature is far enough below the target for a reliable test. - * - * If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease - * WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.) - */ - #define WATCH_BED_TEMP_PERIOD 60 // Seconds - #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius +#define THERMAL_PROTECTION_BED_PERIOD 40 // Seconds +#define THERMAL_PROTECTION_BED_HYSTERESIS 4 // Degrees Celsius + +/** +* Whenever an M140 or M190 increases the target temperature the firmware will wait for the +* WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE +* degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190, +* but only if the current temperature is far enough below the target for a reliable test. +* +* If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease +* WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.) +*/ +#define WATCH_BED_TEMP_PERIOD 60 // Seconds +#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif #if ENABLED(PIDTEMP) - // this adds an experimental additional term to the heating power, proportional to the extrusion speed. - // if Kc is chosen well, the additional required power due to increased melting should be compensated. - //#define PID_EXTRUSION_SCALING - #if ENABLED(PID_EXTRUSION_SCALING) - #define DEFAULT_Kc (100) //heating power=Kc*(e_speed) - #define LPQ_MAX_LEN 50 - #endif +// this adds an experimental additional term to the heating power, proportional to the extrusion speed. +// if Kc is chosen well, the additional required power due to increased melting should be compensated. +//#define PID_EXTRUSION_SCALING +#if ENABLED(PID_EXTRUSION_SCALING) +#define DEFAULT_Kc (100) //heating power=Kc*(e_speed) +#define LPQ_MAX_LEN 50 +#endif #endif /** - * Automatic Temperature: - * The hotend target temperature is calculated by all the buffered lines of gcode. - * The maximum buffered steps/sec of the extruder motor is called "se". - * Start autotemp mode with M109 S B F - * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by - * mintemp and maxtemp. Turn this off by executing M109 without F* - * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp. - * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode - */ +* Automatic Temperature: +* The hotend target temperature is calculated by all the buffered lines of gcode. +* The maximum buffered steps/sec of the extruder motor is called "se". +* Start autotemp mode with M109 S B F +* The target temperature is set to mintemp+factor*se[steps/sec] and is limited by +* mintemp and maxtemp. Turn this off by executing M109 without F* +* Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp. +* On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode +*/ #define AUTOTEMP #if ENABLED(AUTOTEMP) - #define AUTOTEMP_OLDWEIGHT 0.98 +#define AUTOTEMP_OLDWEIGHT 0.98 #endif //Show Temperature ADC value @@ -128,20 +128,20 @@ //#define SHOW_TEMP_ADC_VALUES /** - * High Temperature Thermistor Support - * - * Thermistors able to support high temperature tend to have a hard time getting - * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP - * will probably be caught when the heating element first turns on during the - * preheating process, which will trigger a min_temp_error as a safety measure - * and force stop everything. - * To circumvent this limitation, we allow for a preheat time (during which, - * min_temp_error won't be triggered) and add a min_temp buffer to handle - * aberrant readings. - * - * If you want to enable this feature for your hotend thermistor(s) - * uncomment and set values > 0 in the constants below - */ +* High Temperature Thermistor Support +* +* Thermistors able to support high temperature tend to have a hard time getting +* good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP +* will probably be caught when the heating element first turns on during the +* preheating process, which will trigger a min_temp_error as a safety measure +* and force stop everything. +* To circumvent this limitation, we allow for a preheat time (during which, +* min_temp_error won't be triggered) and add a min_temp buffer to handle +* aberrant readings. +* +* If you want to enable this feature for your hotend thermistor(s) +* uncomment and set values > 0 in the constants below +*/ // The number of consecutive low temperature errors that can occur // before a min_temp_error is triggered. (Shouldn't be more than 10.) @@ -161,10 +161,10 @@ // then extrude some filament every couple of SECONDS. //#define EXTRUDER_RUNOUT_PREVENT #if ENABLED(EXTRUDER_RUNOUT_PREVENT) - #define EXTRUDER_RUNOUT_MINTEMP 190 - #define EXTRUDER_RUNOUT_SECONDS 30 - #define EXTRUDER_RUNOUT_SPEED 1500 // mm/m - #define EXTRUDER_RUNOUT_EXTRUDE 5 // mm +#define EXTRUDER_RUNOUT_MINTEMP 190 +#define EXTRUDER_RUNOUT_SECONDS 30 +#define EXTRUDER_RUNOUT_SPEED 1500 // mm/m +#define EXTRUDER_RUNOUT_EXTRUDE 5 // mm #endif // @section temperature @@ -175,17 +175,17 @@ #define TEMP_SENSOR_AD595_GAIN 1.0 /** - * Controller Fan - * To cool down the stepper drivers and MOSFETs. - * - * The fan will turn on automatically whenever any stepper is enabled - * and turn off after a set period after all steppers are turned off. - */ +* Controller Fan +* To cool down the stepper drivers and MOSFETs. +* +* The fan will turn on automatically whenever any stepper is enabled +* and turn off after a set period after all steppers are turned off. +*/ //#define USE_CONTROLLER_FAN #if ENABLED(USE_CONTROLLER_FAN) - //#define CONTROLLER_FAN_PIN FAN1_PIN // Set a custom pin for the controller fan - #define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled - #define CONTROLLERFAN_SPEED 255 // 255 == full speed +//#define CONTROLLER_FAN_PIN FAN1_PIN // Set a custom pin for the controller fan +#define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled +#define CONTROLLERFAN_SPEED 255 // 255 == full speed #endif // When first starting the main fan, run it at full speed for the @@ -201,17 +201,17 @@ // @section extruder /** - * Extruder cooling fans - * - * Extruder auto fans automatically turn on when their extruders' - * temperatures go above EXTRUDER_AUTO_FAN_TEMPERATURE. - * - * Your board's pins file specifies the recommended pins. Override those here - * or set to -1 to disable completely. - * - * Multiple extruders can be assigned to the same pin in which case - * the fan will turn on when any selected extruder is above the threshold. - */ +* Extruder cooling fans +* +* Extruder auto fans automatically turn on when their extruders' +* temperatures go above EXTRUDER_AUTO_FAN_TEMPERATURE. +* +* Your board's pins file specifies the recommended pins. Override those here +* or set to -1 to disable completely. +* +* Multiple extruders can be assigned to the same pin in which case +* the fan will turn on when any selected extruder is above the threshold. +*/ #define E0_AUTO_FAN_PIN -1 #define E1_AUTO_FAN_PIN -1 #define E2_AUTO_FAN_PIN -1 @@ -223,9 +223,9 @@ // Define a pin to turn case light on/off //#define CASE_LIGHT_PIN 4 #if PIN_EXISTS(CASE_LIGHT) - #define INVERT_CASE_LIGHT false // Set to true if HIGH is the OFF state (active low) - //#define CASE_LIGHT_DEFAULT_ON // Uncomment to set default state to on - //#define MENU_ITEM_CASE_LIGHT // Uncomment to have a Case Light On / Off entry in main menu +#define INVERT_CASE_LIGHT false // Set to true if HIGH is the OFF state (active low) +//#define CASE_LIGHT_DEFAULT_ON // Uncomment to set default state to on +//#define MENU_ITEM_CASE_LIGHT // Uncomment to have a Case Light On / Off entry in main menu #endif //=========================================================================== @@ -247,8 +247,8 @@ // The next unused E driver will be assigned to the second X stepper. //#define X_DUAL_STEPPER_DRIVERS #if ENABLED(X_DUAL_STEPPER_DRIVERS) - // Set true if the two X motors need to rotate in opposite directions - #define INVERT_X2_VS_X_DIR true +// Set true if the two X motors need to rotate in opposite directions +#define INVERT_X2_VS_X_DIR true #endif // Dual Y Steppers @@ -256,8 +256,8 @@ // The next unused E driver will be assigned to the second Y stepper. //#define Y_DUAL_STEPPER_DRIVERS #if ENABLED(Y_DUAL_STEPPER_DRIVERS) - // Set true if the two Y motors need to rotate in opposite directions - #define INVERT_Y2_VS_Y_DIR true +// Set true if the two Y motors need to rotate in opposite directions +#define INVERT_Y2_VS_Y_DIR true #endif // A single Z stepper driver is usually used to drive 2 stepper motors. @@ -267,21 +267,21 @@ #if ENABLED(Z_DUAL_STEPPER_DRIVERS) - // Z_DUAL_ENDSTOPS is a feature to enable the use of 2 endstops for both Z steppers - Let's call them Z stepper and Z2 stepper. - // That way the machine is capable to align the bed during home, since both Z steppers are homed. - // There is also an implementation of M666 (software endstops adjustment) to this feature. - // After Z homing, this adjustment is applied to just one of the steppers in order to align the bed. - // One just need to home the Z axis and measure the distance difference between both Z axis and apply the math: Z adjust = Z - Z2. - // If the Z stepper axis is closer to the bed, the measure Z > Z2 (yes, it is.. think about it) and the Z adjust would be positive. - // Play a little bit with small adjustments (0.5mm) and check the behaviour. - // The M119 (endstops report) will start reporting the Z2 Endstop as well. +// Z_DUAL_ENDSTOPS is a feature to enable the use of 2 endstops for both Z steppers - Let's call them Z stepper and Z2 stepper. +// That way the machine is capable to align the bed during home, since both Z steppers are homed. +// There is also an implementation of M666 (software endstops adjustment) to this feature. +// After Z homing, this adjustment is applied to just one of the steppers in order to align the bed. +// One just need to home the Z axis and measure the distance difference between both Z axis and apply the math: Z adjust = Z - Z2. +// If the Z stepper axis is closer to the bed, the measure Z > Z2 (yes, it is.. think about it) and the Z adjust would be positive. +// Play a little bit with small adjustments (0.5mm) and check the behaviour. +// The M119 (endstops report) will start reporting the Z2 Endstop as well. - //#define Z_DUAL_ENDSTOPS +//#define Z_DUAL_ENDSTOPS - #if ENABLED(Z_DUAL_ENDSTOPS) - #define Z2_USE_ENDSTOP _XMAX_ - #define Z_DUAL_ENDSTOPS_ADJUSTMENT 0 // use M666 command to determine/test this value - #endif +#if ENABLED(Z_DUAL_ENDSTOPS) +#define Z2_USE_ENDSTOP _XMAX_ +#define Z_DUAL_ENDSTOPS_ADJUSTMENT 0 // use M666 command to determine/test this value +#endif #endif // Z_DUAL_STEPPER_DRIVERS @@ -291,36 +291,36 @@ // allowing faster printing speeds. Connect your X2 stepper to the first unused E plug. //#define DUAL_X_CARRIAGE #if ENABLED(DUAL_X_CARRIAGE) - // Configuration for second X-carriage - // Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop; - // the second x-carriage always homes to the maximum endstop. - #define X2_MIN_POS 80 // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage - #define X2_MAX_POS 353 // set maximum to the distance between toolheads when both heads are homed - #define X2_HOME_DIR 1 // the second X-carriage always homes to the maximum endstop position - #define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position - // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software - // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops - // without modifying the firmware (through the "M218 T1 X???" command). - // Remember: you should set the second extruder x-offset to 0 in your slicer. - - // There are a few selectable movement modes for dual x-carriages using M605 S - // Mode 0 (DXC_FULL_CONTROL_MODE): Full control. The slicer has full control over both x-carriages and can achieve optimal travel results - // as long as it supports dual x-carriages. (M605 S0) - // Mode 1 (DXC_AUTO_PARK_MODE) : Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so - // that additional slicer support is not required. (M605 S1) - // Mode 2 (DXC_DUPLICATION_MODE) : Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all - // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at - // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm]) - - // This is the default power-up mode which can be later using M605. - #define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_FULL_CONTROL_MODE - - // Default settings in "Auto-park Mode" - #define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder - #define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder - - // Default x offset in duplication mode (typically set to half print bed width) - #define DEFAULT_DUPLICATION_X_OFFSET 100 +// Configuration for second X-carriage +// Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop; +// the second x-carriage always homes to the maximum endstop. +#define X2_MIN_POS 80 // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage +#define X2_MAX_POS 353 // set maximum to the distance between toolheads when both heads are homed +#define X2_HOME_DIR 1 // the second X-carriage always homes to the maximum endstop position +#define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position +// However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software +// override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops +// without modifying the firmware (through the "M218 T1 X???" command). +// Remember: you should set the second extruder x-offset to 0 in your slicer. + +// There are a few selectable movement modes for dual x-carriages using M605 S +// Mode 0 (DXC_FULL_CONTROL_MODE): Full control. The slicer has full control over both x-carriages and can achieve optimal travel results +// as long as it supports dual x-carriages. (M605 S0) +// Mode 1 (DXC_AUTO_PARK_MODE) : Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so +// that additional slicer support is not required. (M605 S1) +// Mode 2 (DXC_DUPLICATION_MODE) : Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all +// actions of the first x-carriage. This allows the printer to print 2 arbitrary items at +// once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm]) + +// This is the default power-up mode which can be later using M605. +#define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_FULL_CONTROL_MODE + +// Default settings in "Auto-park Mode" +#define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder +#define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder + +// Default x offset in duplication mode (typically set to half print bed width) +#define DEFAULT_DUPLICATION_X_OFFSET 100 #endif // DUAL_X_CARRIAGE @@ -368,8 +368,8 @@ // @section lcd #if ENABLED(ULTIPANEL) - #define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60} // Feedrates for manual moves along X, Y, Z, E from panel - #define ULTIPANEL_FEEDMULTIPLY // Comment to disable setting feedrate multiplier via encoder +#define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60} // Feedrates for manual moves along X, Y, Z, E from panel +#define ULTIPANEL_FEEDMULTIPLY // Comment to disable setting feedrate multiplier via encoder #endif // @section extras @@ -394,25 +394,25 @@ #define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16] /** - * @section stepper motor current - * - * Some boards have a means of setting the stepper motor current via firmware. - * - * The power on motor currents are set by: - * PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2 - * known compatible chips: A4982 - * DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H - * known compatible chips: AD5206 - * DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2 - * known compatible chips: MCP4728 - * DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, MIGHTYBOARD_REVE - * known compatible chips: MCP4451, MCP4018 - * - * Motor currents can also be set by M907 - M910 and by the LCD. - * M907 - applies to all. - * M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H - * M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2 - */ +* @section stepper motor current +* +* Some boards have a means of setting the stepper motor current via firmware. +* +* The power on motor currents are set by: +* PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2 +* known compatible chips: A4982 +* DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H +* known compatible chips: AD5206 +* DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2 +* known compatible chips: MCP4728 +* DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, MIGHTYBOARD_REVE +* known compatible chips: MCP4451, MCP4018 +* +* Motor currents can also be set by M907 - M910 and by the LCD. +* M907 - applies to all. +* M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H +* M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2 +*/ //#define PWM_MOTOR_CURRENT {1300, 1300, 1250} // Values in milliamps //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis @@ -448,113 +448,113 @@ #if ENABLED(SDSUPPORT) - // Some RAMPS and other boards don't detect when an SD card is inserted. You can work - // around this by connecting a push button or single throw switch to the pin defined - // as SD_DETECT_PIN in your board's pins definitions. - // This setting should be disabled unless you are using a push button, pulling the pin to ground. - // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER). - #define SD_DETECT_INVERTED - - #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers? - #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place. - - #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order. - // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that. - // using: - //#define MENU_ADDAUTOSTART - - /** - * Sort SD file listings in alphabetical order. - * - * With this option enabled, items on SD cards will be sorted - * by name for easier navigation. - * - * By default... - * - * - Use the slowest -but safest- method for sorting. - * - Folders are sorted to the top. - * - The sort key is statically allocated. - * - No added G-code (M34) support. - * - 40 item sorting limit. (Items after the first 40 are unsorted.) - * - * SD sorting uses static allocation (as set by SDSORT_LIMIT), allowing the - * compiler to calculate the worst-case usage and throw an error if the SRAM - * limit is exceeded. - * - * - SDSORT_USES_RAM provides faster sorting via a static directory buffer. - * - SDSORT_USES_STACK does the same, but uses a local stack-based buffer. - * - SDSORT_CACHE_NAMES will retain the sorted file listing in RAM. (Expensive!) - * - SDSORT_DYNAMIC_RAM only uses RAM when the SD menu is visible. (Use with caution!) - */ - //#define SDCARD_SORT_ALPHA - - // SD Card Sorting options - #if ENABLED(SDCARD_SORT_ALPHA) - #define SDSORT_LIMIT 40 // Maximum number of sorted items (10-256). - #define FOLDER_SORTING -1 // -1=above 0=none 1=below - #define SDSORT_GCODE false // Allow turning sorting on/off with LCD and M34 g-code. - #define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting. - #define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.) - #define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option. - #define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use! - #endif - - // Show a progress bar on HD44780 LCDs for SD printing - //#define LCD_PROGRESS_BAR - - #if ENABLED(LCD_PROGRESS_BAR) - // Amount of time (ms) to show the bar - #define PROGRESS_BAR_BAR_TIME 2000 - // Amount of time (ms) to show the status message - #define PROGRESS_BAR_MSG_TIME 3000 - // Amount of time (ms) to retain the status message (0=forever) - #define PROGRESS_MSG_EXPIRE 0 - // Enable this to show messages for MSG_TIME then hide them - //#define PROGRESS_MSG_ONCE - // Add a menu item to test the progress bar: - //#define LCD_PROGRESS_BAR_TEST - #endif - - // This allows hosts to request long names for files and folders with M33 - //#define LONG_FILENAME_HOST_SUPPORT - - // This option allows you to abort SD printing when any endstop is triggered. - // This feature must be enabled with "M540 S1" or from the LCD menu. - // To have any effect, endstops must be enabled during SD printing. - //#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED +// Some RAMPS and other boards don't detect when an SD card is inserted. You can work +// around this by connecting a push button or single throw switch to the pin defined +// as SD_DETECT_PIN in your board's pins definitions. +// This setting should be disabled unless you are using a push button, pulling the pin to ground. +// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER). +#define SD_DETECT_INVERTED + +#define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers? +#define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place. + +#define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order. +// if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that. +// using: +//#define MENU_ADDAUTOSTART + +/** +* Sort SD file listings in alphabetical order. +* +* With this option enabled, items on SD cards will be sorted +* by name for easier navigation. +* +* By default... +* +* - Use the slowest -but safest- method for sorting. +* - Folders are sorted to the top. +* - The sort key is statically allocated. +* - No added G-code (M34) support. +* - 40 item sorting limit. (Items after the first 40 are unsorted.) +* +* SD sorting uses static allocation (as set by SDSORT_LIMIT), allowing the +* compiler to calculate the worst-case usage and throw an error if the SRAM +* limit is exceeded. +* +* - SDSORT_USES_RAM provides faster sorting via a static directory buffer. +* - SDSORT_USES_STACK does the same, but uses a local stack-based buffer. +* - SDSORT_CACHE_NAMES will retain the sorted file listing in RAM. (Expensive!) +* - SDSORT_DYNAMIC_RAM only uses RAM when the SD menu is visible. (Use with caution!) +*/ +//#define SDCARD_SORT_ALPHA + +// SD Card Sorting options +#if ENABLED(SDCARD_SORT_ALPHA) +#define SDSORT_LIMIT 40 // Maximum number of sorted items (10-256). +#define FOLDER_SORTING -1 // -1=above 0=none 1=below +#define SDSORT_GCODE false // Allow turning sorting on/off with LCD and M34 g-code. +#define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting. +#define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.) +#define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option. +#define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use! +#endif + +// Show a progress bar on HD44780 LCDs for SD printing +//#define LCD_PROGRESS_BAR + +#if ENABLED(LCD_PROGRESS_BAR) +// Amount of time (ms) to show the bar +#define PROGRESS_BAR_BAR_TIME 2000 +// Amount of time (ms) to show the status message +#define PROGRESS_BAR_MSG_TIME 3000 +// Amount of time (ms) to retain the status message (0=forever) +#define PROGRESS_MSG_EXPIRE 0 +// Enable this to show messages for MSG_TIME then hide them +//#define PROGRESS_MSG_ONCE +// Add a menu item to test the progress bar: +//#define LCD_PROGRESS_BAR_TEST +#endif + +// This allows hosts to request long names for files and folders with M33 +//#define LONG_FILENAME_HOST_SUPPORT + +// This option allows you to abort SD printing when any endstop is triggered. +// This feature must be enabled with "M540 S1" or from the LCD menu. +// To have any effect, endstops must be enabled during SD printing. +//#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED #endif // SDSUPPORT /** - * Additional options for Graphical Displays - * - * Use the optimizations here to improve printing performance, - * which can be adversely affected by graphical display drawing, - * especially when doing several short moves, and when printing - * on DELTA and SCARA machines. - * - * Some of these options may result in the display lagging behind - * controller events, as there is a trade-off between reliable - * printing performance versus fast display updates. - */ +* Additional options for Graphical Displays +* +* Use the optimizations here to improve printing performance, +* which can be adversely affected by graphical display drawing, +* especially when doing several short moves, and when printing +* on DELTA and SCARA machines. +* +* Some of these options may result in the display lagging behind +* controller events, as there is a trade-off between reliable +* printing performance versus fast display updates. +*/ #if ENABLED(DOGLCD) - // Enable to save many cycles by drawing a hollow frame on the Info Screen - #define XYZ_HOLLOW_FRAME +// Enable to save many cycles by drawing a hollow frame on the Info Screen +#define XYZ_HOLLOW_FRAME - // Enable to save many cycles by drawing a hollow frame on Menu Screens - #define MENU_HOLLOW_FRAME +// Enable to save many cycles by drawing a hollow frame on Menu Screens +#define MENU_HOLLOW_FRAME - // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. - // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. - //#define USE_BIG_EDIT_FONT +// A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. +// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. +//#define USE_BIG_EDIT_FONT - // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. - // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. - //#define USE_SMALL_INFOFONT +// A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. +// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. +//#define USE_SMALL_INFOFONT - // Enable this option and reduce the value to optimize screen updates. - // The normal delay is 10µs. Use the lowest value that still gives a reliable display. - //#define DOGM_SPI_DELAY_US 5 +// Enable this option and reduce the value to optimize screen updates. +// The normal delay is 10µs. Use the lowest value that still gives a reliable display. +//#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety @@ -564,30 +564,30 @@ #define USE_WATCHDOG #if ENABLED(USE_WATCHDOG) - // If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on. - // The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset. - // However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled. - //#define WATCHDOG_RESET_MANUAL +// If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on. +// The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset. +// However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled. +//#define WATCHDOG_RESET_MANUAL #endif // @section lcd /** - * Babystepping enables movement of the axes by tiny increments without changing - * the current position values. This feature is used primarily to adjust the Z - * axis in the first layer of a print in real-time. - * - * Warning: Does not respect endstops! - */ +* Babystepping enables movement of the axes by tiny increments without changing +* the current position values. This feature is used primarily to adjust the Z +* axis in the first layer of a print in real-time. +* +* Warning: Does not respect endstops! +*/ //#define BABYSTEPPING #if ENABLED(BABYSTEPPING) - #define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA! - #define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way - #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion. - //#define BABYSTEP_ZPROBE_OFFSET // Enable to combine M851 and Babystepping - //#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping. - #define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds. - // Note: Extra time may be added to mitigate controller latency. +#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA! +#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way +#define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion. +//#define BABYSTEP_ZPROBE_OFFSET // Enable to combine M851 and Babystepping +//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping. +#define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds. +// Note: Extra time may be added to mitigate controller latency. #endif // @section extruder @@ -602,48 +602,48 @@ //#define ADVANCE #if ENABLED(ADVANCE) - #define EXTRUDER_ADVANCE_K .0 - #define D_FILAMENT 2.85 +#define EXTRUDER_ADVANCE_K .0 +#define D_FILAMENT 2.85 #endif /** - * Implementation of linear pressure control - * - * Assumption: advance = k * (delta velocity) - * K=0 means advance disabled. - * See Marlin documentation for calibration instructions. - */ +* Implementation of linear pressure control +* +* Assumption: advance = k * (delta velocity) +* K=0 means advance disabled. +* See Marlin documentation for calibration instructions. +*/ //#define LIN_ADVANCE #if ENABLED(LIN_ADVANCE) - #define LIN_ADVANCE_K 75 - - /** - * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. - * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. - * While this is harmless for normal printing (the fluid nature of the filament will - * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. - * - * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio - * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures - * if the slicer is using variable widths or layer heights within one print! - * - * This option sets the default E:D ratio at startup. Use `M900` to override this value. - * - * Example: `M900 W0.4 H0.2 D1.75`, where: - * - W is the extrusion width in mm - * - H is the layer height in mm - * - D is the filament diameter in mm - * - * Example: `M900 R0.0458` to set the ratio directly. - * - * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. - * - * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. - * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. - */ - #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI) - // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135 +#define LIN_ADVANCE_K 75 + +/** +* Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. +* For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. +* While this is harmless for normal printing (the fluid nature of the filament will +* close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. +* +* For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio +* to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures +* if the slicer is using variable widths or layer heights within one print! +* +* This option sets the default E:D ratio at startup. Use `M900` to override this value. +* +* Example: `M900 W0.4 H0.2 D1.75`, where: +* - W is the extrusion width in mm +* - H is the layer height in mm +* - D is the filament diameter in mm +* +* Example: `M900 R0.0458` to set the ratio directly. +* +* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. +* +* Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. +* Cura (as of this writing) may produce Gcode incompatible with the automatic mode. +*/ +#define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI) +// Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135 #endif // @section leveling @@ -652,19 +652,19 @@ // Below are the macros that are used to define the borders for the mesh area, // made available here for specialized needs, ie dual extruder setup. #if ENABLED(MESH_BED_LEVELING) - #define MESH_MIN_X (X_MIN_POS + MESH_INSET) - #define MESH_MAX_X (X_MAX_POS - (MESH_INSET)) - #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET) - #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET)) +#define MESH_MIN_X (X_MIN_POS + MESH_INSET) +#define MESH_MAX_X (X_MAX_POS - (MESH_INSET)) +#define MESH_MIN_Y (Y_MIN_POS + MESH_INSET) +#define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET)) #elif ENABLED(AUTO_BED_LEVELING_UBL) - #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET) - #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET)) - #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET) - #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET)) - - // If this is defined, the currently active mesh will be saved in the - // current slot on M500. - #define UBL_SAVE_ACTIVE_ON_M500 +#define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET) +#define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET)) +#define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET) +#define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET)) + +// If this is defined, the currently active mesh will be saved in the +// current slot on M500. +#define UBL_SAVE_ACTIVE_ON_M500 #endif // @section extras @@ -681,7 +681,7 @@ // Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch //#define G38_PROBE_TARGET #if ENABLED(G38_PROBE_TARGET) - #define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move) +#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move) #endif // Moves (or segments) with fewer steps than this will be joined with the next move @@ -705,9 +705,9 @@ // The number of linear motions that can be in the plan at any give time. // THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ring-buffering. #if ENABLED(SDSUPPORT) - #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller +#define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller #else - #define BLOCK_BUFFER_SIZE 16 // maximize block buffer +#define BLOCK_BUFFER_SIZE 16 // maximize block buffer #endif // @section serial @@ -750,382 +750,382 @@ //#define FWRETRACT //ONLY PARTIALLY TESTED #if ENABLED(FWRETRACT) - #define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt - #define RETRACT_LENGTH 3 //default retract length (positive mm) - #define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change - #define RETRACT_FEEDRATE 45 //default feedrate for retracting (mm/s) - #define RETRACT_ZLIFT 0 //default retract Z-lift - #define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering) - #define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change) - #define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s) +#define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt +#define RETRACT_LENGTH 3 //default retract length (positive mm) +#define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change +#define RETRACT_FEEDRATE 45 //default feedrate for retracting (mm/s) +#define RETRACT_ZLIFT 0 //default retract Z-lift +#define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering) +#define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change) +#define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s) #endif /** - * Filament Change - * Experimental filament change support. - * Adds the GCode M600 for initiating filament change. - * - * Requires an LCD display. - * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. - */ +* Filament Change +* Experimental filament change support. +* Adds the GCode M600 for initiating filament change. +* +* Requires an LCD display. +* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. +*/ //#define FILAMENT_CHANGE_FEATURE #if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm - // It is a short retract used immediately after print interrupt before move to filament exchange position - #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast - #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm - // Longer length for bowden printers to unload filament from whole bowden tube, - // shorter length for printers without bowden to unload filament from extruder only, - // 0 to disable unloading for manual unloading - #define FILAMENT_CHANGE_LOAD_FEEDRATE 6 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast - #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm - // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, - // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, - // 0 to disable for manual extrusion - // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, - // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds - #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet - #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change - // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. - //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume +#define FILAMENT_CHANGE_X_POS 3 // X position of hotend +#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend +#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) +#define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) +#define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) +#define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s +#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +// It is a short retract used immediately after print interrupt before move to filament exchange position +#define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast +#define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm +// Longer length for bowden printers to unload filament from whole bowden tube, +// shorter length for printers without bowden to unload filament from extruder only, +// 0 to disable unloading for manual unloading +#define FILAMENT_CHANGE_LOAD_FEEDRATE 6 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast +#define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm +// Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, +// Short or zero length for printers without bowden where loading is not used +#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate +#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, +// 0 to disable for manual extrusion +// Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, +// or until outcoming filament color is not clear for filament color change +#define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds +#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet +#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change +// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. +//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif // @section tmc /** - * Enable this section if you have TMC26X motor drivers. - * You will need to import the TMC26XStepper library into the Arduino IDE for this - * (https://github.com/trinamic/TMC26XStepper.git) - */ +* Enable this section if you have TMC26X motor drivers. +* You will need to import the TMC26XStepper library into the Arduino IDE for this +* (https://github.com/trinamic/TMC26XStepper.git) +*/ //#define HAVE_TMCDRIVER #if ENABLED(HAVE_TMCDRIVER) - //#define X_IS_TMC - //#define X2_IS_TMC - //#define Y_IS_TMC - //#define Y2_IS_TMC - //#define Z_IS_TMC - //#define Z2_IS_TMC - //#define E0_IS_TMC - //#define E1_IS_TMC - //#define E2_IS_TMC - //#define E3_IS_TMC - //#define E4_IS_TMC - - #define X_MAX_CURRENT 1000 // in mA - #define X_SENSE_RESISTOR 91 // in mOhms - #define X_MICROSTEPS 16 // number of microsteps - - #define X2_MAX_CURRENT 1000 - #define X2_SENSE_RESISTOR 91 - #define X2_MICROSTEPS 16 - - #define Y_MAX_CURRENT 1000 - #define Y_SENSE_RESISTOR 91 - #define Y_MICROSTEPS 16 - - #define Y2_MAX_CURRENT 1000 - #define Y2_SENSE_RESISTOR 91 - #define Y2_MICROSTEPS 16 - - #define Z_MAX_CURRENT 1000 - #define Z_SENSE_RESISTOR 91 - #define Z_MICROSTEPS 16 - - #define Z2_MAX_CURRENT 1000 - #define Z2_SENSE_RESISTOR 91 - #define Z2_MICROSTEPS 16 - - #define E0_MAX_CURRENT 1000 - #define E0_SENSE_RESISTOR 91 - #define E0_MICROSTEPS 16 - - #define E1_MAX_CURRENT 1000 - #define E1_SENSE_RESISTOR 91 - #define E1_MICROSTEPS 16 - - #define E2_MAX_CURRENT 1000 - #define E2_SENSE_RESISTOR 91 - #define E2_MICROSTEPS 16 - - #define E3_MAX_CURRENT 1000 - #define E3_SENSE_RESISTOR 91 - #define E3_MICROSTEPS 16 - - #define E4_MAX_CURRENT 1000 - #define E4_SENSE_RESISTOR 91 - #define E4_MICROSTEPS 16 +//#define X_IS_TMC +//#define X2_IS_TMC +//#define Y_IS_TMC +//#define Y2_IS_TMC +//#define Z_IS_TMC +//#define Z2_IS_TMC +//#define E0_IS_TMC +//#define E1_IS_TMC +//#define E2_IS_TMC +//#define E3_IS_TMC +//#define E4_IS_TMC + +#define X_MAX_CURRENT 1000 // in mA +#define X_SENSE_RESISTOR 91 // in mOhms +#define X_MICROSTEPS 16 // number of microsteps + +#define X2_MAX_CURRENT 1000 +#define X2_SENSE_RESISTOR 91 +#define X2_MICROSTEPS 16 + +#define Y_MAX_CURRENT 1000 +#define Y_SENSE_RESISTOR 91 +#define Y_MICROSTEPS 16 + +#define Y2_MAX_CURRENT 1000 +#define Y2_SENSE_RESISTOR 91 +#define Y2_MICROSTEPS 16 + +#define Z_MAX_CURRENT 1000 +#define Z_SENSE_RESISTOR 91 +#define Z_MICROSTEPS 16 + +#define Z2_MAX_CURRENT 1000 +#define Z2_SENSE_RESISTOR 91 +#define Z2_MICROSTEPS 16 + +#define E0_MAX_CURRENT 1000 +#define E0_SENSE_RESISTOR 91 +#define E0_MICROSTEPS 16 + +#define E1_MAX_CURRENT 1000 +#define E1_SENSE_RESISTOR 91 +#define E1_MICROSTEPS 16 + +#define E2_MAX_CURRENT 1000 +#define E2_SENSE_RESISTOR 91 +#define E2_MICROSTEPS 16 + +#define E3_MAX_CURRENT 1000 +#define E3_SENSE_RESISTOR 91 +#define E3_MICROSTEPS 16 + +#define E4_MAX_CURRENT 1000 +#define E4_SENSE_RESISTOR 91 +#define E4_MICROSTEPS 16 #endif // @section TMC2130 /** - * Enable this for SilentStepStick Trinamic TMC2130 SPI-configurable stepper drivers. - * - * You'll also need the TMC2130Stepper Arduino library - * (https://github.com/teemuatlut/TMC2130Stepper). - * - * To use TMC2130 stepper drivers in SPI mode connect your SPI2130 pins to - * the hardware SPI interface on your board and define the required CS pins - * in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.). - */ +* Enable this for SilentStepStick Trinamic TMC2130 SPI-configurable stepper drivers. +* +* You'll also need the TMC2130Stepper Arduino library +* (https://github.com/teemuatlut/TMC2130Stepper). +* +* To use TMC2130 stepper drivers in SPI mode connect your SPI2130 pins to +* the hardware SPI interface on your board and define the required CS pins +* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.). +*/ //#define HAVE_TMC2130 #if ENABLED(HAVE_TMC2130) - // CHOOSE YOUR MOTORS HERE, THIS IS MANDATORY - //#define X_IS_TMC2130 - //#define X2_IS_TMC2130 - //#define Y_IS_TMC2130 - //#define Y2_IS_TMC2130 - //#define Z_IS_TMC2130 - //#define Z2_IS_TMC2130 - //#define E0_IS_TMC2130 - //#define E1_IS_TMC2130 - //#define E2_IS_TMC2130 - //#define E3_IS_TMC2130 - //#define E4_IS_TMC2130 - - /** - * Stepper driver settings - */ - - #define R_SENSE 0.11 // R_sense resistor for SilentStepStick2130 - #define HOLD_MULTIPLIER 0.5 // Scales down the holding current from run current - #define INTERPOLATE 1 // Interpolate X/Y/Z_MICROSTEPS to 256 - - #define X_CURRENT 1000 // rms current in mA. Multiply by 1.41 for peak current. - #define X_MICROSTEPS 16 // 0..256 - - #define Y_CURRENT 1000 - #define Y_MICROSTEPS 16 - - #define Z_CURRENT 1000 - #define Z_MICROSTEPS 16 - - //#define X2_CURRENT 1000 - //#define X2_MICROSTEPS 16 - - //#define Y2_CURRENT 1000 - //#define Y2_MICROSTEPS 16 - - //#define Z2_CURRENT 1000 - //#define Z2_MICROSTEPS 16 - - //#define E0_CURRENT 1000 - //#define E0_MICROSTEPS 16 - - //#define E1_CURRENT 1000 - //#define E1_MICROSTEPS 16 - - //#define E2_CURRENT 1000 - //#define E2_MICROSTEPS 16 - - //#define E3_CURRENT 1000 - //#define E3_MICROSTEPS 16 - - //#define E4_CURRENT 1000 - //#define E4_MICROSTEPS 16 - - /** - * Use Trinamic's ultra quiet stepping mode. - * When disabled, Marlin will use spreadCycle stepping mode. - */ - #define STEALTHCHOP - - /** - * Let Marlin automatically control stepper current. - * This is still an experimental feature. - * Increase current every 5s by CURRENT_STEP until stepper temperature prewarn gets triggered, - * then decrease current by CURRENT_STEP until temperature prewarn is cleared. - * Adjusting starts from X/Y/Z/E_CURRENT but will not increase over AUTO_ADJUST_MAX - * Relevant g-codes: - * M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given. - * M906 S1 - Start adjusting current - * M906 S0 - Stop adjusting current - * M911 - Report stepper driver overtemperature pre-warn condition. - * M912 - Clear stepper driver overtemperature pre-warn condition flag. - */ - //#define AUTOMATIC_CURRENT_CONTROL - - #if ENABLED(AUTOMATIC_CURRENT_CONTROL) - #define CURRENT_STEP 50 // [mA] - #define AUTO_ADJUST_MAX 1300 // [mA], 1300mA_rms = 1840mA_peak - #define REPORT_CURRENT_CHANGE - #endif - - /** - * The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD. - * This mode allows for faster movements at the expense of higher noise levels. - * STEALTHCHOP needs to be enabled. - * M913 X/Y/Z/E to live tune the setting - */ - //#define HYBRID_THRESHOLD - - #define X_HYBRID_THRESHOLD 100 // [mm/s] - #define X2_HYBRID_THRESHOLD 100 - #define Y_HYBRID_THRESHOLD 100 - #define Y2_HYBRID_THRESHOLD 100 - #define Z_HYBRID_THRESHOLD 4 - #define Z2_HYBRID_THRESHOLD 4 - #define E0_HYBRID_THRESHOLD 30 - #define E1_HYBRID_THRESHOLD 30 - #define E2_HYBRID_THRESHOLD 30 - #define E3_HYBRID_THRESHOLD 30 - #define E4_HYBRID_THRESHOLD 30 - - /** - * Use stallGuard2 to sense an obstacle and trigger an endstop. - * You need to place a wire from the driver's DIAG1 pin to the X/Y endstop pin. - * If used along with STEALTHCHOP, the movement will be louder when homing. This is normal. - * - * X/Y_HOMING_SENSITIVITY is used for tuning the trigger sensitivity. - * Higher values make the system LESS sensitive. - * Lower value make the system MORE sensitive. - * Too low values can lead to false positives, while too high values will collide the axis without triggering. - * It is advised to set X/Y_HOME_BUMP_MM to 0. - * M914 X/Y to live tune the setting - */ - //#define SENSORLESS_HOMING - - #if ENABLED(SENSORLESS_HOMING) - #define X_HOMING_SENSITIVITY 19 - #define Y_HOMING_SENSITIVITY 19 - #endif - - /** - * You can set your own advanced settings by filling in predefined functions. - * A list of available functions can be found on the library github page - * https://github.com/teemuatlut/TMC2130Stepper - * - * Example: - * #define TMC2130_ADV() { \ - * stepperX.diag0_temp_prewarn(1); \ - * stepperX.interpolate(0); \ - * } - */ - #define TMC2130_ADV() { } +// CHOOSE YOUR MOTORS HERE, THIS IS MANDATORY +//#define X_IS_TMC2130 +//#define X2_IS_TMC2130 +//#define Y_IS_TMC2130 +//#define Y2_IS_TMC2130 +//#define Z_IS_TMC2130 +//#define Z2_IS_TMC2130 +//#define E0_IS_TMC2130 +//#define E1_IS_TMC2130 +//#define E2_IS_TMC2130 +//#define E3_IS_TMC2130 +//#define E4_IS_TMC2130 + +/** +* Stepper driver settings +*/ + +#define R_SENSE 0.11 // R_sense resistor for SilentStepStick2130 +#define HOLD_MULTIPLIER 0.5 // Scales down the holding current from run current +#define INTERPOLATE 1 // Interpolate X/Y/Z_MICROSTEPS to 256 + +#define X_CURRENT 1000 // rms current in mA. Multiply by 1.41 for peak current. +#define X_MICROSTEPS 16 // 0..256 + +#define Y_CURRENT 1000 +#define Y_MICROSTEPS 16 + +#define Z_CURRENT 1000 +#define Z_MICROSTEPS 16 + +//#define X2_CURRENT 1000 +//#define X2_MICROSTEPS 16 + +//#define Y2_CURRENT 1000 +//#define Y2_MICROSTEPS 16 + +//#define Z2_CURRENT 1000 +//#define Z2_MICROSTEPS 16 + +//#define E0_CURRENT 1000 +//#define E0_MICROSTEPS 16 + +//#define E1_CURRENT 1000 +//#define E1_MICROSTEPS 16 + +//#define E2_CURRENT 1000 +//#define E2_MICROSTEPS 16 + +//#define E3_CURRENT 1000 +//#define E3_MICROSTEPS 16 + +//#define E4_CURRENT 1000 +//#define E4_MICROSTEPS 16 + +/** +* Use Trinamic's ultra quiet stepping mode. +* When disabled, Marlin will use spreadCycle stepping mode. +*/ +#define STEALTHCHOP + +/** +* Let Marlin automatically control stepper current. +* This is still an experimental feature. +* Increase current every 5s by CURRENT_STEP until stepper temperature prewarn gets triggered, +* then decrease current by CURRENT_STEP until temperature prewarn is cleared. +* Adjusting starts from X/Y/Z/E_CURRENT but will not increase over AUTO_ADJUST_MAX +* Relevant g-codes: +* M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given. +* M906 S1 - Start adjusting current +* M906 S0 - Stop adjusting current +* M911 - Report stepper driver overtemperature pre-warn condition. +* M912 - Clear stepper driver overtemperature pre-warn condition flag. +*/ +//#define AUTOMATIC_CURRENT_CONTROL + +#if ENABLED(AUTOMATIC_CURRENT_CONTROL) +#define CURRENT_STEP 50 // [mA] +#define AUTO_ADJUST_MAX 1300 // [mA], 1300mA_rms = 1840mA_peak +#define REPORT_CURRENT_CHANGE +#endif + +/** +* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD. +* This mode allows for faster movements at the expense of higher noise levels. +* STEALTHCHOP needs to be enabled. +* M913 X/Y/Z/E to live tune the setting +*/ +//#define HYBRID_THRESHOLD + +#define X_HYBRID_THRESHOLD 100 // [mm/s] +#define X2_HYBRID_THRESHOLD 100 +#define Y_HYBRID_THRESHOLD 100 +#define Y2_HYBRID_THRESHOLD 100 +#define Z_HYBRID_THRESHOLD 4 +#define Z2_HYBRID_THRESHOLD 4 +#define E0_HYBRID_THRESHOLD 30 +#define E1_HYBRID_THRESHOLD 30 +#define E2_HYBRID_THRESHOLD 30 +#define E3_HYBRID_THRESHOLD 30 +#define E4_HYBRID_THRESHOLD 30 + +/** +* Use stallGuard2 to sense an obstacle and trigger an endstop. +* You need to place a wire from the driver's DIAG1 pin to the X/Y endstop pin. +* If used along with STEALTHCHOP, the movement will be louder when homing. This is normal. +* +* X/Y_HOMING_SENSITIVITY is used for tuning the trigger sensitivity. +* Higher values make the system LESS sensitive. +* Lower value make the system MORE sensitive. +* Too low values can lead to false positives, while too high values will collide the axis without triggering. +* It is advised to set X/Y_HOME_BUMP_MM to 0. +* M914 X/Y to live tune the setting +*/ +//#define SENSORLESS_HOMING + +#if ENABLED(SENSORLESS_HOMING) +#define X_HOMING_SENSITIVITY 19 +#define Y_HOMING_SENSITIVITY 19 +#endif + +/** +* You can set your own advanced settings by filling in predefined functions. +* A list of available functions can be found on the library github page +* https://github.com/teemuatlut/TMC2130Stepper +* +* Example: +* #define TMC2130_ADV() { \ +* stepperX.diag0_temp_prewarn(1); \ +* stepperX.interpolate(0); \ +* } +*/ +#define TMC2130_ADV() { } #endif // ENABLED(HAVE_TMC2130) // @section L6470 /** - * Enable this section if you have L6470 motor drivers. - * You need to import the L6470 library into the Arduino IDE for this. - * (https://github.com/ameyer/Arduino-L6470) - */ +* Enable this section if you have L6470 motor drivers. +* You need to import the L6470 library into the Arduino IDE for this. +* (https://github.com/ameyer/Arduino-L6470) +*/ //#define HAVE_L6470DRIVER #if ENABLED(HAVE_L6470DRIVER) - //#define X_IS_L6470 - //#define X2_IS_L6470 - //#define Y_IS_L6470 - //#define Y2_IS_L6470 - //#define Z_IS_L6470 - //#define Z2_IS_L6470 - //#define E0_IS_L6470 - //#define E1_IS_L6470 - //#define E2_IS_L6470 - //#define E3_IS_L6470 - //#define E4_IS_L6470 - - #define X_MICROSTEPS 16 // number of microsteps - #define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high - #define X_OVERCURRENT 2000 // maxc current in mA. If the current goes over this value, the driver will switch off - #define X_STALLCURRENT 1500 // current in mA where the driver will detect a stall - - #define X2_MICROSTEPS 16 - #define X2_K_VAL 50 - #define X2_OVERCURRENT 2000 - #define X2_STALLCURRENT 1500 - - #define Y_MICROSTEPS 16 - #define Y_K_VAL 50 - #define Y_OVERCURRENT 2000 - #define Y_STALLCURRENT 1500 - - #define Y2_MICROSTEPS 16 - #define Y2_K_VAL 50 - #define Y2_OVERCURRENT 2000 - #define Y2_STALLCURRENT 1500 - - #define Z_MICROSTEPS 16 - #define Z_K_VAL 50 - #define Z_OVERCURRENT 2000 - #define Z_STALLCURRENT 1500 - - #define Z2_MICROSTEPS 16 - #define Z2_K_VAL 50 - #define Z2_OVERCURRENT 2000 - #define Z2_STALLCURRENT 1500 - - #define E0_MICROSTEPS 16 - #define E0_K_VAL 50 - #define E0_OVERCURRENT 2000 - #define E0_STALLCURRENT 1500 - - #define E1_MICROSTEPS 16 - #define E1_K_VAL 50 - #define E1_OVERCURRENT 2000 - #define E1_STALLCURRENT 1500 - - #define E2_MICROSTEPS 16 - #define E2_K_VAL 50 - #define E2_OVERCURRENT 2000 - #define E2_STALLCURRENT 1500 - - #define E3_MICROSTEPS 16 - #define E3_K_VAL 50 - #define E3_OVERCURRENT 2000 - #define E3_STALLCURRENT 1500 - - #define E4_MICROSTEPS 16 - #define E4_K_VAL 50 - #define E4_OVERCURRENT 2000 - #define E4_STALLCURRENT 1500 +//#define X_IS_L6470 +//#define X2_IS_L6470 +//#define Y_IS_L6470 +//#define Y2_IS_L6470 +//#define Z_IS_L6470 +//#define Z2_IS_L6470 +//#define E0_IS_L6470 +//#define E1_IS_L6470 +//#define E2_IS_L6470 +//#define E3_IS_L6470 +//#define E4_IS_L6470 + +#define X_MICROSTEPS 16 // number of microsteps +#define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high +#define X_OVERCURRENT 2000 // maxc current in mA. If the current goes over this value, the driver will switch off +#define X_STALLCURRENT 1500 // current in mA where the driver will detect a stall + +#define X2_MICROSTEPS 16 +#define X2_K_VAL 50 +#define X2_OVERCURRENT 2000 +#define X2_STALLCURRENT 1500 + +#define Y_MICROSTEPS 16 +#define Y_K_VAL 50 +#define Y_OVERCURRENT 2000 +#define Y_STALLCURRENT 1500 + +#define Y2_MICROSTEPS 16 +#define Y2_K_VAL 50 +#define Y2_OVERCURRENT 2000 +#define Y2_STALLCURRENT 1500 + +#define Z_MICROSTEPS 16 +#define Z_K_VAL 50 +#define Z_OVERCURRENT 2000 +#define Z_STALLCURRENT 1500 + +#define Z2_MICROSTEPS 16 +#define Z2_K_VAL 50 +#define Z2_OVERCURRENT 2000 +#define Z2_STALLCURRENT 1500 + +#define E0_MICROSTEPS 16 +#define E0_K_VAL 50 +#define E0_OVERCURRENT 2000 +#define E0_STALLCURRENT 1500 + +#define E1_MICROSTEPS 16 +#define E1_K_VAL 50 +#define E1_OVERCURRENT 2000 +#define E1_STALLCURRENT 1500 + +#define E2_MICROSTEPS 16 +#define E2_K_VAL 50 +#define E2_OVERCURRENT 2000 +#define E2_STALLCURRENT 1500 + +#define E3_MICROSTEPS 16 +#define E3_K_VAL 50 +#define E3_OVERCURRENT 2000 +#define E3_STALLCURRENT 1500 + +#define E4_MICROSTEPS 16 +#define E4_K_VAL 50 +#define E4_OVERCURRENT 2000 +#define E4_STALLCURRENT 1500 #endif /** - * TWI/I2C BUS - * - * This feature is an EXPERIMENTAL feature so it shall not be used on production - * machines. Enabling this will allow you to send and receive I2C data from slave - * devices on the bus. - * - * ; Example #1 - * ; This macro send the string "Marlin" to the slave device with address 0x63 (99) - * ; It uses multiple M260 commands with one B arg - * M260 A99 ; Target slave address - * M260 B77 ; M - * M260 B97 ; a - * M260 B114 ; r - * M260 B108 ; l - * M260 B105 ; i - * M260 B110 ; n - * M260 S1 ; Send the current buffer - * - * ; Example #2 - * ; Request 6 bytes from slave device with address 0x63 (99) - * M261 A99 B5 - * - * ; Example #3 - * ; Example serial output of a M261 request - * echo:i2c-reply: from:99 bytes:5 data:hello - */ +* TWI/I2C BUS +* +* This feature is an EXPERIMENTAL feature so it shall not be used on production +* machines. Enabling this will allow you to send and receive I2C data from slave +* devices on the bus. +* +* ; Example #1 +* ; This macro send the string "Marlin" to the slave device with address 0x63 (99) +* ; It uses multiple M260 commands with one B arg +* M260 A99 ; Target slave address +* M260 B77 ; M +* M260 B97 ; a +* M260 B114 ; r +* M260 B108 ; l +* M260 B105 ; i +* M260 B110 ; n +* M260 S1 ; Send the current buffer +* +* ; Example #2 +* ; Request 6 bytes from slave device with address 0x63 (99) +* M261 A99 B5 +* +* ; Example #3 +* ; Example serial output of a M261 request +* echo:i2c-reply: from:99 bytes:5 data:hello +*/ // @section i2cbus @@ -1133,36 +1133,36 @@ #define I2C_SLAVE_ADDRESS 0 // Set a value from 8 to 127 to act as a slave /** - * M43 - display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins - */ +* M43 - display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins +*/ //#define PINS_DEBUGGING /** - * Auto-report temperatures with M155 S - */ +* Auto-report temperatures with M155 S +*/ //#define AUTO_REPORT_TEMPERATURES /** - * Include capabilities in M115 output - */ +* Include capabilities in M115 output +*/ //#define EXTENDED_CAPABILITIES_REPORT /** - * Volumetric extrusion default state - * Activate to make volumetric extrusion the default method, - * with DEFAULT_NOMINAL_FILAMENT_DIA as the default diameter. - * - * M200 D0 to disable, M200 Dn to set a new diameter. - */ +* Volumetric extrusion default state +* Activate to make volumetric extrusion the default method, +* with DEFAULT_NOMINAL_FILAMENT_DIA as the default diameter. +* +* M200 D0 to disable, M200 Dn to set a new diameter. +*/ //#define VOLUMETRIC_DEFAULT_ON /** - * Enable this option for a leaner build of Marlin that removes all - * workspace offsets, simplifying coordinate transformations, leveling, etc. - * - * - M206 and M428 are disabled. - * - G92 will revert to its behavior from Marlin 1.0. - */ +* Enable this option for a leaner build of Marlin that removes all +* workspace offsets, simplifying coordinate transformations, leveling, etc. +* +* - M206 and M428 are disabled. +* - G92 will revert to its behavior from Marlin 1.0. +*/ //#define NO_WORKSPACE_OFFSETS #endif // CONFIGURATION_ADV_H diff --git a/Marlin/bi3_plus_lcd.cpp b/Marlin/bi3_plus_lcd.cpp index 9439a9731..ec28a0663 100644 --- a/Marlin/bi3_plus_lcd.cpp +++ b/Marlin/bi3_plus_lcd.cpp @@ -60,12 +60,12 @@ void executeLoopedOperation(millis_t ms) { } else if (opMode == OPMODE_UNLOAD_FILAMENT) { if (thermalManager.current_temperature[0] >= thermalManager.target_temperature[0] -10) - enqueue_and_echo_commands_P(PSTR("G1 E-0.5 F60")); + enqueue_and_echo_commands_P(PSTR("G1 E-1 F120")); nextOpTime = ms + 500; } else if (opMode == OPMODE_LOAD_FILAMENT) { if (thermalManager.current_temperature[0] >= thermalManager.target_temperature[0] -10) - enqueue_and_echo_commands_P(PSTR("G1 E0.5 F60")); + enqueue_and_echo_commands_P(PSTR("G1 E1 F120")); nextOpTime = ms + 500; } } @@ -562,7 +562,7 @@ void readLcdSerial() { lcdBuff[7] = 0xC8; //extruder temp (200) Serial2.write(lcdBuff, 8); - lcdShowPage(49);//open load/unbload_menu + lcdShowPage(49);//open load/unload_menu } else if (lcdData == 1 || lcdData == 2) { //read bed/hotend temp @@ -680,7 +680,7 @@ void readLcdSerial() { if (thermalManager.degHotend(0) >= 180) { clear_command_queue(); enqueue_and_echo_commands_P(PSTR("G91")); - enqueue_and_echo_commands_P(PSTR("G1 E5 F60")); + enqueue_and_echo_commands_P(PSTR("G1 E1 F120")); enqueue_and_echo_commands_P(PSTR("G90")); } break; @@ -689,7 +689,7 @@ void readLcdSerial() { if (thermalManager.degHotend(0) >= 180) { clear_command_queue(); enqueue_and_echo_commands_P(PSTR("G91")); - enqueue_and_echo_commands_P(PSTR("G1 E-5 F60")); + enqueue_and_echo_commands_P(PSTR("G1 E-1 F120")); enqueue_and_echo_commands_P(PSTR("G90")); } break; @@ -753,7 +753,7 @@ void readLcdSerial() { //read user entered values from sram uint8_t bytesRead = Serial2.readBytes(lcdBuff, 9); - if ((bytesRead == 11) && (lcdBuff[0] == 0x5A) && (lcdBuff[1] == 0xA5)) { + if ((bytesRead == 9) && (lcdBuff[0] == 0x5A) && (lcdBuff[1] == 0xA5)) { uint16_t hotendTemp = (uint16_t)lcdBuff[7] * 255 + lcdBuff[8]; //Serial.println(hotendTemp); char command[20]; @@ -808,58 +808,59 @@ void lcdSendMarlinVersion() { } void lcdSendStats() { + Serial.println("Test123456789ABCDEF"); char buffer[21]; duration_t elapsed; - printStatistics stats = print_job_timer.getStats(); - lcdBuff[0] = 0x5A; - lcdBuff[1] = 0xA5; - lcdBuff[2] = 0x07;//data length - lcdBuff[3] = 0x82;//write data to sram - lcdBuff[4] = 0x05; //starting at 0x5040 vp - lcdBuff[5] = 0x40; - //Total prints (including aborted) - lcdBuff[6] = highByte((int16_t)stats.totalPrints); - lcdBuff[7] = lowByte((int16_t)stats.totalPrints); - //Finished prints - lcdBuff[8] = highByte((int16_t)stats.finishedPrints); - lcdBuff[9] = lowByte((int16_t)stats.finishedPrints); + printStatistics stats = print_job_timer.getStats(); + lcdBuff[0] = 0x5A; + lcdBuff[1] = 0xA5; + lcdBuff[2] = 0x07;//data length + lcdBuff[3] = 0x82;//write data to sram + lcdBuff[4] = 0x05; //starting at 0x5040 vp + lcdBuff[5] = 0x40; + //Total prints (including aborted) + lcdBuff[6] = highByte((int16_t)stats.totalPrints); + lcdBuff[7] = lowByte((int16_t)stats.totalPrints); + //Finished prints + lcdBuff[8] = highByte((int16_t)stats.finishedPrints); + lcdBuff[9] = lowByte((int16_t)stats.finishedPrints); Serial2.write(lcdBuff, 10); //total print time lcdBuff[0] = 0x5A; lcdBuff[1] = 0xA5; - lcdBuff[2] = 0x18; //data length + lcdBuff[2] = 0x12; //data length lcdBuff[3] = 0x82; //write data to sram lcdBuff[4] = 0x05; //starting at 0x0542 vp lcdBuff[5] = 0x42; elapsed = stats.printTime; elapsed.toString(buffer); - strncpy((char*)lcdBuff + 6, buffer, 21); - Serial2.write(lcdBuff, 27); + strncpy((char*)lcdBuff + 6, buffer,15); + Serial2.write(lcdBuff, 21); //longest print time lcdBuff[0] = 0x5A; lcdBuff[1] = 0xA5; - lcdBuff[2] = 0x18; //data length + lcdBuff[2] = 0x12; //data length lcdBuff[3] = 0x82; //write data to sram lcdBuff[4] = 0x05; //starting at 0x054D vp lcdBuff[5] = 0x4D; elapsed = stats.longestPrint; elapsed.toString(buffer); - strncpy((char*)lcdBuff + 6, buffer, 21); - Serial2.write(lcdBuff, 27); + strncpy((char*)lcdBuff + 6, buffer, 15); + Serial2.write(lcdBuff, 21); //total filament used lcdBuff[0] = 0x5A; lcdBuff[1] = 0xA5; - lcdBuff[2] = 0x18; //data length + lcdBuff[2] = 0x12; //data length lcdBuff[3] = 0x82; //write data to sram lcdBuff[4] = 0x05; //starting at 0x0558 vp lcdBuff[5] = 0x58; sprintf_P(buffer, PSTR("%ld.%im"), long(stats.filamentUsed / 1000), int(stats.filamentUsed / 100) % 10); - strncpy((char*)lcdBuff + 6, buffer, 21); - Serial2.write(lcdBuff, 27); + strncpy((char*)lcdBuff + 6, buffer, 15); + Serial2.write(lcdBuff, 21); } diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 7739aae69..86363d8fb 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -741,6 +741,7 @@ void Temperature::manage_heater() { // Has it failed to increase enough? if (degHotend(e) < watch_target_temp[e]) { // Stop! + lcdShowPage(68); _temp_error(e, PSTR(MSG_T_HEATING_FAILED), PSTR(MSG_HEATING_FAILED_LCD)); } else { @@ -759,6 +760,7 @@ void Temperature::manage_heater() { // Has it failed to increase enough? if (degBed() < watch_target_bed_temp) { // Stop! + lcdShowPage(68); _temp_error(-1, PSTR(MSG_T_HEATING_FAILED), PSTR(MSG_HEATING_FAILED_LCD)); } else { @@ -806,7 +808,9 @@ void Temperature::manage_heater() { #if TEMP_SENSOR_BED != 0 #if HAS_THERMALLY_PROTECTED_BED - thermal_runaway_protection(&thermal_runaway_bed_state_machine, &thermal_runaway_bed_timer, current_temperature_bed, target_temperature_bed, -1, THERMAL_PROTECTION_BED_PERIOD, THERMAL_PROTECTION_BED_HYSTERESIS); + thermal_runaway_protection(&thermal_runaway_bed_state_machine, &thermal_runaway_bed_timer, current_temperature_bed, target_temperature_bed, -1, + +_PERIOD, THERMAL_PROTECTION_BED_HYSTERESIS); #endif #if ENABLED(PIDTEMPBED) @@ -1312,6 +1316,7 @@ void Temperature::init() { else if (PENDING(millis(), *timer)) break; *state = TRRunaway; case TRRunaway: + lcdShowPage(68); _temp_error(heater_id, PSTR(MSG_T_THERMAL_RUNAWAY), PSTR(MSG_THERMAL_RUNAWAY)); } }