Размышление о скорости и мультишагах (double, quad multistepping) в Marlin

Подписаться на 3Dtoday
ArtemKuchin
Идет загрузка
Загрузка
22.02.17
3465
40
RepRap
13
Во всем отсылках по описанию управляющий плат на базе atmega1284 я читаю, что максимально достигаемая частота шагов (микрошагов) около 10000 в секунду и при использовании мультишагов до 40000 для Marlin/Repetier.

Предположим у меня 100 шагов на 1мм по X/Y.

Значит без использования упаковывания шагов в мальтишаги получаем максимальную скорость передвижения по оси
10000/100=100мм/сек. При печати движение происходит по двум осям одновременно, т.е. реальная гарантироанная максимальная скорость печати около 50мм/сек. На самом деле чуть меньше.

Использую мультишаги вы может поднять это значение в 3 раза (не стоит рассчитывать на 40000), т.е. до 150мм/сек. Побочные эффекты при этом гарантированы, так как мультишаги неравномерны. Т.е. будет и вибрация, и шум и странные узоры на стенках.

Само по себе это уже говорит, что строить мегапрочную раму, использовать легкой голову боудена и потом на это сажать электронику на Arduino на базе atmega1284 ерунда полная.
 bool all_steps_done = false;
  for (int8_t i = 0; i < step_loops; i++) {
    #define _COUNTER(AXIS) counter_## AXIS
    #define _APPLY_STEP(AXIS) AXIS ##_APPLY_STEP
    #define _INVERT_STEP_PIN(AXIS) INVERT_## AXIS ##_STEP_PIN

    // Advance the Bresenham counter; start a pulse if the axis needs a step
    #define PULSE_START(AXIS) \
   _COUNTER(AXIS) += current_block->steps[_AXIS(AXIS)]; \
   if (_COUNTER(AXIS) > 0) { _APPLY_STEP(AXIS)(!_INVERT_STEP_PIN(AXIS),0); }

    // Stop an active pulse, reset the Bresenham counter, update the position
    #define PULSE_STOP(AXIS) \
   if (_COUNTER(AXIS) > 0) { \
     _COUNTER(AXIS) -= current_block->step_event_count; \
     count_position[_AXIS(AXIS)] += count_direction[_AXIS(AXIS)]; \
     _APPLY_STEP(AXIS)(_INVERT_STEP_PIN(AXIS),0); \
   }

    #define CYCLES_EATEN_BY_CODE 240

    // If a minimum pulse time was specified get the CPU clock
    #if STEP_PULSE_CYCLES > CYCLES_EATEN_BY_CODE
   static uint32_t pulse_start;
   pulse_start = TCNT0;
    #endif

    #if HAS_X_STEP
   PULSE_START(X);
    #endif
    #if HAS_Y_STEP
   PULSE_START(Y);
    #endif
    #if HAS_Z_STEP
   PULSE_START(Z);
    #endif
    // For a minimum pulse time wait before stopping pulses
    #if STEP_PULSE_CYCLES > CYCLES_EATEN_BY_CODE
   while ((uint32_t)(TCNT0 - pulse_start) < STEP_PULSE_CYCLES - CYCLES_EATEN_BY_CODE) { /* nada */ }
    #endif

    #if HAS_X_STEP
   PULSE_STOP(X);
    #endif
    #if HAS_Y_STEP
   PULSE_STOP(Y);
    #endif
    #if HAS_Z_STEP
   PULSE_STOP(Z);
    #endif

    if (++step_events_completed >= current_block->step_event_count) {
   all_steps_done = true;
   break;
    }
  }


У ардуино по умолчанию prescaler для Timer 0 = 64, т.е. они тикает с частотой 250КГц. т.. один тик 4мкс.
Т.е. STEP_PULSE_CYCLES и CYCLES_EATEN_BY_CODE измеряются в тиках этого таймера.
#define CYCLES_EATEN_BY_CODE 240
#define STEP_PULSE_CYCLES ((MINIMUM_STEPPER_PULSE) * CYCLES_PER_MICROSECOND)
#define MINIMUM_STEPPER_PULSE 0
#define CYCLES_PER_MICROSECOND (F_CPU / 1000000UL) // 16 or 20

Итого STEP_PULSE_CYCLES = 0
Т.е. задержка MINIMUM_STEPPER_PULSE отсутсвует по умолчанию и ее включать надо, только ели есть проблемы. 240 циклов по 4мкс = 1мс.
Я так понял, что это сколько времени отрабатывает код. Выходит какой-то бред, так как таким макаром больше
1000 микрошагов в секунду не получить.
Но, к счатью, по умолчаню STEP_PULSE_CYCLES = 0 и поэтому эта часть кода не выполняется и сколько выполняется то, что выполняется я посчитать не могу.

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

Выбор double stepping/quad stepping в прошивки производится так:
if (step_rate > 20000) { // If steprate > 20kHz >> step 4 times
step_rate >>= 2;
step_loops = 4;
}
else if (step_rate > 10000) { // If steprate > 10kHz >> step 2 times
step_rate >>= 1;
step_loops = 2;
}
else {
step_loops = 1;
}

step_rate он считает исходя из того, на сколько надо переместится в шагах и скорости.

float inverse_millimeters = 1.0 / block->millimeters;
float inverse_mm_s = fr_mm_s * inverse_millimeters;
block->nominal_rate = ceil(block->step_event_count * inverse_mm_s); // (step/sec) Always > 0

Например, надо переместится на 200мм = 200мм*100ш/мм=20000 шагов
со скоростью 100мм/сек получается
20000*(100*1/200)=10000 шагов в сек
Для оси Z перемещение на 10мм вверх. 10мм*400ш/мм=4000 шагов, со скоростью 10мм/сек
получаем 4000/(10/10)=4000 ш/сек
В первом случае мы перешли уже в режим двойного шага.
При этом в расчетах участвует не сумма всех осей, а ось с максимальным значением
block->step_event_count = MAX4(block->steps[X_AXIS], block->steps[Y_AXIS], block->steps[Z_AXIS], esteps);

Так как все шаги отрабатывают в одном прерывании. Что, конечно, выглядит как-то очень оптимистично, так как
при высоком step rate на всех осях одновременно легко представить, что прерывание захлебнется просто и шаги не смогут идти с нужной частотой. Кроме этого при переходе одной оси в режим мультишага, все остальные тоже переходят в этот режим, так как цикл мультишаговый один на всех, т.е. точность падает сразу по всем осям и дребезг начинается сразу везде.

Я это к тому, что использование мультишага вообще не есть хорошая вещь, хотя это и даст прирост скорость, но это какая-то "высокая скорость курильщика". Разумнее не переходить в мультишаговый режим вообще, удерживая по всем осям количество шагов секунду менее 10000 исходя из приведенных формул. Причем даже при простом передвиженииа, а не только при печати. Если же надо повысить скорость, то лучше впаять 20МГц кристалл на плату и получим 25% прироста, только тогда исходный код надо править. Хотя там и учтена возможность использования 20Мгц платы во многих местах, именно это место никак не учитывает скорость МК.

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

При этом надо еще учесть,что осей на самом деле минимум 4, а если добавить еще вариант с 3-ся экструдерами, то начинаются какие-то очень сильные подозрения относительно максимальной скорости нормальной работы.
Одно дело обработать быстрое перемещение по оси X, которое уже вызывать double stepping,а другое дело обработать XY+E0,E1,E2. И если там 1/32 на драйверах и 400 шагов на E, то реальная максимальная скорость должна быть примерно чуть ниже плинтуса.

Очень интересная статья по данным и другим вопросам для тех, кто английский читает:
http://www.column80.com/api.v2.php?a=3dprinting&q=623

Продолжение с реальными измерениями с осциллографа следует...
Подписаться на 3Dtoday
13
Комментарии к статье

Комментарии

22 Фев 16:05
1
Спасибо.
Не всё до конца понял, но суть в принципе понятна.
Жду продолжения !
22 Фев 16:11
1
Плюсанул. Хотя, имхо, с учетом цены на китайские 32 бита, все это морально устарело.
22 Фев 17:10
3
Melzi 2 - 27 $
MKS SBASE - 46$
Кому то разница чувствительна, но оба говно, так как драйверы не модульные.
А НЕ говно на 32бита стоит еще больше, значительно больше, 50 за плату + драйверы от 3 за ерунду до 10 за нормальные.
А вот набор arduino mega 2560+ ramps 1.4 +5 фуфлодрайверов стоит 15 баксов с доставкой. Это не перебить ничем.

Печаль ситуации в том, что smoothieware не портирована на STM32,а этим stm32 stemp платочек за 3 баксов тонна везде, если ее к рампсу подключить она уделает всех.
https://www.aliexpress.com/item/Free-Shipping-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-Forarduino/32473214083.html
2$, 72 мегагерца, 48 пинов. Но это с малой памятью, но для понимая сойдет.

Вообще переход на 32bit пока еще сложноват. Сейчас bobc начал работы по переносу Marlin на 32 бита (Arduino Due и т.д.). Работы начаты пару месяцев назад, включаю в себя ранние наработки вроде Marlin4Due. Это официальный гит от марлина. Так что думаю к концу года будет что-то рабочее и приятное, вот тогда можно будет переползти дешево и сердито на Arduino Due + RAMP 1.4 + нормальные драйверы.
22 Фев 18:28
1
Я тут наткнулся на https://github.com/St3dPrinter/Marlin4ST
Будет время, попробую собрать под stm32f4disco, подрыгать шаговиками...
22 Фев 18:37
1
Ну вот в этом и проблема, что просто портировать марлин не выйдет, думать надо.
Что это за плевок в глаз?

if(step_rate > 10000) {
// If steprate > 20kHz >> step 4 times
step_rate = (step_rate >> 2)&0x3fff;
step_loops = 4;
}
else if(step_rate > 5000)
{
// If steprate > 10kHz >> step 2 times
step_rate = (step_rate >> 1)&0x7fff;
step_loops = 2;
}
else
{
step_loops = 1;
}

Еще и цифры в 2 раза меньше. Оно на STM32 в 2 раза медленне работает? MULTISTEPPING вообще на таких платформах не требуется.
22 Фев 23:44
0
Если интересен Марлин на 32бита, имеет смысл присмотреться к этому проекту
https://github.com/MagoKimbra/MK4duo
Это Итальянский Марлин на 8 и 32 бита.

Порт на STM32F103C8T6 интересная идея. Я пробовал собирать MK4duo - объем прошивки получается слишком большой :(. Уже выпускается принтер на этом чипе
http://hackaday.com/2016/06/13/review-monoprice-mp-select-mini-3d-printer/
но прошивка там закрытая.
23 Фев 00:25
0
Это все неживой тупик. Никакого продолжения не будет. Надо ждать официального марлина для ARM. Только там есть достаточная концентрация мозгов, что проект не заглох.
23 Фев 04:21
0
Разница в 20 баксов с SBaseй покрывается полным отсутствием бубна, и набором вкусняшек включая текстовый конфиг.
А драйвера свои можно воткнуть - там выводы штатно на плате есть.
зы. Хотя тоже недопилена - кривая сеть и усб, но мне оно не надо.
22 Фев 16:45
2
При печати движение происходит по двум осям одновременно, т.е. реальная гарантированная максимальная скорость печати около 50мм/сек
нет, не верно, и в куске когда это видно. На каждое прерывание происходит движение по всем осям. Т.е. с частотой 10KHz ВСЕ драйверы шаговых двигателей гарантированно получают импульс (или два, или 4) на вход STEP (если есть движение). Драйвер шаговика drv8825 может работать с импульсами 250KHz. Так что опасение
прерывание захлебнется просто и шаги не смогут идти с нужной частотой
считаю маловероятным. Далее:
переходе одной оси в режим мультишага, все остальные тоже переходят в этот режим, так как цикл мультишаговый один на всех, т.е. точность падает сразу по всем осям и дребезг начинается сразу везде
да нет же. В том же самом прерывании в одном цикле последовательно дёргаются (получают свой импульс) все шаговики. При этом кто-то получит 1 импульс, а кто-то 4.

С этим
Разумнее не переходить в мультишаговый режим вообще, удерживая по всем осям количество шагов секунду менее 10000 исходя из приведенных формул. Причем даже при простом передвиженииа, а не только при печати. Если же надо повысить скорость, то лучше впаять 20МГц кристалл на плату и получим 25% прироста, только тогда исходный код надо править.
согласен/
22 Фев 17:19
1
Может не поняли, что я имел ввиду под захлебнется.

на сколько я понял прерывания не всегда работают на частоте 10 КГц
uint16_t timer = calc_timer(acc_step_rate);
OCR1A = timer;
например четко рассчитывает частоты таймера для фазу ускорения
На 10КГц он переходит когда все по максимуму.. Расчет частоты таймера производится по таблицам
speed_lookuptable_fast и speed_lookuptable_slow для условно быстрых и медленных рейтов

Так вот, длительность выполнения прерывания должна быть достаточно малой, чтобы обеспечатить заданной частоту прерывания.
А длительно выполнения прерывания зависит напрямую от количество управляемых шаговых двигателей,а также от мультистеппинга.
Если длительность высока, то прерывание будет пропущение и фактическая реальная частота прерывания. а значит и шагов, упадет ниже заданной.
22 Фев 17:11
1
Внизу статьи по ссылке есть Табличка, которая наглядно демонстрирует пределы скоростей в зависимости от конфигурации железок и прошивок.
Может кому пригодится...
22 Фев 17:20
1
табличка устарела и нереальная, никогда мы на марлине не получите 837 мм/сек
где-то на форумах было обсуждение, товарищ не смог реально выжать даже 30000 шагов из марлина в реальных тестах, правда тут взаимозависимо железо и софт.
22 Фев 17:25
1
Это кто вам сказал, что она устарела?
Там же все написано... на 16Mhz всего 200, а на 20MHz уже 670 и только потом, при учетверении 837... но это же расчетные числа и зависят от конфигурации железа и прошивки, я же сразу об этом написал.
Всего лишь для ПОНИМАНИЯ...
22 Фев 17:40
2
"А там так и написано прямо

"This table is a outdated and should be reworked. The limits for Marlin/Repetier are too high!
:D
22 Фев 17:47
1
:D:D:D
Спасибо! Давно ее не открывал, кто-то дописал примечание, молодец!
Спасибо, что ткнули носом...

Я же не возражаю, что сама табличка ориентировочная, никогда не утверждал, что это догма.
Главное в ней ней не точность конкретных цифр, а в их диапазонах. Она наглядно показывает кто на что способен и при каких условиях. Она позволяет новичку, при конфигурировании своего принтера, определиться со своими потребностями относительно своих возможностей.

P.S. Очень бы хотел посмотреть на вашу печать на скорости хотя-бы 200мм/с, я уж не говорю про 800, об отсутствии которых вы так сожалеете ;)
22 Фев 18:34
1
А как же 250 мм/сек?

https://www.youtube.com/watch?v=V4o4wijMxq8
22 Фев 20:45
2
Там и до сотни разогнаться не успевает, какие там 250... я могу хоть 400 поставить, но при этом буду вынужден джерки и ускорения зажать на "дрыгостоле" и что, думаете средняя скорость печати сильно возрастет? Нет, немногим увеличится.

Эти все цифры "от лукавого", там не все так просто, мол, поставил скорость в слайсере 200мм/с и оно так и будет печатать на всех поворотах, сегментах и углах? Никогда... прошивка зарежет все потуги слайсера при пересчете с учетом ускорений и джерк...

P.S. Все это справедливо в том случае, если вам нужна качественная печать, а если хотите просто размазать по столу пластик, как в том ролике, то не вопрос, можно и так - не урезать ускорения и джерки, но только как быстро у вас рассыплется принтер я даже не берусь сказать... может на первой детали, а может на второй... :-)
24 Фев 10:45
1
Нет, немногим увеличится - согласен на 70%
https://youtu.be/4339wGiNrxM - явно наблюдается не достаточная производительность hotend итд.много замечаний...
но только как быстро у вас рассыплется принтер я даже не берусь сказать.. - зависит от качества используемых частей механики и веса самого принтера, правила и требования к корпусу и к ферме те же как для нормальных фрезерных станков с ЧПУ.
По ускорению есть калькулятор, в самом конце...
http://www.prusaprinters.org/calculator/
24 Фев 11:20
0
согласен на 70%
Ну, зачем же вы так... все будет зависеть от детали, согласитесь... если деталь больших размеров и много прямых и длинных участков, да может и на такую цифру увеличится, не вопрос... а если деталь будет небольших размеров и сложной конфигурации? А шестеренка?

Давайте трезво рассуждать, а не вдаваться в частности. Ваш частный пример - деталь состоящая из длинных участков. Да, конечно, кто ж тут спорит, что можно получить ускорение печати. А большинство здесь присутствующих печатают детали редко когда больших габаритов. Речь же идет не об установлении рекордов печати, как вы любите. А о качественной печати. Каждый раз подход индивидуальный, к каждой детали при настройке слайсера, даже у вас. Вы же не можете все детали печатать на одной скорости и с одними параметрами слайсера.

зависит от качества используемых частей механики и веса самого принтера
В основном кто здесь задает вопросы - покупает на али...так что вы прекрасно осознаете о каком качестве и каком весе может идти речь... Надо же наверное реальнее смотреть на вещи. Мы с вами прекрасно понимаем о чем речь. Если хочешь печатать свыше 100мм/с - придется дорабатывать принтер и не просто дорабатывать, а достаточно кардинально переделывать практически все его узлы.
24 Фев 12:10
1
а если деталь будет небольших размеров и сложной конфигурации? А шестеренка? - тут спору нет, но я их вообще не печатаю, не качественные они на ФДМ их надо печатать применяя др. технологии 3д печати :) Скорости надо понижать, но не сильно ниже крейсерской. Вот тут надо я думаю ввести такое понятие - каждый принтер построенный на деталях Алиэкстрес имеет свою крейсерскую скорость .
Прошу не расценивать мои 30% не согласия так остро:) Это всего лишь 30%, в основном я согласен с вами и это 70% :)
А большинство здесь присутствующих печатают детали редко когда больших габаритов.- а зачем тогда понятие Термокамера появилась? для каких объектов? Разве не для высоких? Если не будет нормальной, "человеческой скорости", ( я так это называю) то такой объект будет печататься так долго что клиент заказавший деталь подумает что над ним издеваются и хотят кинуть.
Вы же не можете все детали печатать на одной скорости и с одними параметрами слайсера. - да, не все, но 85-90% на одной и той же скорости, в хабе есть только 3 алгоритма подхода к печати, так очень легко работать. 3-й алго VIP - отдельный подход к детали и к его цене и не все готовы за такое платить.
А о качественной печати. - вот тут конечно я не согласен, мы не можем работать в отсутствии качества, просто все оговаривается заранее - самый важный вопрос опера к клинету через чат хаба - для чего будет применяться объект?
Мое мнение:
Как мы тут относимся к качеству в данном сообществе - мы в своих обсуждениях тут в портале стремимся к качеству, который годен для литейных дел, но не все же хотят ( и не нужно) такое высокое качество, согласитесь:) За любое повышеное качество детали от основного надо платить. Только так можно построить бизнес.
Получается что надо вводить в наши понятия уровни качества и тогда все встанет на место:)
24 Фев 16:48
0
Это всего лишь 30%, в основном я согласен с вами и это 70%
Простите меня великодушно, я вас не так понял.

Вы все верно говорите.
Вот только вы говорите с точки зрения построения бизнеса (и это нормально), а я же говорю с точки зрения обывателя, получившего в руки принтер и не знающего с какой стороны к нему даже подходить, судя по вопросам, часто здесь встречающимся. Я не об авторе топика конечно, а в целом.

Спасибо за разъяснения.
23 Фев 00:29
0
Есть только один способ правильно измерить скорость: взять расстояние и разделить на время. Писать в заголовках может каждый. Да и не в этом суть то была. 250 думаю вполне достижимо по крайней мере по одной из осей при небольшом микрошаге (1/4 до 1/16), но качества там не будет.
22 Фев 22:03
1
Благодарю artemkuchin!

Вы подтвердили мои догадки - за RAMPS есть будущее.

Первоначальная концепция была в том, что шилд - тот же, а процессор - меняется.
Вроде даже было несколько попыток раскачать 32-битные платы в форм-факторе МЕГИ на сайтах типа Кикстартера...

С Уважением,
Ski.
22 Фев 22:45
0
Значит без использования упаковывания шагов в мальтишаги получаем максимальную скорость передвижения по оси
10000/100=100мм/сек. При печати движение происходит по двум осям одновременно, т.е. реальная гарантироанная максимальная скорость печати около 50мм/сек. На самом деле чуть меньше.
Ошибка в рассуждениях.
Марлин как и абсолютное большенство других прошивки за одно прерывание таймера управляет всеми моторами. Потому не 50мм\сек а все также 100мм\сек.
В случае 2х или 4х он просто чуть ждет и еще раз дергает /STEP.

Естественно что частота следования шагов будет кривая при 2х 4х. Это верно для Марлина и Репетира (и из производных типа сейлфиша).
Если надо чтоб все четко шло - то Teacup

Но суть не в этом, в отсутствии каких либо задержек все эти мультишаги практически сливаются в один, но с большим резонансом и шумом.
Ничего подобного - во первых /STEP реагирует на фронт, во вторых запись в порт занимает время и даже запись 0 и сразу 1 не происходит в течение одного цикла проца. Да - там не 50% duty cycle ну и пофиг (в большенстве случаев).

Итд и тп - у меня хоть и джетлаг, и марлин сам косоязычен но и то видно что в рассуждения есть путаница между циклами прерывания и циклами проца.
23 Фев 01:34
0
Я говорю о том, что
а) для дергания всеми ногами несколко раз по кругу в одном прерывании может не хватит мощности МК чтобы держать частоту прерываний на заданном уровне. Это надо проверять на практике.
б) что значит ничего подобного? шаги будут идти с отличными от нормального ритм и ритм будет не постоянный, это однозначно хреново. Самое ужасное начнется когда будет резкие прыжки от single stepping до double stepping. Реально все будет дрожать и прыгать.

Теперь еще положите свеху в это прерыывание autoleveling и advance.
23 Фев 08:00
0
а) для дергания всеми ногами несколко раз по кругу в одном прерывании может не хватит мощности МК чтобы держать частоту прерываний на заданном уровне. Это надо проверять на практике.
Какую частоту, если частота перерываний по таймеру изменяется? Да гдето будет потолок, но так его ведущие девы марлина предполагается как бы знают как с осцилографом посмотреть.

б) что значит ничего подобного? шаги будут идти с отличными от нормального ритм и ритм будет не постоянный, это однозначно хреново. Самое ужасное начнется когда будет резкие прыжки от single stepping до double stepping. Реально все будет дрожать и прыгать.
Ничего подобного - это про "практически сливаются в один, но с большим резонансом и шумом.". Они "сливаться в один" даже на ламповом осцилографе не будут, не считая для чипов по даташиту держащих сотни кгц.
Будет страдать только период следования, но и то это не критично ибо на высоких скоростях инерция ротора существенная, а на малых скоростях ошибка отсутствует. И это не считая косяков драйвера и питания изза чего синус у них мягко говоря не чистый.

Если положит сверху автолевел то вообще ничего не измениться ибо он всего лишь корректирует координату в планере. Адванс тоже всеголиш фича планнера чтоб фризы уменьшить. Ну так то что 8бит много коротких отрезков на большой скорости отработать без фриза не может было известно давным давно и тут были сайдбайсайд фотки где видны пупырки на сапоге изза этих фризов, и их отсутствие на 32битке.
Хотя и 32битку тоже можно заставить подтормаживать в планере - былобы желание.
23 Фев 11:01
0
Я признаю, что фраза о "сливании" был однозначно неверной. Импульсы, конечно, чередуются и разделены. И драйвер их принимает как шаги.
По остальному - тесты покажут. Будет реальные данные - сообщу в продолжении.
23 Фев 17:18
0
Тут еще был чейто эксперимент правда вроде к репетиру, чтобы ничего на дисплей не выводить если не успеват. В любом раскладе двузлучевым осцилом смотреть надо степы и запись в дисплей.
Можно наверное и на гпио пины дергать в зависимости от где код испольняется - сильно помогает обычно.
23 Фев 00:36
0
Я чуток докину. Без вникания в прошивку, тыркал логическим анализатором. Но там марлин еще 1.0.2 был, хз, менялось ли чего с тех пор.
23 Фев 07:34
0
Сразу вот тоже тебя вспомнил
24 Фев 10:40
0
Илья, можешь сказать/подсказать/ предположить что это такое и как это влияет на качество печати и вообще, для чего его внесли?
const unsigned int dropsegments=5
находится в Configuration_adv.h
почему 5, а не 1?
это же увеличивает нагрузку на вычислитель ногодрыга, зачем оно надо?
У меня нет дисплея, и нет доп нагрузки на ногодрыг и я устанавливаю сейчас на 1 чтоб посмотреть результат.
Не знаю че получу в итоге, но надо попробовать.
Страшно когда нет софта, который измеряет нагрузку на ЦП ногодрыга при выполнении печати,а может есть и я не знаю?
24 Фев 11:55
0
// Bail if this is a zero-length block
if (block->step_event_count < MIN_STEPS_PER_SEGMENT) return;


Т.е. он просто не рисует линии для которых надо меньше чем столько микрошагов двигателя и это как раз разгружает МК.
24 Фев 12:17
0
Т.е. идет накопление искусственной ошибки, это как называется?
это дело относится к построению радиан! Это Arc interpretation settings!
// Arc interpretation settings:
#define MM_PER_ARC_SEGMENT 1
#define N_ARC_CORRECTION 25
const unsigned int dropsegments=5

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

А перевод функции просто убивает - все с меньшими значениями от 5, будут игнорироваться, и присоединятся к следующему движению.
"everything with less than this number of steps will be ignored as move and joined with the next movement"

Мдя, МК наверное было делать нечего чем заниматься такой чепухой я так эту команду понимаю.
Остается понять - как это работает с цифрой 1 или 0
24 Фев 12:32
0
Я не такой знаток марлина, к сожалению. В самом марлине это прокомментировано как
everything with less than this number of steps will be ignored as move and joined with the next movement
Что я бы перевел как "игнорирование сегмента, на который приходится меньше микрошагов как отдельное перемещение, добавление его к следующему перемещению". На загрузку должно влиять, скорее, положительно. А как измерять загрузку ногодрыга, в котором нет ничего, характерного для ОС (типа планировщика задач), и работающего на прерываниях, я не представляю.
24 Фев 12:39
0
сможешь прогнать такое с цифрой 1 и/или 0 у себя на стенде? может это дело изменит в лучшую сторону провалы step на больших скоростях?
Только, отключи из прошивки дисплей плиз для чистого эксперимента.
24 Фев 12:50
0
К сожалению, в ближайшее время не смогу. Это надо все заново собирать по закоулкам.
24 Фев 13:10
0
ok, жаль...
24 Фев 19:17
0
Порт smoothieware на STM32 есть. Правда староват.

Нелюбимый Вами Repetier firmware, кстати, давно уже из коробки работает на Due. И позволяет менять пороговую частоту doublestepping-а.
24 Фев 19:44
0
Вот тут есть симулятор шаговиков и их драйверов. Посмотрите, как ведут себя дешевые китайские моторы на скоростях 100 мм/с. Даже если Вы разгоните проц. и будете с равным интервалом выдавать импульсы, моторы сами на такой скорости выть будут. Вот например, мои моторы из Anet A8 с A4982 на 100 мм/c (10kHz) и на 200 мм/с (20kHz), красная линия - идеал, синяя - симуляция:

f8157c6048a848fc803c2c172740ee72.png
ab286458ec1b970ce9cc45d374a38899.png


Вывод: кроме проца и механики нужно еще и моторы с драйверами менять, чтобы приличную скорость развить.
31 Мар 13:12
0
Добрый день!
Тоже задавался вопросом, « с какой же скоростью может вращаться мотор? », на просторах сети встречаются разные цифры и 200 об/мин и 3000 об/мин. Почитав этот пост, постепенно начало проясняться.
Так как электродвигатель является преобразователем электрической в механическую, то осмелюсь предложить называть единицы измерения своими именами, т.е. если двигатель то шаг, а если электроника то импульс, думаю от этого отпадет подавляющее большинство вопросов.
Итак, имеем:
а). шаговый (импульсный) электродвигатель – 200 шагов/оборот, с двумя обмотками (включаем 1 обмотку – шаг – выключаем, включаем 2 обмотку – шаг – выключаем, и так 200 раз на 1 оборот, чем быстрее нажимаем, тем быстрее вращается).
б). электронику которая может (нажимать кнопки) включать обмотки с частотой 10000 импульсов/секунду.
в). так называемый «микрошаговый режим» на электронике или точнее будет назвать «микроимпульсный режим», т.е. мы делим не шаг, а импульс.
Соединяем все это вместе, что получаем:
1. режим 1/1 – 1 шаг двигателя/1 импульс, т.е. двигатель получит 10000 импульсов за секунду и шагнет 10000 раз за секунду, переведем в обороты 10000/200 = 50 об/сек;
2. режим 1/2 - 1 шаг двигателя/2 микроимпульса (потому что, мы разделили 1 импульс на 2 импульса разной мощности), двигатель шагнет 5000 раз за секунду или 25 об/сек.
Ну и остальное деление по такому же принципу.
Что касается скорости перемещения:
Имеем:
Двигатель 200 шагов 1,8° угол шага.
Шпуля GT2 20 зубов Ø12,22 мм.
Ремень GT2 толщина резины до корда в зубцовой части 0,254 мм на одну сторону.
Получаем:
Рабочий диаметр ремня – 12,22+0,254*2=12,728 мм
Длина окружности – 12,728*π=39,986 мм
Максимальную скорость перемещения:
в режиме 1/1 – 50*39,986=1999,3 мм/с
в режиме 1/2 – 25*39,986=999,65 мм/с
в режиме 1/16 – 3,125*39,986=124,96 мм/с

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Проект "Горыныч"

Spider Jerusalem

3Dtoday за 60 секунд от 25 мая

Значок из игры "Космические Рейнджеры"

3D-биоручка прошла первые испытания на лабораторных животных

Какой 3D сканер выбрать? ТОП-4 от 3Dtool