forum_zima

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

Строим 3D принтеры, печатаем, делимся опытом, помогаем новичкам
Аватара пользователя
AKDZG
Сообщения: 1645
Зарегистрирован: 17 окт 2015, 10:00
Имя: Алексей
Откуда: Иркутск

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

Сообщение AKDZG » 24 окт 2015, 10:19

Последний раз редактировалось AKDZG 24 янв 2016, 08:50, всего редактировалось 1 раз.
Рекомендую указывать в подписи название 3D принтера и электроники

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

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

Сообщение AKDZG » 17 дек 2015, 14:47

Перенёс сообщения по дисплеям в отдельную тему "Вопросы по дисплеям для 3D принтеров"
Рекомендую указывать в подписи название 3D принтера и электроники

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

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

Сообщение VolandZel » 17 дек 2015, 16:36

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

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

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

Сообщение AKDZG » 17 дек 2015, 16:42

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

Здравствуйте!

#define BED_MAXTEMP 150

Возможно через Repetier Host можно поменять. Я не пробовал.
Рекомендую указывать в подписи название 3D принтера и электроники

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

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

Сообщение metal » 24 дек 2015, 11:57

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

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

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

Сообщение VolandZel » 24 дек 2015, 13:33

metal писал(а):Правил прошивку на своем ваньке, чтоб стол до 150

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

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

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

Сообщение AKDZG » 24 дек 2015, 15:26

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

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

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
Сообщения: 1645
Зарегистрирован: 17 окт 2015, 10:00
Имя: Алексей
Откуда: Иркутск

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

Сообщение AKDZG » 25 дек 2015, 14:32

Попробуйте плёнку Ломонд из этой статьи http://3deshnik.ru/blogs/akdzg/ot-klass ... ya-pechati
Пиво лучше лака не будет держать.
VolandZel писал(а):А через G-код случайно такую команду нельзя отправить, на замену максимальной температуры?

Так они все через G-код отправляются при печати, только прошивка следит за ограничениями. Так что придётся в прошивке разбираться. Основные параметры нужно переписать из Repetier. Термисторы скорее всего типа "1". Останется только с концевиками разобраться и правильным направлением вращения двигателей.
Рекомендую указывать в подписи название 3D принтера и электроники

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

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

Сообщение AKDZG » 25 дек 2015, 14:59

Скидывайте сюда скриншоты параметров прошивки из Repetier Host и фотографию принтера припаркованного в положении HOME. Я предварительно настрой вам прошивку.
Рекомендую указывать в подписи название 3D принтера и электроники

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

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

Сообщение antonkopa » 24 янв 2016, 08:39

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

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

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
Сообщения: 124
Зарегистрирован: 09 дек 2015, 20:51
Имя: антон
Контактная информация:

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
Сообщения: 1645
Зарегистрирован: 17 окт 2015, 10:00
Имя: Алексей
Откуда: Иркутск

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

Сообщение AKDZG » 24 янв 2016, 15:49

antonkopa писал(а):Источник цитаты А в файле marlin_main.cpp нужно заменить кусок функции М600

Не нашёл у себя такого куска вообще :? Видимо его нужно добавить. В любом месте?
Рекомендую указывать в подписи название 3D принтера и электроники

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

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 принтеры»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость