Технический форум по робототехнике.
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
и это как то влияет на температуру стола.
Пока удалил.
unigenum » 19 авг 2015, 19:29
Объясните, пожалуйста, по-русски значение параметров
#define DEFAULT_MAX_ACCELERATION
#define DEFAULT_ACCELERATION
я понимаю, что это параметры ускорений и на практике могу видеть разницу при изменении DEFAULT_ACCELERATION
а вот зачем тогда DEFAULT_MAX_ACCELERATION?
в комментариях в прошивке в обоих случая говорится, что это некие максимальные величины.
а зачем 2 раза определяются максимумы?
setar » 20 авг 2015, 12:47
какой правильный вопрос!
сначала начал отвечать, а потом задумался и полез в код

не поверите эта
переменнаяконстата в коде применяется всего в двух местах :
1. в конфиге
2. сохранение конфига в EEPROM
пожалуй стоит адресовать этот вопрос репозитарий менеджерам - дирижерам сообщества разработчиков
Scald » 20 авг 2015, 16:15
Какая прелесть...
dccharacter » 20 авг 2015, 17:55
А никто не пробовал прогнать прошивку через статический анаизатор?
holomrn » 20 авг 2015, 18:00
pvss там просто с ума сходит от качества кода.
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
unigenum » 24 авг 2015, 05:09
не совсем понятно...
DEFAULT_ACCELERATION конкретно задано и прокомментировано, как максимальная величина.
а текущее ускорение может быть меньше или равно этой максимальной величины.
и изменение этой величины реально заметно при печати, видно, как изменились ускорения и движения становятся плавнее.
и DEFAULT_MAX_ACCELERATION тоже определяет какой-то максимум. но на практике никаких изменений вообще не заметно, будь там 100 или 10000.
у меня EEPROM вообще закомментировано в прошивке, получается туда ничего не записывается и не читается. значит DEFAULT_MAX_ACCELERATION не работает?
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 раз(а).
unigenum » 24 авг 2015, 12:58
спасибо за понятный ответ. в принципе я так и предполагал.
одно значение общее для осей, другое кокретно по каждой.
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 не ограничивает ускорения по каждой из осей, как написано выше.
Или я что-то не правильно понял?
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
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, а не только на Е с ретрактом.
Было бы очень интресно узнать эту "зависимость" и "влияние"
Этот параметр действует только на движение вверх при ретракте или еще при возврате на исходную позицию прямой подачей?
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 - ускорение для обратной подачи прутка, ретракта;
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?