Если закомментировать эти опции:
#define LIN_ADVANCE вместо 132 уже 520 байт свободно
#define RX_BUFFER_SIZE 256 вместо 1024, теперь уже не 520, а 1293 байта свободно
#define S_CURVE_ACCELERATION уже свободно 1823 байта вместо 1293
то все равно мало RAM остается, а вот если сделать #define RX_BUFFER_SIZE 16 , то места хватает, но не уверен, что через USB при таком раскладе нормально работать будет.
Кому не сложно пожалуйста гляньте в
Configuration_adv.h какое значение у вас стоит для #define RX_BUFFER_SIZE.
Добавлено спустя 1 час 53 минуты 24 секунды:Работает.
Причем с выключенной интерполяцией гораздо шумнее, как мои прошлые драйвера, а с включенной интерполяцией, но с выключенным режимом StealthChop работают тише, но мотор поет, если еще и StealthChop включить слышен только вентилятор
!!!Важно если включить режим HYBRID_THRESHOLD то драйвер так и остается в нем даже после кучи перепрошивок с отключенным режимом и продолжает противно шипеть, если кто в курсе как побороть пожалуйста напишите- кажется пронесло, принтер постоял обесточенным, и вроде как все пришло в норму, пропало это шипение при перемещении по YДелал так:
1) Переназначил в файле своей платы
pins_RUMBA.h пины от экструдера E0 на мотор по X, чтоб освободить UART используемый в разъеме для мотора по X
2) На плате припаял у UART-ов пин TX через 1КОм резистор к PD_UART, RX также припаял к PD_UART без резистора, как пишут тут
https://marlinfw.org/docs/hardware/tmc_drivers.html или тут
https://www.instructables.com/id/UART-T ... s-With-th/3) На платах самих драйверов перепаял перемычку как показано тут
https://www.instructables.com/id/UART-T ... s-With-th/4) Дальше прописывал в файлах
Configuration.h Configuration_adv.h pins_RUMBA.hpins_RUMBA.h прописал UART для Y и E0
Код:
//
// Steppers
//
//#define X_STEP_PIN 17
//#define X_DIR_PIN 16
//#define X_ENABLE_PIN 48
#define X_STEP_PIN 26 // !!!! Переназначаем пины от E1 для X
#define X_DIR_PIN 25
#define X_ENABLE_PIN 27
#define Y_STEP_PIN 54
#define Y_DIR_PIN 47
#define Y_ENABLE_PIN 55
#if (defined(UBRRH)) // Делаем Baudrate для Serial2 115200 как и у Serial0
#define UBRR2H UBRRH
#endif
#if (defined(UBRRH0))
#define UBRR2H UBRRH0
#endif
#define Y_HARDWARE_SERIAL Serial2 // !!!! Задействуем Serial2 для Y
#define Z_STEP_PIN 57
#define Z_DIR_PIN 56
#define Z_ENABLE_PIN 62
#define E0_STEP_PIN 23
#define E0_DIR_PIN 22
#define E0_ENABLE_PIN 24
#if (defined(UBRRH)) // Делаем Baudrate для Serial3 115200 как и у Serial0
#define UBRR3H UBRRH
#endif
#if (defined(UBRRH0))
#define UBRR3H UBRRH0
#endif
#define E0_HARDWARE_SERIAL Serial3 // !!!! Задействуем Serial3 для E0
//#define E1_STEP_PIN 26 // !!!! Освобождаем пины от E1 для того чтоб переназначить их для X
//#define E1_DIR_PIN 25
//#define E1_ENABLE_PIN 27
#define E2_STEP_PIN 29
#define E2_DIR_PIN 28
#define E2_ENABLE_PIN 39
Configuration_adv.h после слов
#if HAS_TRINAMIC задал параметры для своих моторов
Код:
#if HAS_TRINAMIC
#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 true // Interpolate X/Y/Z_MICROSTEPS to 256
//#define X_CURRENT 800 // rms current in mA. Multiply by 1.41 for peak current. // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define X_MICROSTEPS 16 // 0..256 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
#define Y_CURRENT 800
#define Y_MICROSTEPS 16
//#define Z_CURRENT 800 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define Z_MICROSTEPS 16 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define X2_CURRENT 800 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define X2_MICROSTEPS 16 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define Y2_CURRENT 800 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define Y2_MICROSTEPS 16 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define Z2_CURRENT 800 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define Z2_MICROSTEPS 16 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
#define E0_CURRENT 800
#define E0_MICROSTEPS 16
//#define E1_CURRENT 800 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define E1_MICROSTEPS 16 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define E2_CURRENT 800 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define E2_MICROSTEPS 16 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define E3_CURRENT 800 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define E3_MICROSTEPS 16 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define E4_CURRENT 800 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
//#define E4_MICROSTEPS 16 // Закомментировал, т.к. управлять планирую только по Y и E !!!!
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
* but you can override or define them here.
*/
//#define TMC_USE_SW_SPI
//#define TMC_SW_MOSI -1
//#define TMC_SW_MISO -1
//#define TMC_SW_SCK -1
/**
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
#define STEALTHCHOP // Закомментировал, т.к. не собираюсь на Y и E0 использовать STEALTHCHOP !!!!
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
* like overtemperature and short to ground. TMC2208 requires hardware serial.
* In the case of overtemperature Marlin can decrease the driver current until error condition clears.
* Other detected conditions can be used to stop the current print.
* 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.
* M911 - Report stepper driver overtemperature pre-warn condition.
* M912 - Clear stepper driver overtemperature pre-warn condition flag.
* M122 S0/1 - Report driver parameters (Requires TMC_DEBUG)
*/
//#define MONITOR_DRIVER_STATUS
#if ENABLED(MONITOR_DRIVER_STATUS)
#define CURRENT_STEP_DOWN 50 // [mA]
#define REPORT_CURRENT_CHANGE
#define STOP_ON_ERROR
#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 // Разкомментировал, т.к. собираюсь на моторе для E0 использовать spreadCycle
//#define X_HYBRID_THRESHOLD 100 // [mm/s]
//#define X2_HYBRID_THRESHOLD 100
#define Y_HYBRID_THRESHOLD 70
//#define Y2_HYBRID_THRESHOLD 100
//#define Z_HYBRID_THRESHOLD 3
//#define Z2_HYBRID_THRESHOLD 3
#define E0_HYBRID_THRESHOLD 19 // Было 30, сделал 19, т.к. нужен бОльший момент на экструдере, при скорости в слайсере 24мм/с !!!
//#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.
* X, Y, and Z homing will always be done in spreadCycle mode.
*
* X/Y/Z_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/Z_HOME_BUMP_MM to 0.
* M914 X/Y/Z to live tune the setting
*/
//#define SENSORLESS_HOMING // TMC2130 only
#if ENABLED(SENSORLESS_HOMING)
#define X_HOMING_SENSITIVITY 8
#define Y_HOMING_SENSITIVITY 8
#define Z_HOMING_SENSITIVITY 8
#endif
/**
* Enable M122 debugging command for TMC stepper drivers.
* M122 S0/1 will enable continous reporting.
*/
//#define TMC_DEBUG
/**
* M915 Z Axis Calibration
*
* - Adjust Z stepper current,
* - Drive the Z axis to its physical maximum, and
* - Home Z to account for the lost steps.
*
* Use M915 Snn to specify the current.
* Use M925 Znn to add extra Z height to Z_MAX_POS.
*/
//#define TMC_Z_CALIBRATION
#if ENABLED(TMC_Z_CALIBRATION)
#define CALIBRATION_CURRENT 250
#define CALIBRATION_EXTRA_HEIGHT 10
#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
* https://github.com/teemuatlut/TMC2208Stepper
*
* Example:
* #define TMC_ADV() { \
* stepperX.diag0_temp_prewarn(1); \
* stepperY.interpolate(0); \
* }
*/
#define TMC_ADV() { }
#endif // TMC2130 || TMC2208
также там же прописал
Код:
/**
* Minimum delay after setting the stepper DIR (in ns)
* 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire)
* 20 : Minimum for TMC2xxx drivers
* 200 : Minimum for A4988 drivers
* 500 : Minimum for LV8729 drivers (guess, no info in datasheet)
* 650 : Minimum for DRV8825 drivers
* 1500 : Minimum for TB6600 drivers (guess, no info in datasheet)
* 15000 : Minimum for TB6560 drivers (guess, no info in datasheet)
*
* Override the default value based on the driver type set in Configuration.h.
*/
#define MINIMUM_STEPPER_DIR_DELAY 20 // Было закомментировано и стояло значение 650 !!!!
/**
* Minimum stepper driver pulse width (in µs)
* 0 : Smallest possible width the MCU can produce, compatible with TMC2xxx drivers
* 1 : Minimum for A4988 stepper drivers
* 1 : Minimum for LV8729 stepper drivers
* 2 : Minimum for DRV8825 stepper drivers
* 3 : Minimum for TB6600 stepper drivers
* 30 : Minimum for TB6560 stepper drivers
*
* Override the default value based on the driver type set in Configuration.h.
*/
#define MINIMUM_STEPPER_PULSE 0 // Было закомментировано и стояло значение 0 !!!!
/**
* Maximum stepping rate (in Hz) the stepper driver allows
* If undefined, defaults to 1MHz / (2 * MINIMUM_STEPPER_PULSE)
* 500000 : Maximum for A4988 stepper driver
* 400000 : Maximum for TMC2xxx stepper drivers
* 250000 : Maximum for DRV8825 stepper driver
* 150000 : Maximum for TB6600 stepper driver
* 130000 : Maximum for LV8729 stepper driver
* 15000 : Maximum for TB6560 stepper driver
*
* Override the default value based on the driver type set in Configuration.h.
*/
#define MAXIMUM_STEPPER_RATE 400000 // Было закомментировано и стояло значение 250000 !!!!
Configuration.hКод:
/**
* Stepper Drivers
*
* These settings allow Marlin to tune stepper driver timing and enable advanced options for
* stepper drivers that support them. You may also override timing options in Configuration_adv.h.
*
* A4988 is assumed for unspecified drivers.
*
* Options: A4988, DRV8825, LV8729, L6470, TB6560, TB6600, TMC2100,
* TMC2130, TMC2130_STANDALONE, TMC2208, TMC2208_STANDALONE,
* TMC26X, TMC26X_STANDALONE, TMC2660, TMC2660_STANDALONE,
* TMC5130, TMC5130_STANDALONE
* :['A4988', 'DRV8825', 'LV8729', 'L6470', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE']
*/
//#define X_DRIVER_TYPE TMC2208
#define Y_DRIVER_TYPE TMC2208 // !!!! Разкомментировал, т.к. собираюсь использовать
//#define Z_DRIVER_TYPE TMC2208
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
#define E0_DRIVER_TYPE TMC2208 // !!!! Разкомментировал, т.к. собираюсь использовать
//#define E1_DRIVER_TYPE A4988
//#define E2_DRIVER_TYPE A4988
//#define E3_DRIVER_TYPE A4988
//#define E4_DRIVER_TYPE A4988
В целом то что я делал в файлах легко найти через Ctr+F найдя !!!
5) т.к. без изменений не хватает RAM памяти меги, пришлось закомментировать следующие фичи
#̶d̶e̶f̶i̶n̶e̶ ̶L̶I̶N̶_̶A̶D̶V̶A̶N̶C̶E̶ ̶-̶>̶ ̶[̶c̶o̶l̶o̶r̶=̶#̶0̶0̶F̶F̶0̶0̶]̶C̶o̶n̶f̶i̶g̶u̶r̶a̶t̶i̶o̶n̶_̶a̶d̶v̶.̶h̶[̶/̶c̶o̶l̶o̶r̶]
#define S_CURVE_ACCELERATION ->
Configuration.hно этого оказалось мало, поэтому пришлось еще внести изменения в файл
cardreader.h а именно изменить значение
#define MAX_DIR_DEPTH 1 вместо 10-ти
за счет чего на функционал принтера лично для меня особого влияния не произошло, однако создавать на флешке теперь можно будет только 1 папку с файлами в глубину и если создать в ней еще одну папку, то скорее всего принтер просто не увидит то что внутри нее.
#define RX_BUFFER_SIZE 256 вместо 1024 ->
Configuration_adv.h,а если в
#define MAX_CMD_SIZE вместо 96 поставить 51 или 32, то можно не жертвовать #define LIN_ADVANCE, который нужен для качественной печати.
MAX_CMD_SIZE просто отвечает за обмен командами между ПК и принтером и нормально работает и при значении 32, если печать ведется с флешки.
Таким образом удалось освободить 2228 байт RAM памяти меги.
Также стоит учесть и то что те моторы, которые будут управляться через UART придется калибровать каждый раз после изменения значения микрошага, о чем предупреждают здесь
https://www.instructables.com/id/UART-T ... s-With-th/.
Ну и конечно же все на свой страх и риск