roboforum.ru

Технический форум по робототехнике.

3D принтер. Прошивка Marlin, оптимизация.

Обсуждение технологии печати на 3D принтерах. Самостоятельное изготовление и приобретение. RepRap и его последователи.

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение romankr » 22 июл 2015, 17:40

приветствую. Может кто поможет. Marlin ветка Development.
после старта печати с SD, греет стол, затем голову, и начинает печатать, во время печати стол начинает остывать вплоть до сообщений THERMAL_RUNAWAY_PROTECTION.
Светодиод на столе горит. Понять не как не могу - в железе проблемы или это "фича" Marlin'a.
//#define PIDTEMPBED
//#define DEB_LIMIT_SWITCHING

upd.
Кажется нашёл. в старт г-коде было
M109 S220 B225 F0.2 ; set autotemp
и это как то влияет на температуру стола.
Пока удалил.
romankr
 
Сообщения: 8
Зарегистрирован: 17 июл 2015, 13:43

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение unigenum » 19 авг 2015, 19:29

Объясните, пожалуйста, по-русски значение параметров
#define DEFAULT_MAX_ACCELERATION
#define DEFAULT_ACCELERATION

я понимаю, что это параметры ускорений и на практике могу видеть разницу при изменении DEFAULT_ACCELERATION
а вот зачем тогда DEFAULT_MAX_ACCELERATION?
в комментариях в прошивке в обоих случая говорится, что это некие максимальные величины.
а зачем 2 раза определяются максимумы?
unigenum
 
Сообщения: 705
Зарегистрирован: 29 окт 2012, 13:55
Откуда: СПб

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение setar » 20 авг 2015, 12:47

какой правильный вопрос!
сначала начал отвечать, а потом задумался и полез в код :)
не поверите эта переменнаяконстата в коде применяется всего в двух местах :
1. в конфиге
2. сохранение конфига в EEPROM

пожалуй стоит адресовать этот вопрос репозитарий менеджерам - дирижерам сообщества разработчиков
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение Scald » 20 авг 2015, 16:15

Какая прелесть...
Scald
 
Сообщения: 267
Зарегистрирован: 21 авг 2014, 21:00

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение dccharacter » 20 авг 2015, 17:55

А никто не пробовал прогнать прошивку через статический анаизатор?
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение holomrn » 20 авг 2015, 18:00

pvss там просто с ума сходит от качества кода.
holomrn
 
Сообщения: 609
Зарегистрирован: 08 май 2014, 18:32

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение Kudesnik » 23 авг 2015, 22:42

setar писал(а):какой правильный вопрос!
сначала начал отвечать, а потом задумался и полез в код :)
не поверите эта переменнаяконстата в коде применяется всего в двух местах :
1. в конфиге
2. сохранение конфига в EEPROM

пожалуй стоит адресовать этот вопрос репозитарий менеджерам - дирижерам сообщества разработчиков


Константа может и применяется в двух местах, но сами данные (значения), которые задаются в DEFAULT_MAX_ACCELERATION, применяются и в других местах.
Так после записи DEFAULT_MAX_ACCELERATION в EEPROM, происходит считывание этих данных в переменную axis_steps_per_sqr_second, и далее применяется уже не константа DEFAULT_MAX_ACCELERATION, а переменная axis_steps_per_sqr_second.


На сколько я понял, получается так
<текущее ускорение> = DEFAULT_ACCELERATION
если ( <текущее ускорение> * <кол-во необходимых шагов для текущей оси> / <максимальное кол-во шагов из всех осей> ) больше axis_steps_per_sqr_second
то <текущее ускорение> = axis_steps_per_sqr_second

По простому: по умолчанию берется ускорение DEFAULT_ACCELERATION, как только ускорение по оси становиться больше DEFAULT_MAX_ACCELERATION, то устанавливается DEFAULT_MAX_ACCELERATION
Смотреть, не значит видеть!!!
Аватара пользователя
Kudesnik
 
Сообщения: 24
Зарегистрирован: 23 янв 2014, 14:17

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение unigenum » 24 авг 2015, 05:09

не совсем понятно...
DEFAULT_ACCELERATION конкретно задано и прокомментировано, как максимальная величина.
а текущее ускорение может быть меньше или равно этой максимальной величины.
и изменение этой величины реально заметно при печати, видно, как изменились ускорения и движения становятся плавнее.
и DEFAULT_MAX_ACCELERATION тоже определяет какой-то максимум. но на практике никаких изменений вообще не заметно, будь там 100 или 10000.

у меня EEPROM вообще закомментировано в прошивке, получается туда ничего не записывается и не читается. значит DEFAULT_MAX_ACCELERATION не работает?
unigenum
 
Сообщения: 705
Зарегистрирован: 29 окт 2012, 13:55
Откуда: СПб

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение Kudesnik » 24 авг 2015, 09:57

Если EEPROM закомментирован, то смысл не меняется:
данные из DEFAULT_MAX_ACCELERATION
сначала передаются в переменную max_acceleration_units_per_sq_second,
а затем передаются в переменную axis_steps_per_sqr_second


Теперь, почему DEFAULT_ACCELERATION прокомментирован как МАКСИМАЛЬНАЯ величина, логика такая:

1. Подсчитывается сколько шагов нужно для перемещения по каждой оси, чтобы достичь заданных координат. Полученные шаги записываются в соответсвующие переменные steps_x, steps_y, steps_e, steps_z;
2. Берется максимальное значение шагов из всех осей и записывается в step_event_count;
3. Текущее ускорение acceleration, которое по умолчанию равно DEFAULT_ACCELERATION, для каждой оси умножается на отношение [кол-во шагов]/[МАКС кол-во шагов]
для оси X acceleration * step_x/step_event_count
для оси Y acceleration * step_y/step_event_count
и т.д.

получается, что у каждой оси, есть некий коэффициент ускорения, зависящий от количества шагов по всем осям.

Теперь, удобнее будет на примере понять, допустим:
по оси Х нужно сделать 0 шагов
по оси Y нужно сделать 5 шагов
по оси Z нужно сделать 10 шагов
остальные оси не важно...

тогда:
максимальное количество шагов step_event_count = 10 шагов
коэффициент для оси X = 0 / 10 = 0
коэффициент для оси Y = 5 / 10 = 0.5
коэффициент для оси Z = 10/ 10 = 1

получается:
для оси X - ускорения нет
для оси Y - берется половина ускорения
для оси Z - берется полное ускорение

!!! Вот оно - у оси Z - это МАКСИМАЛЬНОЕ ускорение - больше чем это значение быть не может !!!


4. Далее проверяется, не превышает ли текущее ускорение значение axis_steps_per_sqr_second (то есть DEFAULT_MAX_ACCELERATION):

Допустим:
#define DEFAULT_ACCELERATION 9 // максимальное ускорение по всем осям
#define DEFAULT_MAX_ACCELERATION {5,6,7,8} // X, Y, Z, E максимальная скорость для ускорения

тогда:
axis_steps_per_sqr_second = {5,6,7,8}

Изначально, текущее ускорение равно DEFAULT_ACCELERATION
acceleration = 9

Проверка для оси X
было:
axis_steps_per_sqr_second = 5
acceleration = 9
коэффициент = 0

9 * 0 < 5 - не превысило

стало:
acceleration = 9 - ускорение осталось равным DEFAULT_ACCELERATION

Проверка для оси Y
было:
axis_steps_per_sqr_second = 6
acceleration = 9
коэффициент = 0.5

9 * 0.5 < 6 - не превысило

стало:
acceleration = 9 - ускорение осталось равным DEFAULT_ACCELERATION

Проверка для оси Z
было:
axis_steps_per_sqr_second = 7
acceleration = 9
коэффициент = 1

9 * 1 > 7 - превысило

стало:
acceleration = 7 - ускорение осталось равным DEFAULT_ACCELERATION


Для оси Z ускорение было превышено DEFAULT_MAX_ACCELERATION, и поэтому оно заменилось на значение DEFAULT_MAX_ACCELERATION

То есть DEFAULT_ACCELERATION - это значение для ускорения по умолчанию, больше которого ускорение не станет - это будет максимальное ускорение.

Но при этом есть DEFAULT_MAX_ACCELERATION - которое ставит границы ускорению для каждой оси. И ускорение не будет больше, чем DEFAULT_MAX_ACCELERATION, не смотря на то что по умолчанию заданно большее максимальное значение.

Чтобы почувствовать влияние DEFAULT_MAX_ACCELERATION, нужно изменять DEFAULT_MAX_ACCELERATION так, чтобы DEFAULT_ACCELERATION был всегда больше DEFAULT_MAX_ACCELERATION, так как только при соблюдении такого условия будут применяться значения DEFAULT_MAX_ACCELERATION.
Последний раз редактировалось Kudesnik 31 авг 2015, 23:24, всего редактировалось 2 раз(а).
Смотреть, не значит видеть!!!
Аватара пользователя
Kudesnik
 
Сообщения: 24
Зарегистрирован: 23 янв 2014, 14:17

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение unigenum » 24 авг 2015, 12:58

спасибо за понятный ответ. в принципе я так и предполагал.
одно значение общее для осей, другое кокретно по каждой.
unigenum
 
Сообщения: 705
Зарегистрирован: 29 окт 2012, 13:55
Откуда: СПб

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение unigenum » 28 авг 2015, 19:44

Kudesnik писал(а):То есть DEFAULT_ACCELERATION - это значение для ускорения по умолчанию, больше которого ускорение не станет - это будет максимальное ускорение.

Но при этом есть DEFAULT_MAX_ACCELERATION - которое ставит границы ускорению для каждой оси. И ускорение не будет больше, чем DEFAULT_MAX_ACCELERATION, не смотря на то что по умолчанию заданно большее максимальное значение.

Не могу подтвердить это на практике.

Особенность моего экструдера такова, что двигатель не может отрабатывать высокоскоростной ретракт выше 800мм/сек^2, просто жжикает и не крутится. Выявлено эксперементальным путем и подтверждено многочисленными опытами на любых скоростях.

Без проблем печатает и ретрактит на таких параметрах:
#define DEFAULT_MAX_ACCELERATION {1000,1000,50,1000}
#define DEFAULT_ACCELERATION 800
#define DEFAULT_RETRACT_ACCELERATION 800

Если я хочу увеличить ускорения по Х и У, но не трогать Е, то, следуя вышеприведенной логике, нужно поставить такие параметры:
#define DEFAULT_MAX_ACCELERATION {1500,1500,50,800}
#define DEFAULT_ACCELERATION 2000
#define DEFAULT_RETRACT_ACCELERATION 2000
И при печати получаю пустой вжик вместо ретракта, т.е. ускорение превышает 800мм/сек^2
Вывод: DEFAULT_MAX_ACCELERATION не ограничивает ускорения по каждой из осей, как написано выше.
Или я что-то не правильно понял?
unigenum
 
Сообщения: 705
Зарегистрирован: 29 окт 2012, 13:55
Откуда: СПб

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение Kudesnik » 31 авг 2015, 09:39

Ускорение для ретракта не входит в логику кода, который я описал.
Между собой связанны только DEFAULT_MAX_ACCELERATION и DEFAULT_ACCELERATION.
Именно поэтому наверное и выделили его в отдельный параметр DEFAULT_RETRACT_ACCELERATION

DEFAULT_MAX_ACCELERATION четвертым значением ограничивает ускорение только прямой подачи.


то есть, правильней будет:
#define DEFAULT_MAX_ACCELERATION {1500,1500,50,800}
#define DEFAULT_ACCELERATION 2000
#define DEFAULT_RETRACT_ACCELERATION 800


Если очень нужно, то могу пробежаться еще раз по коду, и выяснить "зависимость" и "влияние" параметра DEFAULT_RETRACT_ACCELERATION
Смотреть, не значит видеть!!!
Аватара пользователя
Kudesnik
 
Сообщения: 24
Зарегистрирован: 23 янв 2014, 14:17

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение unigenum » 31 авг 2015, 12:11

Kudesnik писал(а):Ускорение для ретракта не входит в логику кода
то есть, правильней будет:
#define DEFAULT_MAX_ACCELERATION {1500,1500,50,800}
#define DEFAULT_ACCELERATION 2000
#define DEFAULT_RETRACT_ACCELERATION 800

Если очень нужно, то могу пробежаться еще раз по коду, и выяснить "зависимость" и "влияние" параметра DEFAULT_RETRACT_ACCELERATION

В прошивке в комментарии написано, что RETRACT_ACCELERATION действует на все оси Х У Z E, а не только на Е с ретрактом.
Было бы очень интресно узнать эту "зависимость" и "влияние"
Этот параметр действует только на движение вверх при ретракте или еще при возврате на исходную позицию прямой подачей?
unigenum
 
Сообщения: 705
Зарегистрирован: 29 окт 2012, 13:55
Откуда: СПб

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение Kudesnik » 31 авг 2015, 23:01

Глянул еще раз на код...

Сразу не увидел, оказывается, что коэффициент ускорения, рассчитывается один общий для всех осей.
Подправил предыдущее сообщение, хорошо что исправить еще можно...

Логика такая:

1) Если по осям X,Y,Z не нужно перемещаться (перемещение 0 шагов), то ускорение равно DEFAULT_RETRACT_ACCELERATION
То есть, получается, что раз не перемещаемся, то смысла выдавливать пластик нет, тогда если и будет движение, то только ретракт.

2) Если же хоть по одной из осей X, Y, Z нужно переместиться (шагов > 0), то ускорение рассчитывается так:
1. За текущее ускорение, берется ускорение по умолчанию, равное DEFAULT_ACCELERATION;
2. Для каждой оси подсчитывается коэффициент равный [кол-во шагов]/[МАКС кол-во шагов] - это отношение я разъяснил в предыдущем сообщении;
3. Для Оси X - Если [текущее ускорение]*[коэффициент] > DEFAULT_MAX_ACCELERATION, то [текущее ускорение] = DEFAULT_MAX_ACCELERATION
4. Для Оси Y - Если [текущее ускорение]*[коэффициент] > DEFAULT_MAX_ACCELERATION, то [текущее ускорение] = DEFAULT_MAX_ACCELERATION
5. Для Оси E - Если [текущее ускорение]*[коэффициент] > DEFAULT_MAX_ACCELERATION, то [текущее ускорение] = DEFAULT_MAX_ACCELERATION
6. Для Оси Z - Если [текущее ускорение]*[коэффициент] > DEFAULT_MAX_ACCELERATION, то [текущее ускорение] = DEFAULT_MAX_ACCELERATION

Получается, что
для Оси Y, текущее ускорение, может быть равно DEFAULT_ACCELERATION, а может быть равно DEFAULT_MAX_ACCELERATION (для оси X).
для Оси E, текущее ускорение уже может быть равно, DEFAULT_ACCELERATION, а может быть равно DEFAULT_MAX_ACCELERATION (для оси X) или DEFAULT_MAX_ACCELERATION (для оси Y)
и т.д.
текущее ускорение может каждый раз меняться, но

В итоге, при движении, имеем одно ускорение: либо равное по умолчанию DEFAULT_ACCELERATION, либо при превышении, по любой из осей, значения DEFAULT_MAX_ACCELERATION, будет равное значению DEFAULT_MAX_ACCELERATION.


В общем смысл предыдущего сообщения не изменился:
DEFAULT_ACCELERATION - общее ускорение для осей X, Y, Z и для подачи прутка по оси E;
DEFAULT_MAX_ACCELERATION - ограничение ускорения для конкретной оси: X, Y, Z и подачи прутка по оси E;
DEFAULT_RETRACT_ACCELERATION - ускорение для обратной подачи прутка, ретракта;
Смотреть, не значит видеть!!!
Аватара пользователя
Kudesnik
 
Сообщения: 24
Зарегистрирован: 23 янв 2014, 14:17

Re: 3D принтер. Прошивка Marlin, оптимизация.

Сообщение unigenum » 01 сен 2015, 11:10

Kudesnik писал(а):1) Если по осям X,Y,Z не нужно перемещаться (перемещение 0 шагов), то ускорение равно DEFAULT_RETRACT_ACCELERATION
То есть, получается, что раз не перемещаемся, то смысла выдавливать пластик нет, тогда если и будет движение, то только ретракт.

2) Если же хоть по одной из осей X, Y, Z нужно переместиться (шагов > 0), то ускорение рассчитывается так

Значит DEFAULT_RETRACT_ACCELERATION действует, только когда движения по другим осям нет?
Получается, если в слайсере включены wipe или Z-lift, при которых требуется движение по осям во время ретракта, то RETRACT_ACCELERATION не действует?



Kudesnik писал(а):
Получается, что
для Оси Y, текущее ускорение, может быть равно DEFAULT_ACCELERATION, а может быть равно DEFAULT_MAX_ACCELERATION (для оси X).
для Оси E, текущее ускорение уже может быть равно, DEFAULT_ACCELERATION, а может быть равно DEFAULT_MAX_ACCELERATION (для оси X) или DEFAULT_MAX_ACCELERATION (для оси Y)
и т.д.

Это получается, что ускорение по всем одновременно движущимся осям будет ограничиваться ускорением одной оси?
Т.е. идет печать, движутся одновременно 3 оси Е Х У со значениями MAX_ACCELERATION {1500,1500,Z,800}, то ускорение у всех 3 осей будет ограничено минимальным из ряда 800?
unigenum
 
Сообщения: 705
Зарегистрирован: 29 окт 2012, 13:55
Откуда: СПб

Пред.След.

Вернуться в 3D печать

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

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