roboforum.ru

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

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

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

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

Сообщение faeton13 » 25 авг 2012, 02:58

+1 кисс хорош. ему б еще управления мостами... а как включить экспериментальные функции? )
90% моих ответов абсолютно верны, но входит ли это в их число?
Аватара пользователя
faeton13
 
Сообщения: 971
Зарегистрирован: 27 янв 2012, 13:01
Skype: fooltroll

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

Сообщение setar » 25 авг 2012, 03:20

Jonatan писал(а):Bridging is coming...I just have not had much time, for sleep, much less for KISSlcier


Добавлено спустя 2 минуты 57 секунд:
мосты скоро будут, а с экспериментальными функциями я пока сам не понимаю ...
у меняя от них только хуже:
(соответственно нужно разремарить #define ADVANCE )
Код: Выделить всёРазвернуть
// extruder advance constant (s2/mm3)
//
// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTUDER_ADVANCE_K * cubic mm per second ^ 2
//
// hooke's law says:      force = k * distance
// bernoulli's priniciple says:   v ^ 2 / 2 + g . h + pressure / density = constant
// so: v ^ 2 is proportional to number of steps we advance the extruder
//#define ADVANCE

#ifdef ADVANCE
  #define EXTRUDER_ADVANCE_K .01

  #define D_FILAMENT 1.75
  #define STEPS_MM_E 604
  #define EXTRUTION_AREA (0.5 * D_FILAMENT * D_FILAMENT * 3.14159)
//  #define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS]/ EXTRUTION_AREA)
  #define STEPS_PER_CUBIC_MM_E (STEPS_MM_E / EXTRUTION_AREA)

#endif // ADVANCE


Добавлено спустя 3 минуты 41 секунду:
вот тут почитать можно : preliminary support for Matthew Roberts advance algorithm For more info see: http://reprap.org/pipermail/reprap-dev/ ... 03323.html

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

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

Сообщение ReaN » 25 авг 2012, 04:03

дк я и не говорил, что в прошивке диаметр - просто на шарике не видно, а на последней модели заметил, когда за печатью наблюдал - щели остаются - просто в слике изменить диаметр нужно... надеюсь, что до замены болта в экструдере, я к прошивке прикасаться не буду, а то, если честно, надоело уже - подбор параметров, компиляция, программатор, прошивка, проверка...
Аватара пользователя
ReaN
 
Сообщения: 615
Зарегистрирован: 06 июн 2012, 09:42
Откуда: Киев
прог. языки: Алгол :)
ФИО: Александр

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

Сообщение setar » 25 авг 2012, 05:00

ReaN писал(а):а то, если честно, надоело уже - подбор параметров, компиляция, программатор, прошивка, проверка...

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

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

Сообщение faeton13 » 25 авг 2012, 15:25

разкомментить в прошивке?
90% моих ответов абсолютно верны, но входит ли это в их число?
Аватара пользователя
faeton13
 
Сообщения: 971
Зарегистрирован: 27 янв 2012, 13:01
Skype: fooltroll

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

Сообщение setar » 25 авг 2012, 16:32

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

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

Сообщение faeton13 » 25 авг 2012, 18:00

ну тут кисс упоминался думал может где можно в бетта тестеры записаться )
90% моих ответов абсолютно верны, но входит ли это в их число?
Аватара пользователя
faeton13
 
Сообщения: 971
Зарегистрирован: 27 янв 2012, 13:01
Skype: fooltroll

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

Сообщение setar » 26 авг 2012, 04:46

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

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

Сообщение karabas2011 » 24 окт 2012, 11:10

вчера прошил ардуину мегу 2560 той же прошивкой что для 1280 (с учётом платы) дык зараза пронтерфейс не хочет с ней коннетиться на 250000 пришлось поставить 115200 тогда без проблем.
Всё это под федорой 15. И ещё эта мега опознаётся не как USB0 а как ACM0...
karabas2011
 
Сообщения: 1607
Зарегистрирован: 04 мар 2012, 01:06
Откуда: Севастополь-Москва

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

Сообщение hudbrog » 25 окт 2012, 23:15

Сидел тут разбирался как marlin работает со фидрейтом/ускорением, решил опубликовать записки по алгоритму. Начинаем с момента когда мы нашли G1:

// обработчик GCODE (marlin.pde)
1) Парсим координаты XYZE
2) Парсим F (ставим next_feedrate = F и, если найденное значение больше нуля (а F можно передать отрицательное значение?) - то и текущий фидрейт тоже)
3) Если включен FWRETRACT: если авторетракт включен (M209) и если в G1 нет движений по XYZ, но есть по E то: если засасываем на больше чем MIN_RETRACT(т.е. это ретракт), поднимаем по Z на zlift, исправляем объем ретракта и фидрейт ретракта(задаются в M207); если выплевываем больше чем на MIN_RETRACT(рестарт), корректируем объем и фидрейт(M208), но почему-то не возвращаем Z вниз
4) Проверяем на попадание движения в софтовые ограничения размера платформы
5) Умножаем фидрейт на фидрейт мультиплайер (M220 Sxxx)
// планнер (planner.cpp)
6) Если буффер планировщика полный - ждем пока появица место под команду
7) Если PREVENT_DANGEROUS_EXTRUDE, он включен (M302 отключает) и температура экструдера ниже желаемой, выкидываем движение по E как если его не было (считаем что текущие абсолютные координаты равны тем, которые мы должно были получить)
8 ) Если PREVENT_LENGTHY_EXTRUDE и длина экструзии больше EXTRUDE_MAXLENGTH - как в пункте 7
9) Считаем по какой оси будет самое большое перемещение (учитывая extrudemultiply, который задается через M221 Sxxx), если это перемещение меньше чем dropsegments (configuration_adv.h), то забиваем на эту команду (текущая позиция остается прежней, соответственно следующая пройдет по гипотенузе)
10) Включаем моторы осей (если Z_LATE_ENABLE, то не включаем мотор Z) и экструдеров(всегда всех трех)
11) Проверяем что текущий feedrate не меньше чем minfeedrate для экструдирования, и mintravelrate для перемещений без E
12) Если нет движений, а тока экструзия, то размер движения = размер экструзии, иначе только по осям sqrt(X^2+Y^2+Z^2)
13) Считаем скорость перемещения (inverse_second) == фидрейт/размер движения
14.1) Если стоит OLD_SLOWDOWN и буфер заполнен меньше, чем на половину, то фидрейт уменьшается пропорционально заполнению количеством команд
14.2) Если стоит SLOWDOWN и буфер заполнен меньше, чем на половину, то считаем время сегмента в мкс (1e6/inverse_second) и он оказывается короче, чем MINSEGMENTTIME (M205 Bxxx), то замедляем движение через inverse_second
15) Для каждой оси считается текущая скорость (delta_mm*inverse_second), и если превышает макс. скорость оси(DEFAULT_MAX_FEEDRATE или M203) то замедляем всю скорость чтобы попал в эту ось (общий коэффициент speed_factor)
16) Если XY_FREQUENCY_LIMIT, проверяем была ли смена направления вращения мотора по осям, если да, то: для каждой оси выбираем самый долгий сегмент из трех, между осями выбираем меньший, и сравниваем с (1e6/XY_FREQUENCY_LIMIT), если оказывается меньше - то замедляем всю скорость (speed_factor).
17) Окончательно рассчитываем скорость с применения спид_фактора для всех осей.
18) Делим максимальное количество шагов по одной из осей на длину всего движения и умножаем на ускорение (M204 Sxxx) - это нормальное ускорение в шагах/сек^2
19) Если нормальное_ускорение*размер_сегмента_по_оси_в_шагах/максимальный_сегмент_в_шагах больше максимального ускорения по этой оси(M201) - замедляем нормальное ускорение
20) Делаем обратную 18й операцию с нормальным ускорением - это ускорение для этого блока
--Расчет поворотов
21) jerk - это вектор изменения скорости, т.е. считается как sqrt((cur_speed_x-prev_speed_x)^2+(cur_speed_y-prev_speed_y)^2+(cur_speed_z-prev_speed_z)^2)
22) Если текущий jerk>max_xy_jerk (или любой другой из max_??_jerk) - вводим замедляющий фактор
23) Максимальная скорость входа в текущий сегмент - min(скорость прошлого сегмента, jerk*замедляющий_фактор)
24) Допустимая скорость входа в текущий сегмент - такая, чтобы за размер этого сегмента с максимальным допустимым для него ускорениям мы могли замедлиться до нуля в рамках сегмента
25) Реальная скорость входа в сегмент - min((23),(24))
26) С учетом этого у предыдущего сегмента обновляется его номинальная скорость
27) Считаем алгоритм ADVANCE'а.. основная идея вот тут http://reprap.org/pipermail/reprap-dev/ ... 03323.html (надо попробовать)
28) Пересчитываем весь план (проходим в обратном порядке, с учетом jerk'а замедляем скорости, а потом снова в хронологическом порядке и пробуем их поднять обратно)

Не знаю уж насколько это кому-то будет полезно, но у меня какое-то количество мыслей вызвало..
У меня в голове опилки и длинные слова меня только огорчают.
Аватара пользователя
hudbrog
 
Сообщения: 1585
Зарегистрирован: 14 май 2008, 15:49
Откуда: Москва
ФИО: Алексей

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

Сообщение setar » 25 окт 2012, 23:26

проверь плиз фикс FWRETRACT на логику :

Код: Выделить всёРазвернуть
Marlin/Marlin.pde
@@ -672,26 +672,34 @@ void process_commands()
       case 10: // G10 retract
       if(!retracted)
       {
+        SERIAL_ECHO_START;
+        SERIAL_ECHOLN("Retract");
         destination[X_AXIS]=current_position[X_AXIS];
         destination[Y_AXIS]=current_position[Y_AXIS];
-        destination[Z_AXIS]=current_position[Z_AXIS];
-        current_position[Z_AXIS]+=-retract_zlift;
+        current_position[Z_AXIS]+=retract_zlift;
         destination[E_AXIS]=current_position[E_AXIS]-retract_length;
+        destination[Z_AXIS]=current_position[Z_AXIS];
         feedrate=retract_feedrate;
         retracted=true;
         prepare_move();
       }
       
       break;
-      case 11: // G10 retract_recover
-      if(!retracted)
+      case 11: // G11 retract_recover
+      if(retracted)
       {
+        SERIAL_ECHO_START;
+        SERIAL_ECHOLN("UnRetract");
+//        SERIAL_ECHO("G11:E=");
+//        SERIAL_ECHO(current_position[E_AXIS]);
         destination[X_AXIS]=current_position[X_AXIS];
         destination[Y_AXIS]=current_position[Y_AXIS];
+        current_position[Z_AXIS]+=-retract_zlift;
+        current_position[E_AXIS]+=retract_recover_length;
+        destination[E_AXIS]=current_position[E_AXIS];
         destination[Z_AXIS]=current_position[Z_AXIS];
-       
-        current_position[Z_AXIS]+=retract_zlift;
-        current_position[E_AXIS]+=-retract_recover_length;
+//        SERIAL_ECHO("->E=");
+//        SERIAL_ECHOLN(destination[E_AXIS]);
         feedrate=retract_recover_feedrate;
         retracted=false;
         prepare_move();
@@ -1550,11 +1558,13 @@ void get_coordinates()
   if( !(seen[X_AXIS] || seen[Y_AXIS] || seen[Z_AXIS]) && seen[E_AXIS])
   {
     float echange=destination[E_AXIS]-current_position[E_AXIS];
+      SERIAL_ECHO_START;
+      SERIAL_ECHO("AutoRetract:");
+      SERIAL_ECHOLN(echange);
     if(echange<-MIN_RETRACT) //retract
     {
       if(!retracted)
       {
-     
       destination[Z_AXIS]+=retract_zlift; //not sure why chaninging current_position negatively does not work.
       //if slicer retracted by echange=-1mm and you want to retract 3mm, corrrectede=-2mm additionally
       float correctede=-echange-retract_length;
@@ -1571,6 +1581,7 @@ void get_coordinates()
       if(retracted)
       {
       //current_position[Z_AXIS]+=-retract_zlift;
+      destination[Z_AXIS]+=-retract_zlift;
       //if slicer retracted_recovered by echange=+1mm and you want to retract_recover 3mm, corrrectede=2mm additionally
       float correctede=-echange+1*retract_length+retract_recover_length; //total unretract=retract_length+retract_recover_length[surplus]
       current_position[E_AXIS]+=correctede; //to generate the additional steps, not the destination is changed, but inversely the current position
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

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

Сообщение hudbrog » 25 окт 2012, 23:41

Ой, я на самом деле не уверен. Я не понимаю почему, но он оба раза реализовал zlift не как изменение дестинейшена, а как изменение начальной координаты. И в таком формате G10 реализован у него был в общем-то правильно, а в G11 одна опечатка, там надо if(!retracted) поправить на if(retracted).

После твоего исправления выходит, что ты меняешь текущую координату по Z, но при этом destination ставишь таким же, так что никакого движения по оси Z в результате не будет, а очень даже смещение слоя произойдет чисто по мнению марлина.
У меня в голове опилки и длинные слова меня только огорчают.
Аватара пользователя
hudbrog
 
Сообщения: 1585
Зарегистрирован: 14 май 2008, 15:49
Откуда: Москва
ФИО: Алексей

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

Сообщение setar » 25 окт 2012, 23:44

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

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

Сообщение hudbrog » 25 окт 2012, 23:48

И zlift работает?
У меня в голове опилки и длинные слова меня только огорчают.
Аватара пользователя
hudbrog
 
Сообщения: 1585
Зарегистрирован: 14 май 2008, 15:49
Откуда: Москва
ФИО: Алексей

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

Сообщение setar » 26 окт 2012, 00:26

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

Добавлено спустя 1 минуту 5 секунд:
проверял просто - ставил zlift 5mm

Добавлено спустя 39 секунд:
сейчас ещё раз проверю

Добавлено спустя 31 минуту 48 секунд:
да, работает.
за таким нюансом что изначально я не правильно понял суть
M208 - set recover=unretract length S[positive mm surplus to the M207 S*] F[feedrate mm/sec]
и у меня этот параметр определяет не "добавку" а полное движение назад.
например если M208 = 0 то будем оттягивать пластик не возвращая вовсе.
но это правится просто
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Пред.След.

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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 14