Кремень FMZ Реклама
Kremen FMHM Реклама

Постройка D-bot или страх и ненависть своими руками. Часть 2 - разбираемся с прошивкой

maniak26
Идет загрузка
Загрузка
23.09.2016
24354
53
RepRap

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

41
Статья относится к принтерам:
RepRap Anet A8
Часть 0, Часть 1, Часть 1.5.
Постройка D-bot или страх и ненависть своими руками. Часть 2 - разбираемся с прошивкой
У нас было: 5 DRV8825, Ramps 1.4 + Arduino mega, RepRapDiscount Full Graphic Smart Controller, 6 упаковок концевиков, пол-ведра шаговиков nema17 , пара греющих столов, целое множество проводов и коннекторов всех сортов и расцветок, дисплеи Anet A8 и A6, а так же 2 одинаковых Anet V1.0 (одна из которых якобы V 2.0). Не то чтобы это был необходимый запас для работы двух принтеров. Но если уже собрал всю механику, становится трудно на этом остановиться. Единственное что вызывало у меня опасение - дисплеи и платы Anet. Нет ничего более беспощадного, безответственного и аморального, чем прикручивание к нормальному софту железа без документации, но я знал, что рано или поздно мы прошьем эту дрянь.

Так как это первый опыт сборки прошивки, то и описание пойдет с позиции нуба с опытом мигания светодиодом на arduino за плечами. Поехали.

На самом деле в оригинальном проекте уже присутствует собранный Marlin, но использовать его без изменений было бы не спортивно да и не получится - у нас длиннее ось Х =). А раз и так и так придется ее редактировать, то и в сборке с нуля стоит разобраться. Все равно дальше большие планы - как минимум автоуровень на тензорезисторах и второй экструдер.

Marlin как основа выбран потому что для Anet A8 есть работающая сборка SkyNet3d, плюс если что-то будет непонятно, можно подглядывать в готовую прошивку. Еще есть официальный wiki и замечательнейшие статьи по заливке и настройке Marlin на русском языке.

Для D-bot с платой и дисплеем от А8 как основу прошивки берем SkyNet3d Firmware, для D-bot с ramps чистый Marlin последней стабильной версии.

Чтобы не путаться - если не подписано для какой платы именно действие, то значит нужно делать на любой. Если что-то различается, то будет отдельное указание платы.

Для платы/дисплея Anet A8:

Для корректной работы SkyNet3d Firmware лучше использовать Arduino IDE идущую в комплекте с прошивкой - она уже настроена и содержит нужные библиотеки.

Для ramps:

Выбираем нужную плату и процессор:

Инструменты -> Плата -> Arduino/Genuino Mega

Инструменты -> Процессор -> ATmega 2560

После этого запускаем проверку сборки проекта. Собрался - значит все сделали верно. Теперь можно беспощадно затирать все копирайты и выдавать принтер за отечественную разработку с уникальным софтом подгонять прошивку под наши принтеры. Начнем:

тип платы:

Anet A8:

оставляем как есть

#ifndef MOTHERBOARD

#define MOTHERBOARD 63 // 63 = Melzi

#endif



Ramps 1.4:


#ifndef MOTHERBOARD

#define MOTHERBOARD BOARD_RAMPS_13_EFB // RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Bed)

#endif



Кинематика:



#define COREXY

Термисторы:

Anet A8:

оставляем как есть

#define TEMP_SENSOR_0 501 // термистор экструдера 1

#define TEMP_SENSOR_1 0

#define TEMP_SENSOR_2 0

#define TEMP_SENSOR_BED 501 // термистор стола

Ramps 1.4:

#define TEMP_SENSOR_0 5

#define TEMP_SENSOR_1 0

#define TEMP_SENSOR_2 0

#define TEMP_SENSOR_BED 5

- Значения соответствий сопротивления/температуры хранятся в termistortables.h. На вскидку, больше хочется верить той таблице, что сделана для Anet A8 (по крайней мере у разработчика такие же китайские термисторы).

Но делать этого мы не будем и в одной из следующих статей соберем свою таблицу для термистора.

К примеру, плата была уверена что температура стола 105 градусов:
Постройка D-bot или страх и ненависть своими руками. Часть 2 - разбираемся с прошивкой


Калибровка PID экструдера:


Значения можно не менять. Лучше запустить автокалибровку PID, и уже полученные значения вписать вместо стандартных:

#define DEFAULT_Kp 20.37

#define DEFAULT_Ki 1.21

#define DEFAULT_Kd 85.47

калибровка запускается через gcode

M303 E0 C10 S250

где: E0 – хотэнд, C10 – количество попыток, S250 – температура.

По результатам в консоль прилетят рекомендуемые коэффициенты.

Управление столом:



Нагрев столов у нас запитан через автомобильное реле (о том как это сделать есть замечательная статья).
Постройка D-bot или страх и ненависть своими руками. Часть 2 - разбираемся с прошивкой
Чтоб оно не превращалось в трещотку на все время печати, меняем алгоритм управления с PID на Bang-Bang:

комментируем строку (добавляем // в начале строки)

//#define PIDTEMPBED

и снимаем комментарий

#define BED_LIMIT_SWITCHING

- теперь стол издает щелчок раз в 2-3 минуты, вполне терпимо



Концевики:


для обоих принтеров комментируем эту конструкцию, т.к. у нас всть концевики в MAX позиции

//#if defined(COREXY) && !defined(DISABLE_MAX_ENDSTOPS)

// #define DISABLE_MAX_ENDSTOPS

//#endif

Указываем что у нас по оси Y концевик находится в MAX положении (иначе после поступления команды auto-home каретка поедет по Y в другую сторону от концевика).

// ENDSTOP SETTINGS:

// Sets direction of endstops when homing; 1=MAX, -1=MIN

#define X_HOME_DIR -1

#define Y_HOME_DIR 1

#define Z_HOME_DIR -1

Движения по осям:

Ускорения, скорости пока в процессе подбора. Актуальные значения смотрите на google drive для Anet A8 и на github для ramps.

Инверсии движения по осям у нас нет:

#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true

#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false

#define INVERT_Z_DIR false // for Mendel set to false, for Orca set to true

Задаем расстояние между минимумом и максимумом осей:

#define X_MAX_POS 300

#define X_MIN_POS 0

#define Y_MAX_POS 300

#define Y_MIN_POS 0

#define Z_MAX_POS 325

#define Z_MIN_POS 0

Количество шагов на 1 мм перемещения:

Здесь у нас есть сильные различия. Во-первых на плате Anet V1.0 впаяны драйверы A4988 на 1/16 микрошага, а на Ramps 1.4 стоят DRV8825 с 1/32. Этим объясняются различие в 2 раза значений для осей X, Y и экструдера. Во-вторых для оси Z значения еще больше разнятся - на принтере с платой Anet V1.0 стоят шпильки М8, на другом - М5. Количество шагов на 1 мм перемещения можно легко посчитать используя этот замечательный калькулятор или по формуле: [Кол-во шагов за оборот ШД (обычно 200)] * [количество микрошагов] / [шаг резьбы].

в общем виде команда выглядит так:

DEFAULT_AXIS_STEPS_PER_UNIT {Х, У, Z, Extruder}

Anet A8:

#define DEFAULT_AXIS_STEPS_PER_UNIT {100, 100, 200*16/1.25, 90}

Ramps 1.4 c DRV8825:

#define DEFAULT_AXIS_STEPS_PER_UNIT {200,200,8000.00,180} // default steps per unit for Ultimaker

Дисплей:

В прошивке SkyNet3d уже все настроено на работу с дисплеем от Anet A8, менять ничего не нужно.

Ramps 1.4:

по RepRap wiki дисплей был опознан как REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER, снимаем комментарий перед соответствующим define в прошивке:

#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

не забываем при этом установить библиотеку u8glib в Arduio IDE.

Пытаемся собрать проект прошивки и ловим хорошо известную ошибку 'using typedef-name 'fpos_t' after 'struct''. Суть ее в следующем - в исходном тексте прошивки объявлен тип fpos_t, который уже используется Arduino IDE. Решение до банального просто - все всем проекте меняем fpos_t на кто-нибудь типа fpos_t1. Сделать это надо в файлах: SdBaseFile.cpp, SdBaseFile.h. После замены еще раз проверить проект, если еще где-то вылезет - тоже поменять.

В новых версиях прошивки эту проблему уже решили. Так что после выхода новой стабильной версии надобность в этом пункте отпадет.

После загрузки прошивки наткнулся на интересную особенность - энкодер работал в обратном направлении. Лечится это просто - в файле pins.h меняем местами выводы, которые отвечают за срабатывание энкодера:

#define BTN_EN1 33

#define BTN_EN2 31

Загружаем прошивку в принтер, немного ждем, много волнуемся... Работает!

Ссылки:

Anet A8:

конфигурационный файл для D-botоригинальная прошивка SkyNet3d для принтера Anet A8заменяем Configuration.h из оригинальной прошивки на представленный, заливаем в принтер с помощью Arduino IDE из комплекта - работает!

Marlin для D-bot RampsЧтобы скачать выбираем ветку d-bot_devel
Постройка D-bot или страх и ненависть своими руками. Часть 2 - разбираемся с прошивкой
нажимаем Clone or download -> Download zip
Постройка D-bot или страх и ненависть своими руками. Часть 2 - разбираемся с прошивкой
заливается в Arduino Mega с помощью Arduino IDE последней версии.

P.S. для Anet V1.0 возможно понадобится драйвер, брать тут.

Владельцам плат и дисплеев Anet A6 советую не отчаиваться, автор прошивки SkyNet3d уже ведет работы по сборке прошивки под ваши девайсы. Как он закончит, адаптировать эту прошивку под D-bot с высокой долей вероятности можно будет по этой инструкции с незначительными изменениями.

Планы на ближайшее будущее:

Распределитель питания, который позволит решить проблему коротких проводов
Постройка D-bot или страх и ненависть своими руками. Часть 2 - разбираемся с прошивкой
Наведение порядка, спрятывание всех проводов, плат по гофрам/кабель-каналам и прочим защитным сооружениям
Постройка D-bot или страх и ненависть своими руками. Часть 2 - разбираемся с прошивкой
Перевод Ramps на 5 Вольт питания, установка Orange Pi PC + Octoprint (с безопасным доступом через интернет по ssl сертификатам). Тестирования возможности контроля питанием ATX бп через ramps и многое многое другое.

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

41
Комментарии к статье