Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Собираем, настраиваем, печатаем, делимся опытом, помогаем новичкам

Модератор: Kaktus

Аватара пользователя
AKDZG
Сообщения: 2201
Зарегистрирован: 17 окт 2015, 10:00
Имя: Алексей
Откуда: Иркутск
Благодарил (а): 21 раз
Поблагодарили: 76 раз

Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение AKDZG » 24 окт 2015, 10:19

Последний раз редактировалось AKDZG 24 янв 2016, 08:50, всего редактировалось 1 раз.
Ultimaker Original
Mendel90
СПринтер 233

Аватара пользователя
AKDZG
Сообщения: 2201
Зарегистрирован: 17 окт 2015, 10:00
Имя: Алексей
Откуда: Иркутск
Благодарил (а): 21 раз
Поблагодарили: 76 раз

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение AKDZG » 17 дек 2015, 14:47

Перенёс сообщения по дисплеям в отдельную тему "Вопросы по дисплеям для 3D принтеров"
Ultimaker Original
Mendel90
СПринтер 233

Аватара пользователя
VolandZel
Сообщения: 237
Зарегистрирован: 17 ноя 2015, 13:57
Имя: Владимир
Откуда: Зеленоград
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение VolandZel » 17 дек 2015, 16:36

Здравствуйте! Подскажите какой параметр в прошивке влияет на максимальную температуру стола? Сейчас больше 120 градусов не дает ставить. Видел в статье про марлин только ограничение максимальной температуры хот-энда.
И можно через G-код это как то поменять? Или только перепрошивать?

Аватара пользователя
AKDZG
Сообщения: 2201
Зарегистрирован: 17 окт 2015, 10:00
Имя: Алексей
Откуда: Иркутск
Благодарил (а): 21 раз
Поблагодарили: 76 раз

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение AKDZG » 17 дек 2015, 16:42

VolandZel писал(а):какой параметр в прошивке влияет на максимальную температуру стола?
Здравствуйте!

#define BED_MAXTEMP 150

Возможно через Repetier Host можно поменять. Я не пробовал.
Ultimaker Original
Mendel90
СПринтер 233

metal
Сообщения: 102
Зарегистрирован: 01 дек 2015, 13:16
Имя: Denis
Откуда: Moscow
Поблагодарили: 2 раза
Контактная информация:

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение metal » 24 дек 2015, 11:57

Помойму только прошивку править... В еепром таких параметров не нашел... Правил прошивку на своем ваньке, чтоб стол до 150, сопло до 290 можно было греть
Впрочем может плохо искал)
Печатаю на Wanhao Duplicator i3, подумываю собрать H-bot.

Аватара пользователя
VolandZel
Сообщения: 237
Зарегистрирован: 17 ноя 2015, 13:57
Имя: Владимир
Откуда: Зеленоград
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение VolandZel » 24 дек 2015, 13:33

metal писал(а):Правил прошивку на своем ваньке, чтоб стол до 150
Да в Repitere это не доступно, там только шаг на мм, скорости.
Может нубский вопрос, пока просто не разбирался доскональна: А прошивку из принтера тоже через софт arduino можно вытащить? Или он позволяет только записывать прошивку в принтер?

Аватара пользователя
AKDZG
Сообщения: 2201
Зарегистрирован: 17 окт 2015, 10:00
Имя: Алексей
Откуда: Иркутск
Благодарил (а): 21 раз
Поблагодарили: 76 раз

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение AKDZG » 24 дек 2015, 15:26

Всё что можно вытащить из 3D принтера показывает Repetier. Остальное закодировано и можно вытащить только в бинарном формате, то есть в шестнадцатеричном виде и где там что не разобрать.
Задавайте любые вопросы, будем делиться опытом. Если нужно, то и прошивку поможем настроить.
Ultimaker Original
Mendel90
СПринтер 233

Аватара пользователя
VolandZel
Сообщения: 237
Зарегистрирован: 17 ноя 2015, 13:57
Имя: Владимир
Откуда: Зеленоград
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение VolandZel » 25 дек 2015, 09:22

AKDZG писал(а):Всё что можно вытащить из 3D принтера показывает Repetier. Остальное закодировано и можно вытащить только в бинарном формате.
Засада!
Мне просто нужно поднять температуру стола по термистору до 130 примерно, сейчас стоит ограничение до 120 градусов. Принтер не я собирал, всех параметров в прошивке под свой принтер не знаю. Можно конечно подергать ребят, что принтер собирали...
Температура стола нужна для АБС, сейчас при 120 по термистору на зеркале 3 мм реально 105 градусов максимум. Задолбался бороться с деламинацией на АБС (черный, REC). Что сделано: Закрыл свою прушу 3, переделал вентилятор хотэнда (теперь не дует на стол), стол регулируется по 8 точкам (добавил к стандартным 4 еще 4 винта) и каждый раз перед печатью проверяю, выставляю по листку бумаги. Пробовал и увеличивать ширину экструзии на 1 слой, чтоб больше размазывало, все равно есть небольшая деламинация, особенно на острых углах - но не все время же круги печатать! Печатаю с бримом, брим остается а углы детали отрывает. Лак нелли использую.
Что думаю попробовать: 1) пиво на стол, а не внутрь; 2) Если пиво не прокатит, то попробую принудительно увеличить температуру стола. Штатный БП не разгоняет стол больше 124 градусов даже принудительно (стол через автореле, БП на 350 Вт, на выходе выкрутил на нем максимум 12,6В под нагрузкой, сопротивление стола 1,3 ома). Думаю подключить стол через трансформатор, из того что валяется дома - подавать буду переменку 16,3В. Но блин, это только принудительно можно включить реле чтоб нагреть до 130 по термистору, прошивка ограничивает до 120 градусов.
Уже несколько месяцев с этим АБС бьюсь... другого АБС нет, но я думаю будет тоже самое.
А через G-код случайно такую команду нельзя отправить, на замену максимальной температуры?

Аватара пользователя
AKDZG
Сообщения: 2201
Зарегистрирован: 17 окт 2015, 10:00
Имя: Алексей
Откуда: Иркутск
Благодарил (а): 21 раз
Поблагодарили: 76 раз

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение AKDZG » 25 дек 2015, 14:32

Попробуйте плёнку Ломонд из этой статьи http://3deshnik.ru/blogs/akdzg/ot-klass ... ya-pechati
Пиво лучше лака не будет держать.
VolandZel писал(а):А через G-код случайно такую команду нельзя отправить, на замену максимальной температуры?
Так они все через G-код отправляются при печати, только прошивка следит за ограничениями. Так что придётся в прошивке разбираться. Основные параметры нужно переписать из Repetier. Термисторы скорее всего типа "1". Останется только с концевиками разобраться и правильным направлением вращения двигателей.
Ultimaker Original
Mendel90
СПринтер 233

Аватара пользователя
AKDZG
Сообщения: 2201
Зарегистрирован: 17 окт 2015, 10:00
Имя: Алексей
Откуда: Иркутск
Благодарил (а): 21 раз
Поблагодарили: 76 раз

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение AKDZG » 25 дек 2015, 14:59

Скидывайте сюда скриншоты параметров прошивки из Repetier Host и фотографию принтера припаркованного в положении HOME. Я предварительно настрой вам прошивку.
Ultimaker Original
Mendel90
СПринтер 233

antonkopa
Сообщения: 145
Зарегистрирован: 09 дек 2015, 20:51
Имя: антон
Поблагодарили: 2 раза
Контактная информация:

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение antonkopa » 24 янв 2016, 08:39

Вопрос конечно больше в сторону прошивки Marlin RC а именно по замене прутка через меню для активации функции В файле configuration_adv.h расскоментировать #define FILAMENTCHANGEENABLE вот. Если раньше при смене прутка экструдер отъезжал в сторону выплевывал старый пруток и начинал пищать, после чего нужно было протягивать новый пруток в ручную. То в данной версии реализация улучшена тем что после того как пруток выплюнуло экструдер автоматом пытается сам захватить новый пруток, и соответственно выгоняет остатки старого.
Но как всегда ложка дегтя (( после всей этой процедуры нажимаю кнопку продолжения печати голова возвращается к модели и........ ВЫПЛЕВЫВАЕТ пластик. Проблема как оказалось не только у меня https://github.com/MarlinFirmware/MarlinDev/issues/211 но решения я пока не нашел. Может кто с таким уже сталкивался и победил ?

antonkopa
Сообщения: 145
Зарегистрирован: 09 дек 2015, 20:51
Имя: антон
Поблагодарили: 2 раза
Контактная информация:

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение antonkopa » 24 янв 2016, 10:00

И так до чего я дошел ))

Вот кусок с которым работает но без автоматического захвата нового прутка.

//adds support for experimental filament exchange support M600; requires display
#ifdef ULTIPANEL
#define FILAMENTCHANGEENABLE
#ifdef FILAMENTCHANGEENABLE
#define FILAMENTCHANGE_XPOS 3
#define FILAMENTCHANGE_YPOS 3
#define FILAMENTCHANGE_ZADD 10
#define FILAMENTCHANGE_FIRSTRETRACT -2
#define FILAMENTCHANGE_FINALRETRACT -100
#endif
#endif

#ifdef FILAMENTCHANGEENABLE
#ifdef EXTRUDER_RUNOUT_PREVENT
#error EXTRUDER_RUNOUT_PREVENT currently incompatible with FILAMENTCHANGE
#endif
#endif

antonkopa
Сообщения: 145
Зарегистрирован: 09 дек 2015, 20:51
Имя: антон
Поблагодарили: 2 раза
Контактная информация:

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение antonkopa » 24 янв 2016, 15:21

Товарищ http://roboforum.ru/member20805/ помог с данной проблемой :)


Итак в файле configuration_adv.h нужно только расскоментировать #define FILAMENTCHANGEENABLE
А в файле marlin_main.cpp нужно заменить кусок функции М600

Код: Выделить всё

#if ENABLED(FILAMENTCHANGEENABLE)  // Смена нити

  /**
   * M600: Pause for filament change
   *
   *  E[distance] - Retract the filament this far (negative value)
   *  Z[distance] - Move the Z axis by this distance
   *  X[position] - Move to this X position, with Y
   *  Y[position] - Move to this Y position, with X
   *  L[distance] - Retract distance for removal (manual reload)
   *
   *  Default values are used for omitted arguments.
   *
   */

inline void gcode_M600() {

    if (degHotend(active_extruder) < extrude_min_temp) {  // Проверяем температуру, если она ниже минимальной то выводим ошибку.
      SERIAL_ERROR_START;
      SERIAL_ERRORLNPGM(MSG_TOO_COLD_FOR_M600);
      return;
    }

    float lastpos[NUM_AXIS], fr60 = feedrate / 60;  //запоминаем позицию и тукущую подачу.

    for (int i = 0; i < NUM_AXIS; i++)
      lastpos[i] = destination[i] = current_position[i];

    #if ENABLED(DELTA)
      #define RUNPLAN calculate_delta(destination); \
                      plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], fr60, active_extruder);
    #else
      #define RUNPLAN line_to_destination();
    #endif

    //retract by E
    if (code_seen('E')) destination[E_AXIS] += code_value();
    #ifdef FILAMENTCHANGE_FIRSTRETRACT
      else destination[E_AXIS] += FILAMENTCHANGE_FIRSTRETRACT;
    #endif

    RUNPLAN;

    //lift Z
    if (code_seen('Z')) destination[Z_AXIS] += code_value();
    #ifdef FILAMENTCHANGE_ZADD
      else destination[Z_AXIS] += FILAMENTCHANGE_ZADD;
    #endif

    RUNPLAN;

    //move xy
    if (code_seen('X')) destination[X_AXIS] = code_value();
    #ifdef FILAMENTCHANGE_XPOS
      else destination[X_AXIS] = FILAMENTCHANGE_XPOS;
    #endif

    if (code_seen('Y')) destination[Y_AXIS] = code_value();
    #ifdef FILAMENTCHANGE_YPOS
      else destination[Y_AXIS] = FILAMENTCHANGE_YPOS;
    #endif

    RUNPLAN;

    LCD_ALERTMESSAGEPGM("Выгрузка прутка !");
    if (code_seen('L')) destination[E_AXIS] += code_value();
    #ifdef FILAMENTCHANGE_FINALRETRACT
      else destination[E_AXIS] += FILAMENTCHANGE_FINALRETRACT;
    #endif

    RUNPLAN;

    //finish moves
    st_synchronize();

    
 LCD_ALERTMESSAGEPGM("Пруток вставлен ?");
    millis_t next_tick = 0;
    while (!lcd_clicked()) { 
      millis_t ms = millis();
      if (ms >= next_tick) {
      lcd_quick_feedback();
      next_tick = ms + 1000; //
      }
        manage_heater();
        manage_inactivity(true);
        lcd_update(); 
    }
  
    //disable extruder steppers so filament can be removed
    disable_e0();
    disable_e1();
    disable_e2();
    disable_e3();
    delay(300);
    
    #if ENABLED(AUTO_FILAMENT_CHANGE)
      current_position[E_AXIS] = 0;
      st_synchronize();
    #endif
    
    LCD_ALERTMESSAGEPGM("Загузка прутка !"); 
    //return to normal
    if (code_seen('L')) destination[E_AXIS] -= code_value();
    #ifdef FILAMENTCHANGE_FINALRETRACT
      else destination[E_AXIS] -= FILAMENTCHANGE_FINALRETRACT;
    #endif

    next_tick = 0; 
    while (!lcd_clicked()) {  
        current_position[E_AXIS] += AUTO_FILAMENT_CHANGE_LENGTH;
        destination[E_AXIS] = current_position[E_AXIS];
        line_to_destination(AUTO_FILAMENT_CHANGE_FEEDRATE);
        st_synchronize();
    }
    lcd_quick_feedback(); // click sound feedback
    
  //  lcd_reset_alert_level();

    #if ENABLED(DELTA)
      // Move XYZ to starting position, then E
      calculate_delta(lastpos);
      plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], fr60, active_extruder);
      plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], lastpos[E_AXIS], fr60, active_extruder);
    #else

    LCD_ALERTMESSAGEPGM("Продолжаем печатать");
    
      // Move XY to starting position, then Z, then E
      destination[X_AXIS] = lastpos[X_AXIS];
      destination[Y_AXIS] = lastpos[Y_AXIS];
      line_to_destination();
      destination[Z_AXIS] = lastpos[Z_AXIS];
      line_to_destination();
      current_position[E_AXIS] = lastpos[E_AXIS];
      st_synchronize();
    #endif

    #if ENABLED(FILAMENT_RUNOUT_SENSOR)
      filrunoutEnqueued = false;
    #endif

  }
Вот получилось оочень удобно.

Аватара пользователя
AKDZG
Сообщения: 2201
Зарегистрирован: 17 окт 2015, 10:00
Имя: Алексей
Откуда: Иркутск
Благодарил (а): 21 раз
Поблагодарили: 76 раз

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение AKDZG » 24 янв 2016, 15:49

antonkopa писал(а): А в файле marlin_main.cpp нужно заменить кусок функции М600
Не нашёл у себя такого куска вообще :? Видимо его нужно добавить. В любом месте?
Ultimaker Original
Mendel90
СПринтер 233

antonkopa
Сообщения: 145
Зарегистрирован: 09 дек 2015, 20:51
Имя: антон
Поблагодарили: 2 раза
Контактная информация:

Re: Прошивка Marlin. Задаём вопросы, углубляемся в дебри, делимся находками

Непрочитанное сообщение antonkopa » 24 янв 2016, 16:18

Нет я его тоже не сразу нашел, через ctrl+f и в строку поиска вставить #if ENABLED(FILAMENTCHANGEENABLE)
У меня это 5284 строка

Последняя редакция (пауза после прокачки нового пластика, что б не ехал к модели с кучей пластика)

Код: Выделить всё


#if ENABLED(FILAMENTCHANGEENABLE)  // Смена нити

  /**
   * M600: Pause for filament change
   *
   *  E[distance] - Retract the filament this far (negative value)
   *  Z[distance] - Move the Z axis by this distance
   *  X[position] - Move to this X position, with Y
   *  Y[position] - Move to this Y position, with X
   *  L[distance] - Retract distance for removal (manual reload)
   *
   *  Default values are used for omitted arguments.
   *
   */
  inline void gcode_M600() {

    if (degHotend(active_extruder) < extrude_min_temp) {  // Проверяем температуру, если она ниже минимальной то выводим ошибку.
      SERIAL_ERROR_START;
      SERIAL_ERRORLNPGM(MSG_TOO_COLD_FOR_M600);
      return;
    }

    float lastpos[NUM_AXIS], fr60 = feedrate / 60;  //запоминаем позицию и тукущую подачу.

    for (int i = 0; i < NUM_AXIS; i++)
      lastpos[i] = destination[i] = current_position[i];

    #if ENABLED(DELTA)
      #define RUNPLAN calculate_delta(destination); \
                      plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], fr60, active_extruder);
    #else
      #define RUNPLAN line_to_destination();
    #endif

    //retract by E
    if (code_seen('E')) destination[E_AXIS] += code_value();
    #ifdef FILAMENTCHANGE_FIRSTRETRACT
      else destination[E_AXIS] += FILAMENTCHANGE_FIRSTRETRACT;
    #endif

    RUNPLAN;

    //lift Z
    if (code_seen('Z')) destination[Z_AXIS] += code_value();
    #ifdef FILAMENTCHANGE_ZADD
      else destination[Z_AXIS] += FILAMENTCHANGE_ZADD;
    #endif

    RUNPLAN;

    //move xy
    if (code_seen('X')) destination[X_AXIS] = code_value();
    #ifdef FILAMENTCHANGE_XPOS
      else destination[X_AXIS] = FILAMENTCHANGE_XPOS;
    #endif

    if (code_seen('Y')) destination[Y_AXIS] = code_value();
    #ifdef FILAMENTCHANGE_YPOS
      else destination[Y_AXIS] = FILAMENTCHANGE_YPOS;
    #endif

    RUNPLAN;

    LCD_ALERTMESSAGEPGM("Выгрузка прутка !");
    if (code_seen('L')) destination[E_AXIS] += code_value();
    #ifdef FILAMENTCHANGE_FINALRETRACT
      else destination[E_AXIS] += FILAMENTCHANGE_FINALRETRACT;
    #endif

    RUNPLAN;

    //finish moves
    st_synchronize();

    LCD_ALERTMESSAGEPGM("Пруток вставлен ?");
    millis_t next_tick = 0;
    while (!lcd_clicked()) { 
      millis_t ms = millis();
      if (ms >= next_tick) {
      lcd_quick_feedback();
      next_tick = ms + 1000; //
      }
        manage_heater();
        manage_inactivity(true);
        lcd_update(); 
    }
  
    //disable extruder steppers so filament can be removed
    disable_e0();
    disable_e1();
    disable_e2();
    disable_e3();
    delay(300);
    
    #if ENABLED(AUTO_FILAMENT_CHANGE)
      current_position[E_AXIS] = 0;
      st_synchronize();
    #endif
    
    LCD_ALERTMESSAGEPGM("Загрузка прутка !"); 
    //return to normal
    if (code_seen('L')) destination[E_AXIS] -= code_value();
    #ifdef FILAMENTCHANGE_FINALRETRACT
      else destination[E_AXIS] -= FILAMENTCHANGE_FINALRETRACT;
    #endif

    next_tick = 0; 
    while (!lcd_clicked()) {  
        current_position[E_AXIS] += AUTO_FILAMENT_CHANGE_LENGTH;
        destination[E_AXIS] = current_position[E_AXIS];
        line_to_destination(AUTO_FILAMENT_CHANGE_FEEDRATE);
        st_synchronize();
    }
    lcd_quick_feedback(); // click sound feedback
    
    LCD_ALERTMESSAGEPGM("Продолжаем печатать?");
    delay(300);
    next_tick = 0;
    while (!lcd_clicked()) { 
      millis_t ms = millis();
      if (ms >= next_tick) {
      lcd_quick_feedback();
      next_tick = ms + 1000; //
      }
        manage_heater();
        manage_inactivity(true);
        lcd_update(); 
    }
    
    lcd_reset_alert_level();
    #if ENABLED(DELTA)
      // Move XYZ to starting position, then E
      calculate_delta(lastpos);
      plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], fr60, active_extruder);
      plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], lastpos[E_AXIS], fr60, active_extruder);
    #else

      // Move XY to starting position, then Z, then E
      destination[X_AXIS] = lastpos[X_AXIS];
      destination[Y_AXIS] = lastpos[Y_AXIS];
      line_to_destination();
      destination[Z_AXIS] = lastpos[Z_AXIS];
      line_to_destination();
      current_position[E_AXIS] = lastpos[E_AXIS];
      st_synchronize();
    #endif

    #if ENABLED(FILAMENT_RUNOUT_SENSOR)
      filrunoutEnqueued = false;
    #endif

  }

#endif // FILAMENTCHANGEENABLE


Ответить

Вернуться в «3D принтеры и 3D печать»

Яндекс.Метрика