Страница 1 из 104

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

Добавлено: 24 окт 2015, 10:19
AKDZG

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

Добавлено: 17 дек 2015, 14:47
AKDZG
Перенёс сообщения по дисплеям в отдельную тему "Вопросы по дисплеям для 3D принтеров"

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

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

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

Добавлено: 17 дек 2015, 16:42
AKDZG
VolandZel писал(а):какой параметр в прошивке влияет на максимальную температуру стола?
Здравствуйте!

#define BED_MAXTEMP 150

Возможно через Repetier Host можно поменять. Я не пробовал.

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

Добавлено: 24 дек 2015, 11:57
metal
Помойму только прошивку править... В еепром таких параметров не нашел... Правил прошивку на своем ваньке, чтоб стол до 150, сопло до 290 можно было греть
Впрочем может плохо искал)

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

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

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

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

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

Добавлено: 25 дек 2015, 09:22
VolandZel
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-код случайно такую команду нельзя отправить, на замену максимальной температуры?

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

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

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

Добавлено: 25 дек 2015, 14:59
AKDZG
Скидывайте сюда скриншоты параметров прошивки из Repetier Host и фотографию принтера припаркованного в положении HOME. Я предварительно настрой вам прошивку.

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

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

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

Добавлено: 24 янв 2016, 10:00
antonkopa
И так до чего я дошел ))

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

//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

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

Добавлено: 24 янв 2016, 15:21
antonkopa
Товарищ 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

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

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

Добавлено: 24 янв 2016, 15:49
AKDZG
antonkopa писал(а): А в файле marlin_main.cpp нужно заменить кусок функции М600
Не нашёл у себя такого куска вообще :? Видимо его нужно добавить. В любом месте?

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

Добавлено: 24 янв 2016, 16:18
antonkopa
Нет я его тоже не сразу нашел, через 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