Skip to content
ursoft edited this page Aug 21, 2020 · 40 revisions

Состояние проекта: стабильный Марлин2 с конфигурацией производителя UltiSteel.UART + альфа-версия нескольких оригинальных нововведений, обновлен 20/08/2020 к upstream = MarlinFirmware/Marlin/bugfix-2.0.x.

Список основных оригинальных нововведений

  • Улучшения по работе с флешками:
  1. При вставке внешней флешки сразу предлагает список файлов, самый свежий выделен. В один клик запускается на печать. Включается через #define SD_SHOW_FILES_ON_MEDIA_INSERTED
  2. Поддержана печать с внутренней флешки. Включается через #define SDCARD_CONNECTION LCD_AND_ONBOARD. При этом не закрыт механизм обновления ПО, а сама флешка доступна ПК как USB-диск со скоростью 12Мбит/с (во время печати диск исчезает, от греха подальше, потом возникает вновь). Внешней флешкой (в отличие от режима ONBOARD) тоже можно пользоваться - достаточно ее вставить, и принтер перейдет на работу с ней.
  3. Повтор последней успешной печати. Включается через #define SD_REPRINT_LAST_SELECTED_FILE. Предлагает в один клик напечатать еще раз или скрутить на другой файл. Если включить #define SD_MENU_MEDIA_SHOW_LAST_PRINT_DURATION, то в первой строке списка файлов напишет, сколько длилась предыдущая печать.
  4. Показ длинных имен файлов SD-карты в кириллице. Включается через #define CYRILLIC_FILENAMES. Поддерживается не весь юникод, а только общее между 1251 и юникодом. Изменениями можно пользоваться как в меню принтера, так и в pronterface. Другим программам требуется перекодировка из 1251 в те кодировки, которыми они умеют пользоваться.
  • Улучшения по работе с энкодером:
  1. Двойное/долгое нажатие в окне статуса. Включается через #define LONGCLICK_FOR_IDLE. Исполняет файл long_cli.g или (если нет такого), запускает прогрев на первый материал. Подробный алгоритм см. по ссылке.
  2. Крутилка в окне статуса. Включается через #define FEEDRATE_CHANGE_ONLY_WHILE_PRINT. Если не идет печать, то крутить вправо - показ списка файлов (при отсутствии флешек - меню смены филамента), а влево - пользовательское меню.
  3. Редакторы: более простой доступ к дальним значениям. Включается через #define LEVELING_FADE_HEIGHT_DEFAULT 10 и #define WRAP_EDITORS.
  • Управление кулером обдува COLDEND. По умолчанию SUNON там запитан на выходе для нагревателя второй головы, ШИМ 200 из 255. Это шумно, и (вроде бы) чрезмерно. Можно уменьшить при помощи custom gcode (чтобы у каждого материала был свой вариант). Включать при помощи #define EXTRUDER_AUTO_FAN_SPEED_CONFIGURABLE. Появляется команда M106 P1 S100, где 1 - это индекс первого незанятого в прошивке кулера (0 занят кулером обдува детали), а 100 - значение ШИМ. На этом значении я печатаю PLA FDPLAST, забивания экструдера не наблюдается, кулер же ощутимо тише шумит, чем на ШИМ 200.
  • Сохранение режима MBL в EEPROM. Если выключить в меню или не настроить карту, высоту отмены - MBL включен не будет. Если включить, настроить и сохранить в EEPROM - будет работать, не требуя от слайсера команды M420 S1 (в этом отличие от оригинального марлина - я бы оборвал тамошним программистам руки за такое неадекватное требование при наличии в меню опции включения и сохранения, но может они просто опытнее меня в этом вопросе). В режиме 12864 стол теперь тоже мигает при включенной коррекции.
  • Более аккуратная парковка после прерывания печати.
  • Инверсия подсветки командой M355 T.
  • Улучшения графического интерфейса пользователя:
  1. 12864: сохранение пользовательского цвета в EEPROM. Включается через #define NEOPIXEL_EEPROM_STORE_HACK. Также можно задать #define NEOPIXEL_SAVING_TIMEOUT 120 для перехода в режим энергосбережения после двухминутного таймаута (дисплей сам отключится при неактивности, обратно включится от энкодера). В режиме энергосбережения крайний светодиод дисплея будет мигать. M150 теперь принимает новый параметр с именем I (к августу 2020 его добавили и в оригинальный Марлин). Если его не указать, цвет подсветки дисплея меняться не будет (только остальных светодиодов). Если указать I без номера, то наоборот, будут меняться сразу все цвета светодиодов. Ну и наконец, указание 0...3 позволяет выбирать светодиод: 0-подсветка экрана, 1-левый светодиод энкодера, 2-правый светодиод энкодера, 3-псевдосветодиод (позволяет гасить предыдущие).
  2. Показ состояния концевиков в главном окне. Включается через #define LCD_SHOW_ENDSTOPS_STATUS. Если датчик сработал, то во второй строке главного окна буква его оси (xyz) будет в нижнем регистре. Сразу все видно, не нужно запускать M119.
  3. 12864: Иконка SD-карты более информативная. Включается через #define DOGM_SD_PRESENT. Видно, вставлена ли карта (значок есть), куда вставлена (в материнку или в дисплейный модуль - размер и положение значка), смонтирована ли она принтером (значок не мигает), используется ли в данный момент для печати (внутри значка мигает полоска).
  4. 12864: Заполнены пустоты экрана. Включается через #define DOGM_SHOW_SPEED, #define DOGM_SHOW_LAYER, #define DOGM_SHOW_PERF. Первый включает показ скорости, второй - номер слоя и количество слоёв (считанные с SD-карты, если есть) и третий показывает 2 прогресса: уровень заполнения буфера планировщика движений и диапазон загрузки процессора между перерисовками дисплея (первая половина индикатора - до 5 мс, вторая - до 30 мс на итерацию цикла idle).
  5. Ручная калибровка стола по 3 точкам. Включается через #define LEVEL_CORNERS_3POINT. В UserMenu также доступен ее аналог, построенный на чистом gcode.
  6. 12864: Фирменная заставка ULTI. Анимированная с повышением яркости.
  7. PID стола - редактируется и запускается из меню. Искать там же, где и PID экструдеров. К августу 2020 в Марлине таки доработали меню.

Список включенных (по сравнению со стоковой прошивкой) опций

Включил все возможности Марлина, которые я счел интересными и работающими. Список получился очень длинный, см. в запросах или прямо в истории изменения исходников. Если какие-то окажутся спорными, то их включение отнесу в свою личную конфигурацию.

Исправление ошибок в самом Марлине:

  1. Порча памяти в меню "движение по Z". Кириллическая прошивка, повышенная точность перемещений приводят к переполнению буфера.
  2. Потеря точности вычислений при использовании датчика стола. К августу 2020 в Марлине изменили алгоритм и эта правка устарела.

Как пользователю получить некоторые функции из этого репозитория в свой форк Марлина?

Идеально было бы добавить имеющийся здесь функционал в основной репозиторий Марлина. От pull request меня удерживает понимание того факта, что универсальность моих изменений достаточна для меня, но недостаточна для всех (и будь я на месте разработчиков Марлина, я бы не был рад изменениям в том виде, как они представлены тут). Если кто-то проведет такую работу и в итоге мои наработки окажутся где-то еще, буду очень рад. А я лишь приведу перечень действий по упрощению переноса моих коммитов в Ваш форк (предполагается, что у Вас уже настроена рабочая копия и Вы уже делали commit и push в него при помощи консольного клиента git, статус рабочей копии = clean):

  1. Добавить мой репозиторий в список внешних источников (remotes) с именем ursoft (однократное действие): git remote add ursoft https://github.com/ursoft/Marlin.git команда ничего не должна выдать
  2. Вытащить с гитхаба мои правки (если нужные не были получены ранее): git fetch ursoft
  3. Найти идентификаторы всех моих коммитов, составляющих нужную функцию. Далее будем разбирать пример про кулер обдува колдэнда. Сходив в этот запрос, получаем список коммитов: { f959c57, d3a8ba5 }, отсортированный по дате. Выполняем для каждого git cherry-pick:

>git cherry-pick f959c57

error: could not apply f959c57... fix #2

hint: after resolving the conflicts, mark the corrected paths

hint: with 'git add <paths>' or 'git rm <paths>'

hint: and commit the result with 'git commit'

В моем случае случился конфликт - git не смог автоматически разрешить пару мест, решаю самостоятельно следующим образом: в Marlin\Configuration_adv.h место конфликта

<<<<<<< HEAD

#define EXTRUDER_AUTO_FAN_SPEED 255 // 255 == full speed

#define CHAMBER_AUTO_FAN_TEMPERATURE 30

#define CHAMBER_AUTO_FAN_SPEED 255

=======

#define EXTRUDER_AUTO_FAN_SPEED 200 // 255 == full speed

#define EXTRUDER_AUTO_FAN_SPEED_CONFIGURABLE

//#define CHAMBER_AUTO_FAN_TEMPERATURE 30

//#define CHAMBER_AUTO_FAN_SPEED 255

>>>>>>> f959c57... fix #2

превращаю в

#define EXTRUDER_AUTO_FAN_SPEED 200 // 255 == full speed

#define EXTRUDER_AUTO_FAN_SPEED_CONFIGURABLE

//#define CHAMBER_AUTO_FAN_TEMPERATURE 30

//#define CHAMBER_AUTO_FAN_SPEED 255

а в Marlin\src\inc\SanityCheck.h место

<<<<<<< HEAD

#if HAS_AUTO_FAN && EXTRUDER_AUTO_FAN_SPEED != 255 && DISABLED(NO_COMPILE_TIME_PWM)

#define AF_ERR_SUFF "_AUTO_FAN_PIN is not a PWM pin. Set EXTRUDER_AUTO_FAN_SPEED to 255."

=======

#if HAS_AUTO_FAN && (EXTRUDER_AUTO_FAN_SPEED != 255 || ENABLED(EXTRUDER_AUTO_FAN_SPEED_CONFIGURABLE))

#define AF_ERR_SUFF "_AUTO_FAN_PIN is not a PWM pin. Set EXTRUDER_AUTO_FAN_SPEED to 255 and disable EXTRUDER_AUTO_FAN_SPEED_CONFIGURABLE."

>>>>>>> f959c57... fix #2

превращаю в

#if HAS_AUTO_FAN && (EXTRUDER_AUTO_FAN_SPEED != 255 || ENABLED(EXTRUDER_AUTO_FAN_SPEED_CONFIGURABLE)) && DISABLED(NO_COMPILE_TIME_PWM)

#define AF_ERR_SUFF "_AUTO_FAN_PIN is not a PWM pin. Set EXTRUDER_AUTO_FAN_SPEED to 255 and disable EXTRUDER_AUTO_FAN_SPEED_CONFIGURABLE."

После git add Marlin\Configuration_adv.h, git add Marlin\src\inc\SanityCheck.h и git commit -m "ursoft#2 part1" продолжаю git cherry-pick d3a8ba5 - без конфликтов, поэтому правки и коммит не нужны. В Вашем случае может не быть конфликтов вовсе, или они будут другими - для их исправления могут понадобиться знания истории изменения Марлина, Си++ итд.