# 3D Printer ###### `Equipment` [TOC] ## Skymaker X3 ### Info - Motherboard: Mightyboard V2 - BOARD_MIGHTYBOARD_REVE - [Schematics](https://green-candy.osdn.jp/external/MarlinFW/board_schematics/Mightyboard%20Rev.E/MakerBot%20MightyBoard%20REVE%20Schematic.pdf) - [Atmega1280 pinout](https://avrhelp.mcselec.com/index.html?atmega1280.htm) - [Wiki](https://beta.ivc.no/wiki/index.php/MakerBot_Replicator_1_Upgrades_and_Repairs) - Pin map for board is in `<pins_MIGHTYBOARD_REVE.h>` - Pin map for Atmega1280 is in `<pinsDebug_plus_70.h>` - Stepper motor driver - Origin: A4982 - [A4982 module pinout](https://beta.ivc.no/wiki/images/thumb/7/70/MakerBot_Replicator_MightyStep17.jpg/450px-MakerBot_Replicator_MightyStep17.jpg) - New: TMC2208 - [TMC2208 set voltage](https://www.youtube.com/watch?v=7VHwcEroHPk#t=4m16s) ### Code - [github page](https://github.com/Chungchiyu/CSPLAB-skymaker) ### New feature #### Auto bed leveling - `#define AUTO_BED_LEVELING_BILINEAR` - add probe - `#define FIX_MOUNTED_PROBE` - (for inductive probe) - `#define Z_MIN_PROBE_ENDSTOP_INVERTING true` - `#define Z_SAFE_HOMING` #### Control button :::spoiler Left button changes to backward. ```cpp // buttons.h #if BUTTON_EXISTS(LEFT) #define _BUTTON_PRESSED_LEFT _BUTTON_PRESSED(LEFT) #define BLEN_D 3 // Overide the no back button #define EN_D _BV(BLEN_D) // by assigning left button as back button ``` ```cpp // marlinui.cpp else { newbutton |= EN_D; // Change left button to back button btn_pressed = false; } ``` ::: :::spoiler Right button changes to select. ```cpp // marlinui.cpp else { newbutton |= EN_C; // Change left button to back button btn_pressed = false; } ``` ::: :::spoiler Long press button can speed up the adjustment. ```cpp // marlinui.cpp // Custom settings static millis_t update_ms_interval = 300; static uint8_t long_press_num = 0; static bool btn_pressed = false; if (ELAPSED(now, next_button_update_ms)) { #if HAS_DIGITAL_BUTTONS #if ANY_BUTTON(EN1, EN2, ENC, BACK) uint8_t newbutton = 0; if (BUTTON_PRESSED(EN1)) newbutton |= EN_A; if (BUTTON_PRESSED(EN2)) newbutton |= EN_B; if (can_encode() && BUTTON_PRESSED(ENC)) newbutton |= EN_C; if (BUTTON_PRESSED(BACK)) newbutton |= EN_D; #else constexpr uint8_t newbutton = 0; #endif // // Directional buttons // #if ANY_BUTTON(UP, DOWN, LEFT, RIGHT) static int8_t pulses = epps * encoderDirection; if (btn_pressed && update_ms_interval > 5) { long_press_num++; } else if (!btn_pressed) { long_press_num = 0; pulses = epps * encoderDirection; } else if (update_ms_interval < 11) { pulses = 10 * encoderDirection; } update_ms_interval = 160 - 20 * long_press_num; if (BUTTON_PRESSED(UP)) { encoderDiff = (ENCODER_STEPS_PER_MENU_ITEM) * pulses; next_button_update_ms = now + update_ms_interval; btn_pressed = true; } else if (BUTTON_PRESSED(DOWN)) { encoderDiff = -(ENCODER_STEPS_PER_MENU_ITEM) * pulses; next_button_update_ms = now + update_ms_interval; btn_pressed = true; } else if (BUTTON_PRESSED(LEFT)) { if (currentScreen == status_screen) { encoderDiff = -pulses; next_button_update_ms = now + update_ms_interval; btn_pressed = true; } else { newbutton |= EN_D; // Change left button to back button btn_pressed = false; } } else if (BUTTON_PRESSED(RIGHT)) { if (currentScreen == status_screen) { encoderDiff = pulses; next_button_update_ms = now + update_ms_interval; btn_pressed = true; } else { newbutton |= EN_C; // Change right button to center button btn_pressed = false; } } else { btn_pressed = false; } ``` ::: #### LCD PID Menu - PID auto tuning in menu - `#define PID_AUTOTUNE_MENU` #### Babystepping In `<Configuration_adv.h>` - `#define BABYSTEPPING` - `#define DOUBLECLICK_FOR_Z_BABYSTEPPING` #### Encoder sets the feedrate multiplier on the Status Screen In `<Configuration_adv.h` - `#define ULTIPANEL_FEEDMULTIPLY` #### Auto bed leveling(will original z-min pin can be competible to z probe?) - Add inductive z height probe. - #define AUTO_BED_LEVELING_BILINEAR - #define FIX_MOUNTED_PROBE - Force the use of the probe for Z-axis homing - `#define USE_PROBE_FOR_Z_HOMING` - `#define Z_MIN_PROBE_PIN 42 // L7-Original Z-max pin` #### Runout filament check In `Configuration.h` - #define FILAMENT_RUNOUT_SENSOR - #define NOZZLE_PARK_FEATURE In `Configuration_adv.h` - #define ADVANCED_PAUSE_FEATURE #### ### Fix #### SD card - Issue: Can not read sd card. - Reason: The state of sd detection is opposite. - Fix: #define SD_DETECT_STATE LOW #### Hotend temperature - Issue: Hotend temerature reverse. - Reason: The K-type thermalcouple has polarity. - Fix: Swap the pins. #### Hotend - Issue: Hotend throat stucked. - Reason: The filament will stuck the throat after cool down. - Fix: Change hotend to V6. #### Hotend temperature 2 - Issue: The hotend temperature can not be identified. - Reason: V6 hotend is using E3D (ATC Semitec 104GT-2/104NT-4-R025H42G), not MAX6675. - Fix: Connect and additional wire from ATmega1280 (PK6(ADC14/PCINT22)), and add a 4.7k ohm resistor for pull-up, and extend the thermocouple pins for input. In pins_MIGHTYBOARD_REVE.h - #define TEMP_0_PIN 14 #### Z_SAFE_HOMING - Issue: Moving out of boundary after homing XY. - Reason: The Z_SAFE_HOMING setting goes to X0 Y0. - Fix: Go to half bed position. - #define Z_SAFE_HOMING_X_POINT _X_HALF_BED // X point for Z homing - #define Z_SAFE_HOMING_Y_POINT _Y_HALF_BED // Y point for Z homing #### Bed Size - #define X_BED_SIZE 280 - #define Y_BED_SIZE 200 #### Step/mm - Issue: Steps per unit is wrong. - Fix:(Needs to command M92 to overide then M500 save to EEPROM) - #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 96.275201870 } :::spoiler Information image ![](https://hackmd.io/_uploads/HJIJJm2WT.png) ![](https://hackmd.io/_uploads/H1ygkmnZT.png) ![](https://hackmd.io/_uploads/BJaeymnZ6.png) ::: #### PID Tuning - Issue: The hotend temperature fluctuates. - Reason: Hotend changes to V6, the pid parameters aren't the same. - Fix: Redo the PID tuning. Type command: E0 extruder, 200^C, 8 times - M303 E0 S200 C8 - #define DEFAULT_Kp 18.38 - #define DEFAULT_Ki 1.38 - #define DEFAULT_Kd 61.35 #### Skew Compensation - Issue: The printed parts aren't orthogonally correct. - Reasson: The gantry is not orthogonally aligned. - Fix: Run bed skew compensation. `In configuration.h` - #define SKEW_CORRECTION - #define XY_DIAG_AC 141.1 #define XY_DIAG_BD 141.36 #define XY_SIDE_AD 99.65 #### Lack of flash memory - Issue: Atmega1280 is lack of flash memory. - Fix: - [Feature memory usage](https://www.crosslink.io/marlin-2-0-memory-usage-by-feature/) - [Optimisations of AVR programs using avr-gcc](https://p5r.uk/blog/2008/avr-gcc-optimisations.html) 1. Disable to save 638 bytes memory. You only need this to see EEPROM messages when connected to serial console. - // #define EEPROM_CHITCHAT 2. Readonly support for SD card. Disables capabilites to write to SD card, so gcode uploading and Power loss recovery won't work. Save 2000 bytes. - #define SDCARD_READONLY #### Head Creep problem - Date: 2024/03/10 - Issue: The hotend was lack of cooling, causing serious head creep. - Fix: - Add two side cooling fans to cool down filament. - ![image](https://hackmd.io/_uploads/rJHFcFoaa.png =60%x) - Lower flow rate to 75%. The original flow is too high. #### Accuracy - Date: 2024/03/11 - Issue: The Y axis is much more inaccurate. - Fix: - Calibrate by printing califlower calibration grid. - [Link page](https://www.printables.com/model/164261-calibration-bro-califlower-calilantern-alternative) - ![image](https://hackmd.io/_uploads/SkVj3KsaT.png) #### Bed Leveling Keep Turning Off - Date: 2024/03/15 - Issue: Bed leveling keep turning off automatically after bed homing. - Fix: Change firmware with `RESTORE_LEVELING_AFTER_G28` leveling is restored to whatever state it was in before homing.